あるいは、Nexus7上にDebian環境を構築するときのメモ。
だれかおしえてください。
- キーボードの配列変更(Dvorak配列 + Ctrl-CapsLock入れ替え)
- 画面幅が80文字に固定される
- スワップを有効にしたほうがいい?
- ちょうどいいサイズのカバン(シザーバッグ?)
Nexus7とケース一体型のキーボードを買ったら、Nexus7(2013モデル)とケース(Nexus7 2012用)が届きました。注意しましょう。
Ubuntu touchをインストールしようとしたら、うまく動きませんでした。
よく読んだら
Note: We currently do not support the newer '2013' Nexus 7. -
(訳: 新しいNexus7(2013)はまだサポートしてません。)
と書いてありませんでした。
Ubuntuはあきらめて、Debianを入れることにしました。手順は技評の第256回 新春特別企画・Android上でUbuntu…ではなくDebianを使うを参考にしました。
ざっくり言うと
- Bootloaderのアンロック & Root化(参考: 簡単にできる nexus7 2013 日本版のroot化手順について )
- Android Terminal Emulatorのインストール
- debian-kitの実行(イメージサイズ:2GB、Debian squeeze)
deb
の実行adduser mzp
したのち、mzpを/etc/sudoers
に追加apt-get update; apt-get upgrade; apt-get install andromize
このときDebian squeezeをいれてしまったけど、wheezyにしとくべきだった。
sequeezeをいれてしまったので、/etc/apt/source.list.d/sources.listをwheezy用に書き換えた。
souces.listは Debian Sources List Generatorで生成しました。
Debian kitでいれたままだとドイツのミラーサイトを使うので、いずれにせよ作り直したほうがいいかも。
ついでにDebian Backportsもいれた。
同じみのコマンドをたたいて、しばらくほっておきました。
# aptitude update
# aptitude upgrade
# aptitude full-upgrade
Dropboxで管理している設定ファイル群が欲しかったので、(Drop Sync)[https://play.google.com/store/apps/details?id=com.ttxapps.dropsync&hl=ja]を入れました。
このときは、Debian側からSDカード内のファイルを見る方法がわからなかったので、
- Dropboxの中身をSDカードに同期
- ホームディレクトリにコピー
というまわりくどい手を使いました。
たぶん
# mount --rbind /mnt/sdcard/Dropbox /home/mzp/Dropbox
でできるし、そっちのほうがよさそう。
よくわからない連番のホスト名がイヤになったので、変更しました。
$ sudo echo "nexus7" > /etc/hostname && hostname $(cat /etc/hostname)
ついでにsudoするたびに「ホスト名が解決できなかった」という警告がでるのがイヤだったので、 /etc/hosts
に追記しました。
127.0.0.1 nexus7
せっかくのNexusだし、ホスト名をレプリカントにしようかなー、とか考えてたんですが、アルファベットにしたら長くてつらかったのでやめました。
aptitude
がうごくので普段使ってるソフトウェアをインストールした。
- zsh
- tmux
- vim-full
- git
- haskell-platform
特にエラーもでず普通に動いてる。 screen
がうまく起動しないけど、普段は tmux
を使ってるので深追いはしていない。
Debianだと幅が80文字で固定なので、なんとかします。
- Android Terminal Emulatorの設定を変更して"ターミナルタイプ"をlinuxにする(別になんでもいい)
ルートになって、terminfoの該当エントリをいじります。
# infocmp linux > linux.ti
# vi linux.ti (適当な場所に `cols#100` を挟む)
# tic linux.ti
でもtmux上だとこれが使えないので、まだ解決してないです。
せいぜい2GBしか使えないので、だんだんと容量が足りなくなってきます。 とりあえず ~/.cabal
があふれてきたので、これを別のデバイスに逃がします。
まず、SDカード上にイメージを作ります。(今回は500MB)
# cd /mnt/sdcard
# dd if=/dev/zero of=cabal.img bs=500M count=1 seek=2048
ループバックデバイスとして登録します。 空いているループバックデバイスの番号はlosetup -Fでわかります。
# losetup /dev/loop1 /mnt/sdcard/cabal.img
フォーマットします。 理由はわからないですが、ext4でないとマウントできません。
# mkfs -t ext4 /dev/loop1
マウントします。
# mkdir /home/mzp/cabal
# mount -t ext4 /dev/loop1 /home/mzp/cabal
あとは ~/.cabal
をシンボリックリンクに置き換えます。
$ sudo mkdir /home/mzp/cabal/cabal
$ sudo chown mzp:mzp /home/mzp/cabal/cabal
$ ln -s ~/cabal/cabal ~/.cabal
参考: 技術的雑談-Linuxでのディスクイメージファイルのマウント
Cabal 1.18.0.2をいれようとしたら、エラーがでてしまいました。
$ cabal install cabal-install
(snip)
Linking dist/build/cabal/cabal ...
/usr/lib/ghc/libHSrts.a(OSThreads.o): In function `getNumberOfProcessors':
(.text+0x8): multiple definition of `getNumberOfProcessors'
dist/build/cabal/cabal-tmp/cbits/getnumcores.o:getnumcores.c:(.text+0x0): first defined here
collect2: ld returned 1 exit status
World file is already up to date.
cabal: Error: some packages failed to install:
cabal-install-1.18.0.2 failed during the building phase. The exception was:
ExitFailure 1
マクロの定義がまちがってるっぽかったので、cabal-install.cabalにパッチあてて、手動でインストールしました。
--- cabal-install.cabal.old 2013-10-02 03:50:10.000000000 +0000
+++ cabal-install.cabal 2013-10-27 08:22:47.259204164 +0000
@@ -144,7 +144,7 @@
if arch(arm) && impl(ghc < 7.6)
-- older ghc on arm does not supprt -threaded
- cc-options: -DCABAL_NO_THREADED
+ cc-options: -DCABAL_NO_THREADED -DHAS_GET_NUMBER_OF_PROCESSORS
else
ghc-options: -threaded