久しぶりに Raspberry PI さわってみた
以前(過去の記事)購入した Raspberry PI ですが、忙しかったことと他にやりたかったこともあり、長らく放置していました。で、先日(1/5(日))日本橋にぶらっと寄った時に、ケースとか小型ヒートシンクとかが某店に売っていたのを見つけついつい購入してしまい、久しぶりに自宅サーバに仕込んでやろう、と思い立った次第です。
OS のインストール等
Raspbian を選択しました。Debian 好きだし。FreeBSD はまだ安定していないとかちらほら聞いたことがあるので今回はパス(安定したら FreeBSD に置き換えるかもしれません)。
ダウンロードページ(ここ)から Raspbian をダウンロード、と思ったら思いの外回線速度が遅く、torrent 経由で get。Mac に SD カードをつないで、
bash$ sudo diskutil umount /dev/disk1s1
などしてから
bash$ sudo time dd bs=1m if=2013-12-20-wheezy-raspbian.img of=/dev/rdisk1
で書き込みました。作業した日が 2014/01/05(日) だったので 2013-12-20 はかなり新しくていい感じです。Debian なのでインストールされているパッケージ等はそれなりの古さだと思っていましたが、
bash$ uname -a Linux fubuki 3.10.24+ #614 PREEMPT Thu Dec 19 20:38:42 GMT 2013 armv6l GNU/Linux bash$ java -version java version "1.7.0_40" Java(TM) SE Runtime Environment (build 1.7.0_40-b43) Java HotSpot(TM) Client VM (build 24.0-b56, mixed mode) bash$
といった具合です。hostname は fubuki にしました(暁の水平線に勝利をきざむあのゲーム を参考にしました。すのでな。)。
起動とか
初回起動時は、raspi-config
が勝手に立ち上がってるのね...。リモートで ssh経由でログインして ps して初めて気がつきました。一旦シャットダウンして、リビングの TV にHDMI 経由でつないでコンソールを見てみます。あまり込み入った設定はせずに(なにか設定したとは思うのだけどメモってないので忘れました)、リブート等何度かしてみて安定していることを念のため確認しました。その後、crontab で、heroku に仕込んである自分の Web アプリを定期的に叩く仕掛けを仕込んで1/5(日)の作業は終了。
timezone 設定
すっかり忘れていました、timezone 設定。date
コマンド叩いたら時刻ずれてました...。
bash$ sudo dpkg-reconfigure tzdata # ... (ごにょごにょ) Current default time zone: 'Asia/Tokyo' Local time is now: Mon Jan 6 21:51:04 JST 2014. Universal Time is now: Mon Jan 6 12:51:04 UTC 2014. bash$ date 2014年 1月 6日 月曜日 21:51:10 JST bash$
このコマンド、毎回忘れて毎回ググる...。良い時代になったものです。
いろいろ入れてみる(PostGIS 編)
マシンスペック的にまともに動くとは思ってませんが、ちょっと興味があったのでトライしてみました。といっても、この日(1/6)は入れてサービスが起動しただけで、データベースには何も仕込んでません。
bash$ sudo apt-get install postgresql-9.1-postgis パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 以下の特別パッケージがインストールされます: libgeos-3.3.3 libgeos-c1 libpq5 libproj0 lsb-release postgis postgresql-9.1 postgresql-client-9.1 postgresql-client-common postgresql-common proj-data ssl-cert 提案パッケージ: proj-bin lsb oidentd ident-server locales-all postgresql-doc-9.1 openssl-blacklist 以下のパッケージが新たにインストールされます: libgeos-3.3.3 libgeos-c1 libpq5 libproj0 lsb-release postgis postgresql-9.1 postgresql-9.1-postgis postgresql-client-9.1 postgresql-client-common postgresql-common proj-data ssl-cert アップグレード: 0 個、新規インストール: 13 個、削除: 0 個、保留: 0 個。 10.5 MB のアーカイブを取得する必要があります。 この操作後に追加で 36.4 MB のディスク容量が消費されます。 続行しますか [Y/n]? y 取得:1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main libgeos-3.3.3 armhf 3.3.3-1.1 [576 kB] 取得:2 http://mirrordirector.raspbian.org/raspbian/ wheezy/main libgeos-c1 armhf 3.3.3-1.1 [165 kB] 取得:3 http://mirrordirector.raspbian.org/raspbian/ wheezy/main libpq5 armhf 9.1.11-0wheezy1 [520 kB] 取得:4 http://mirrordirector.raspbian.org/raspbian/ wheezy/main lsb-release all 4.1+Debian8+rpi1 [27.1 kB] 取得:5 http://mirrordirector.raspbian.org/raspbian/ wheezy/main postgis armhf 1.5.3-2+b1 [573 kB] 取得:6 http://mirrordirector.raspbian.org/raspbian/ wheezy/main postgresql-client-common all 134wheezy4 [63.3 kB] 取得:7 http://mirrordirector.raspbian.org/raspbian/ wheezy/main postgresql-client-9.1 armhf 9.1.11-0wheezy1 [1,337 kB] 取得:8 http://mirrordirector.raspbian.org/raspbian/ wheezy/main ssl-cert all 1.0.32 [19.5 kB] 取得:9 http://mirrordirector.raspbian.org/raspbian/ wheezy/main postgresql-common all 134wheezy4 [138 kB] 取得:10 http://mirrordirector.raspbian.org/raspbian/ wheezy/main postgresql-9.1 armhf 9.1.11-0wheezy1 [3,339 kB] 取得:11 http://mirrordirector.raspbian.org/raspbian/ wheezy/main proj-data armhf 4.7.0-2 [2,940 kB] 取得:12 http://mirrordirector.raspbian.org/raspbian/ wheezy/main libproj0 armhf 4.7.0-2 [114 kB] 取得:13 http://mirrordirector.raspbian.org/raspbian/ wheezy/main postgresql-9.1-postgis armhf 1.5.3-2+b1 [665 kB] 10.5 MB を 12秒 で取得しました (842 kB/s) パッケージを事前設定しています ... 以前に未選択のパッケージ libgeos-3.3.3 を選択しています。 (データベースを読み込んでいます ... 現在 71054 個のファイルとディレクトリがインストールされています。) (.../libgeos-3.3.3_3.3.3-1.1_armhf.deb から) libgeos-3.3.3 を展開しています... 以前に未選択のパッケージ libgeos-c1 を選択しています。 (.../libgeos-c1_3.3.3-1.1_armhf.deb から) libgeos-c1 を展開しています... 以前に未選択のパッケージ libpq5 を選択しています。 (.../libpq5_9.1.11-0wheezy1_armhf.deb から) libpq5 を展開しています... 以前に未選択のパッケージ lsb-release を選択しています。 (.../lsb-release_4.1+Debian8+rpi1_all.deb から) lsb-release を展開しています... 以前に未選択のパッケージ postgis を選択しています。 (.../postgis_1.5.3-2+b1_armhf.deb から) postgis を展開しています... 以前に未選択のパッケージ postgresql-client-common を選択しています。 (.../postgresql-client-common_134wheezy4_all.deb から) postgresql-client-common を展開しています... 以前に未選択のパッケージ postgresql-client-9.1 を選択しています。 (.../postgresql-client-9.1_9.1.11-0wheezy1_armhf.deb から) postgresql-client-9.1 を展開しています... 以前に未選択のパッケージ ssl-cert を選択しています。 (.../ssl-cert_1.0.32_all.deb から) ssl-cert を展開しています... 以前に未選択のパッケージ postgresql-common を選択しています。 (.../postgresql-common_134wheezy4_all.deb から) postgresql-common を展開しています... 'postgresql-common による /usr/bin/pg_config から /usr/bin/pg_config.libpq-dev への退避 (divert)' を追加しています 以前に未選択のパッケージ postgresql-9.1 を選択しています。 (.../postgresql-9.1_9.1.11-0wheezy1_armhf.deb から) postgresql-9.1 を展開しています... 以前に未選択のパッケージ proj-data を選択しています。 (.../proj-data_4.7.0-2_armhf.deb から) proj-data を展開しています... 以前に未選択のパッケージ libproj0 を選択しています。 (.../libproj0_4.7.0-2_armhf.deb から) libproj0 を展開しています... 以前に未選択のパッケージ postgresql-9.1-postgis を選択しています。 (.../postgresql-9.1-postgis_1.5.3-2+b1_armhf.deb から) postgresql-9.1-postgis を展開しています... man-db のトリガを処理しています ... libgeos-3.3.3 (3.3.3-1.1) を設定しています ... libgeos-c1 (3.3.3-1.1) を設定しています ... libpq5 (9.1.11-0wheezy1) を設定しています ... lsb-release (4.1+Debian8+rpi1) を設定しています ... postgis (1.5.3-2+b1) を設定しています ... postgresql-client-common (134wheezy4) を設定しています ... postgresql-client-9.1 (9.1.11-0wheezy1) を設定しています ... update-alternatives: /usr/share/man/man1/psql.1.gz (psql.1.gz) を提供するために 自動モード で /usr/share/postgresql/9.1/man/man1/psql.1.gz を使います ssl-cert (1.0.32) を設定しています ... postgresql-common (134wheezy4) を設定しています ... ユーザ postgres をグループ ssl-cert に追加 Building PostgreSQL dictionaries from installed myspell/hunspell packages... insserv: warning: script 'mathkernel' missing LSB tags and overrides postgresql-9.1 (9.1.11-0wheezy1) を設定しています ... Creating new cluster (configuration: /etc/postgresql/9.1/main, data: /var/lib/postgresql/9.1/main)... Moving configuration file /var/lib/postgresql/9.1/main/postgresql.conf to /etc/postgresql/9.1/main... Moving configuration file /var/lib/postgresql/9.1/main/pg_hba.conf to /etc/postgresql/9.1/main... Moving configuration file /var/lib/postgresql/9.1/main/pg_ident.conf to /etc/postgresql/9.1/main... Configuring postgresql.conf to use port 5432... update-alternatives: /usr/share/man/man1/postmaster.1.gz (postmaster.1.gz) を提供するために 自動モード で /usr/share/postgresql/9.1/man/man1/postmaster.1.gz を使います [ ok ] Starting PostgreSQL 9.1 database server: main. proj-data (4.7.0-2) を設定しています ... libproj0 (4.7.0-2) を設定しています ... postgresql-9.1-postgis (1.5.3-2+b1) を設定しています ... bash$
Debian 使うと自分がどんどんアホになりますね。時間はそれなりにかかりましたが、仕込むだけなら楽すぎです。
いろいろ入れてみる(Clojure 編)
Clojure については、Leiningen が無いと話にならないので、apt-get ではなく lein
コマンドからインストール(というか勝手にインストールされます)。これが簡単なようで、時間がかかってイライラしてしまった...。どうせ時間がかかるだろうなぁ、と思っていたので、time コマンドで時間計測。
bash$ time ./lein help Downloading Leiningen to /home/pi/.lein/self-installs/leiningen-2.3.4-standalone.jar now... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 13.0M 100 13.0M 0 0 399k 0 0:00:33 0:00:33 --:--:-- 422k Retrieving org/clojure/tools.nrepl/0.2.3/tools.nrepl-0.2.3.pom from central Retrieving org/clojure/pom.contrib/0.1.2/pom.contrib-0.1.2.pom from central Retrieving org/sonatype/oss/oss-parent/7/oss-parent-7.pom from central Retrieving clojure-complete/clojure-complete/0.2.3/clojure-complete-0.2.3.pom from clojars Retrieving org/clojure/tools.nrepl/0.2.3/tools.nrepl-0.2.3.jar from central Retrieving clojure-complete/clojure-complete/0.2.3/clojure-complete-0.2.3.jar from clojars Leiningen is a tool for working with Clojure projects. Several tasks are available: check Check syntax and warn on reflection. classpath Write the classpath of the current project to output-file. clean Remove all files from paths in project's clean-targets. compile Compile Clojure source into .class files. deploy Deploy jar and pom to remote repository. deps Show details about dependencies. do Higher-order task to perform other tasks in succession. help Display a list of tasks or help for a given task or subtask. install Install current project to the local repository. jar Package up all the project's files into a jar file. javac Compile Java source files. new Generate scaffolding for a new project based on a template. plugin DEPRECATED. Please use the :user profile instead. pom Write a pom.xml file to disk for Maven interoperability. repl Start a repl session either with the current project or standalone. retest Run only the test namespaces which failed last time around. run Run the project's -main function. search Search remote maven repositories for matching jars. show-profiles List all available profiles or display one if given an argument. test Run the project's tests. trampoline Run a task without nesting the project's JVM inside Leiningen's. uberjar Package up the project files and all dependencies into a jar file. update-in Perform arbitrary transformations on your project map. upgrade Upgrade Leiningen to specified version or latest stable. version Print version for Leiningen and the current JVM. with-profile Apply the given task with the profile(s) specified. Run `lein help $TASK` for details. Global Options: -o Run a task offline. -U Run a task after forcing update of snapshots. -h, --help Print this help. -v, --version Print Leiningen's version. See also: readme, faq, tutorial, news, sample, profiles, deploying, gpg, mixed-source, templates, and copying. real 3m11.842s user 2m21.790s sys 0m4.190s bash$
ダウンロードして help 見るだけ、で3分。ちなみに、おそらくメモリのキャッシュも効いているだろうと思われる2回目の ./lein help
は、
bash$ time ./lein help Leiningen is a tool for working with Clojure projects. -- snip -- real 2m26.445s user 2m20.650s sys 0m2.180s bash$
2分半...まあ良いでしょう。本格的に開発に使うわけじゃなし。ちなみに、lein help
は遅いのですが、lein new <project>
はまだましでした。
bash$ time ~/bin/lein new hello Generating a project called hello based on the 'default' template. To see other templates (app, lein plugin, etc), try `lein help new`. real 0m37.365s user 0m36.000s sys 0m1.100s bash$
いろいろ入れてみる(Emacs 編)
さて、ここからがめんどくさかったです(時間的に)。apt-get で入る奴は Emacs-23 っぽかったのですが、常用している Emacs のバージョンが 24.3 で、Emacs-23 では動かない elisp もちらほらあるようだったので、思い切ってソースからビルドしてインストールすることにしました。
手順はほぼここ(Compile Emacs 24.2 on Raspberry Pi (Rasbian) )にある通りでした(感謝!!)。バージョンこそ違いますが、インストール手順としては完璧でした。ざっくりまとめると、
bash$ sudo apt-get install texinfo libncurses5-dev bash$ mkdir src bash$ cd ./src bash$ wget http://ftp.gnu.org/pub/gnu/emacs/emacs-24.3.tar.xz bash$ tar -xJvf emacs-24.3.tar.xz bash$ cd ./emacs-24.3 bash$ time ./configure --prefix=/opt/emacs --without-x # -- snip -- real 7m49.623s user 2m42.200s sys 0m32.040s bash$ time make # -- snip -- real 51m49.290s user 41m39.060s sys 1m22.130s bash$ time sudo make install real 9m25.840s user 3m44.570s sys 1m3.480s bash$
こんな感じでした。すでに日付が変わってしまっていた(つまり深夜)だったので、その間テレビを見ながら待ちぼうけ。ここ数年 Emacs のビルドなんて大した手間じゃない、という認識だったのですが、完全に間違ってました。単にハード(PC)が速くなっただけ、ということです。Emacsは巨大 でした。
この後、自分の elisp なり package なりを入れていきます。自分が使うelisp の package のダウンロード、インストールは自動化しているのですが、この処理がこれまた非常に遅い。さすがに待ちきれず、そのまま放置して寝ました(朝にはちゃんと終わってました)。
いったんまとめ
そもそも環境全体が SD カード上に載っているので(激しい書き込みに弱い)、Emacs をコンパイルしてインストールするとか、PostGIS 入れてしまうとか、いろいろ間違ってます。ですが、ちょっとずつ自分の環境になっていくというのは嬉しいものですし、やってみて初めて気がつくようなこともあるかと。
ちなみに、自宅のルータを dyndns.org に登録して、外部から SSH でログインできるようにしました(ポートはもちろん変えてますが)。電車の中で iPhone からログインしてみたりして遊んでます。