dotfilesをgitで管理してみる
今まで設定ファイルをすべてローカルで管理していました。
ですが、正直色々と面倒になって来たので、gitで管理してやることにしました。
それでやったことのメモ書きです。
設定ファイルをひとまとめに
まず~/
直下に.dotfiles
として、設定ファイルをまとめて置くディレクトリを作ってやりました。
$ mkdir ~/.dotfiles
ひとまず、目につくと言うか、よく使うものだけを管理するようにしました。
なので、今回はzsh
とEmacs
の設定ファイルである
.zshrc .emacs
この二つを.dotfiles
直下に配置することにしました。
$ cd ~ $ mv .zshrc .emacs ... ~/.dotfiles
シェルスクリプトでバラ撒く
シェルスクリプトを実行することで、設定ファイルをばら撒こうと思います。
なので、ごりごりと(今回はそんなに書いてないけど)シェルスクリプトを書いていきます。
今回は、設定ファイルの実体ではなく、シンボリックリンクを所定の場所にばら撒いていきます。
こうすることで.dotfiles
ディレクトリのみをgitで管理すれば良いようにします。
今回は、以下のシェルスクリプトをsetting.sh
として作成します。
#!/bin/zsh echo -n "Setting? [y...1/n...0]: " # if文の練習を含めて確認ダイアログを置いた read ans if test ${ans} -eq 1; then ln -s ~/.dotfiles/.emacs ~/.emacs ln -s ~/.dotfiles/.zshrc ~/.zshrc echo "done." else echo "Nothing to do. Exit." fi
では、setting.sh
として、.dotfiles
の中に保存しましょう。
そして、そのままでは実行できないので、実行権限を付けてやります。
$ chmod +x setting.sh
これで、シェルスクリプトsetting.sh
が実行できるようになりました。
gitで管理するための設定をする
この.dotfiles
に対してgitの設定します。
$ cd ~/.dotfiles $ git init $ git remote add origin {リポジトリのURL} $ git add . $ git commit $ git push origin master
とかなり割愛(?)しましたが、こんな感じ
そして構築
この.dotfiles
を環境構築したいアカウントの~/
直下にgit clone
して移動します。
もちろん同じマシンの別アカウントでも、別マシンの別アカウントでも。
$ git clone {リポジトリのURL} $ cd ~/.dotfiles
最後にシェルスクリプトsetting.sh
を走らせます
$ ./setting.sh
これで別環境でも設定ファイルをばら撒けます。
まとめ
設定ファイルはバラまくことができますが、今回はzshやemacsがインストールされていることが前提です。
そのため、効率化という意味ではまだ今ひとつかなという感想です。
今後はログインシェルを変更する等を含めて、自動化できるようにしていきたいです。
まとめのまとめ
シェルスクリプトってやっぱ便利
お菓子でクリスマスの備えをする話
この記事は、SLP KBIT Advent Calendar 2015 9日目の記事です。
クリスマスに備えよ
タイトル通り、お菓子でクリスマスの備えをしましょう。
クリスマスといえば、お菓子は必須ですよね。
さっそく
準備をしていきましょう。
準備するもの
- Raspberry Pi B+ model
- キーボード
- マウス
- microSDカード
- LED何本か
- 抵抗
- ICクリップ(は普通は使いません。メスのジャンパピン入手できなかったので代用しただけです。)
ぼくのおもてた、おかしとちがう
お菓子とは「Raspberry Pi」という小型コンピュータのことです。
クリスマスのお菓子といえばケーキ?ホイップクリームを塗る段階で挫折しそうなのでやめておきました。
Raspberry Piとは
イギリスのラズベリーパイ財団によって開発された教育用の小型コンピュータです。
スペック別に様々なモデルが存在しますが、ミドルモデルのB+ modelでも、4,000円出せばお釣りが来ます。
組込み用途はもちろん、Apacheを走らせてWebサーバとしての利用なども出来なくはないそうです。
んで、何すんのさ
これでチカチカ光るイルミネーションを作ってやりましょう。
これで、クリスマスが1人ぼっちでも、寂しくない。
ぼくのRaspberry Piについて
Raspberry Pi専用OSで、Debian系OSであるRaspbianを利用しています。 他にもUbuntu系のOSや、果てはWindows10まで用意されています。
まずは光らせる
Raspberry PiにはGPIOという端子が存在します。各端子の電圧のオンオフなどを実装していけます。 電圧を入れたり切ったりすればLEDがチカチカ光るって寸法です。
ピンには番号がついています。以下のサイトを参考にしてください。
また、後記のgpio
コマンドを利用するとターミナル上で一覧を出せます。
ここではGPIO2とGND(接地)を使っていきます。
なおモデルによってGPIOピンの配置は違うので注意して接続しましょう。
なおLEDの場合、GPIOピンにアノードを、GNDにカソードを接続します。間違えると光りません。
ここでおもむろに
ターミナルを開きましょう。Raspberry PiではLXTerminalが標準で搭載されています。
まずは、どのピンを使うか、Raspberry Piに教えてあげます。
ちなみにGPIOピンはroot権限でしか動きません。sudo su -
するか、コマンドの頭にsudo を付けてください。
今回はGPIO2を使うので
# echo 2 > /sys/class/gpio/export
としてやります。すると、/sys/class/gpio/
直下にgpio2
というディレクトリが生成されます。
ちなみにecho
というのは入力をそのまま出力するコマンドです。echo = やまびこ ですね。
あと>
はリダイレクトします、という意味で、出力結果を>
の後ろに書かれたファイルに書き込むという意味です。
さて、'gpio2'にはそのピンに関する情報が集められます。 このようなファイルが生成されます。
ative_low device direction edge subsystem uevent value
というわけで、
# cd /sys/class/gpio/gpio2
で移動して作業していきましょう。
次にこいつはLEDに対して出力(Output)を行うので、そのように設定しましょう。
# echo out > direction
とすると、出力ピンとして設定されます。
ではいよいよ
チカチカさせてみます。さっき移動したgpio2のディレクトリ内に
value
というファイルができています。こいつの値を書き換えるとオンオフ出来ます。
ではやってみましょう。gpio2のディレクトリ内で
$ echo 0 > value
0にするとLEDは消灯します
では値を変えてみましょう。
$ echo 1 > value
1で点灯します
ってな感じで、操作できます。
ところで
なんか雰囲気もクソも無くね
なので
実はC言語などでもGPIOピンは操作できます。Rubyでも可能です。Pythonでも。
もちろんシェル上で操作できるので、シェルスクリプトでもチカチカできます。
というわけで
C言語で雰囲気出していきますよ。
C言語でGPIOピンを操作するにはWiring Pi
というライブラリが必要になります。
$ git clone git://git.drogon.net/wiringPi $ cd ./wiringPi $ sudo ./build
で導入できます。
では書いていきましょう。wiringPi.hをincludeしてやってくださいね。 以下はすごく寂しいことになるコードです。
#include <wiringPi.h> #include <stdio.h> #define GPIO2 2 // ピン番号です。GPIO2を使うので2です。 #define ON 1 #define OFF 0 #define FLS 10 // フラッシュの回数 void Flash(int pin, int sw, int del); int main(void) { int i; if ( wiringPiSetup() == -1 ) { return 1; } pinMode(GPIO2, OUTPUT); while ( 1 ) { Flash(GPIO2, ON, 3000); Flash(GPIO2, OFF, 3000); Flash(GPIO2, ON, 3000); for ( i = 0; i < FLS; i++ ) { Flash(GPIO2, ON, 500); Flash(GPIO2, OFF, 500); puts("tikatika! SLOW"); } for ( i = 0; i < FLS; i++ ) { Flash(GPIO2, ON, 200); Flash(GPIO2, OFF, 200); puts("tikatika! FAST"); } } return 0; } void Flash(int pin, int sw, int del) { digitalWrite(pin, sw); delay(del); puts("Flash OK!"); return; }
ここで、ピンの番号がわからない時は
$ gpio readall
でピン番号一覧が出てきます。
かけたら、コンパイルして実行してみましょう。
$ sudo gcc hoge.c -lwiringPi
でコンパイルして、
$ sudo ./a.out
で実行です。
これで複数のLEDをつなげて、複数のGPIOピンで操作してやれば平穏なクリスマスをおくれそうです。
めでたしめでたし。
というわけで
画面以外の場所でものが動くのは案外楽しいです。 今回はLEDをチカチカさせただけですが、モータを付けて自走式RaspberryPiなんかも、全然夢ではないです。やってみたいですね。
最後に
クリスマスは1人でも寂しくない、そう寂しくないんだ。
Homebrewでupdateできなくなった話
MacOSをYosemiteからEl Capitanにアップグレードしたら、brew update
でエラーをはくようになった話です。
そもそもなぜ
MacOSX El Capitanから搭載されたrootless機能が原因のようです。
このrootless機能は/bin
直下など、システム的にクリティカルな場所にrootでもアクセスできなくなる模様です。
とは言え
Homebrew
が使えないとお話になりません。
一時的には解決できた
sudo chown -R hoge /usr/local
で権限を書き換えると、一時的には解決できました。
ただし、再起動などを掛けると権限がシステムによって書き換えられるので、対症療法的です。
根治解決は
見通しが立ってません(にっこり
おわび
記事ミスがありました、修正しました。すみません。
はじめまして
はじめまして。さるると申します。
四国で大学生をしています。
講義や勉強会の感想や備忘録と
ちょろちょろ日常を綴っていこうと思います。