Create a gist now

Instantly share code, notes, and snippets.

@mzp /nexus7.md
Last active Dec 26, 2015

What would you like to do?

Nexus7買いました

あるいは、Nexus7上にDebian環境を構築するときのメモ。

TODO

だれかおしえてください。

  • キーボードの配列変更(Dvorak配列 + Ctrl-CapsLock入れ替え)
  • 画面幅が80文字に固定される
  • スワップを有効にしたほうがいい?
  • ちょうどいいサイズのカバン(シザーバッグ?)

購入

Nexus7とケース一体型のキーボードを買ったら、Nexus7(2013モデル)とケース(Nexus7 2012用)が届きました。注意しましょう。

Ubuntu touch導入(失敗)

Ubuntu touchをインストールしようとしたら、うまく動きませんでした。

よく読んだら

Note: We currently do not support the newer '2013' Nexus 7. -

(訳: 新しいNexus7(2013)はまだサポートしてません。)

と書いてありませんでした。

Debian kitの導入

Ubuntuはあきらめて、Debianを入れることにしました。手順は技評の第256回 新春特別企画・Android上でUbuntu…ではなくDebianを使うを参考にしました。

ざっくり言うと

  1. Bootloaderのアンロック & Root化(参考: 簡単にできる nexus7 2013 日本版のroot化手順について )
  2. Android Terminal Emulatorのインストール
  3. debian-kitの実行(イメージサイズ:2GB、Debian squeeze)
  4. deb の実行
  5. adduser mzp したのち、mzpを /etc/sudoers に追加
  6. apt-get update; apt-get upgrade; apt-get install andromize

このときDebian squeezeをいれてしまったけど、wheezyにしとくべきだった。

Wheezy化

sequeezeをいれてしまったので、/etc/apt/source.list.d/sources.listをwheezy用に書き換えた。

sources.listの更新

souces.listは Debian Sources List Generatorで生成しました。

Debian kitでいれたままだとドイツのミラーサイトを使うので、いずれにせよ作り直したほうがいいかも。

ついでにDebian Backportsもいれた。

アップグレード

同じみのコマンドをたたいて、しばらくほっておきました。

# aptitude update
# aptitude upgrade
# aptitude full-upgrade

Dropbox

Dropboxで管理している設定ファイル群が欲しかったので、(Drop Sync)[https://play.google.com/store/apps/details?id=com.ttxapps.dropsync&hl=ja]を入れました。

このときは、Debian側からSDカード内のファイルを見る方法がわからなかったので、

  1. Dropboxの中身をSDカードに同期
  2. ホームディレクトリにコピー

というまわりくどい手を使いました。

たぶん

# 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文字で固定なので、なんとかします。

  1. 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でのディスクイメージファイルのマウント

Haskell環境の構築

Cabal

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment