2016年2月28日日曜日

trusty non-pae を使ってみた

Ubuntu 14.04 LTS text non-pae 'Trusty-npae124-text.iso'を使ってみた。

おいおいわかるのだが、これは普通のAlternate CDとはかなり違う(勉強していたのでわかる)。
使い方がわからないので、調べながら使う。
VAIO-C1でも起動できる。CDで起動すると、shellのプロンプトが出る。
Installerは、コマンドで起動する(かなり特殊だ)。ヘルプのようなものも付いているので、それを読んだ。

「ハードディスクを全部上書きしてしまう。パーティションテーブルも破壊される。治す手段はない。」のような事と、「install後にgpartedで切り直せ。」的なことが書いてあった。
うーん。どういう事だ?
installを行えば、HDDの内容が壊されるのは当たり前のことだ。それをわざわざ強調するのは、どういうことだ?
インストーラなら、途中でパーティションを編集することもできるものだろう。なぜ終了後に切り直しなんてさせるんだ?
この2つの疑問から、だいたい構造がわかった。
HDDのイメージをパーティションテーブルごとまとめてxz圧縮したもの"live/dd_Trusty-npae124-text.img.xz")を、展開しながらHDDに書きこむのだ。
パッケージもへったくれもない。

マイコンボードでLinuxをinstallするのに似ている。実はAlternateではない普通の最近のInstall CDもパッケージは入っていない。まとめられたデータをただコピーするのだ。
これは、間違いも少なく簡単で、Install時間が短くて済む。
しかし、VAIO-C1では、問題がある。BIOSが古すぎて、ブートコードは、HDDの先頭から80GB以下に置かなければならないのだ。
このVAIO-C1は、HDDを256GBのSSDに置き換えているので、余裕で80GB以上ある。
この場合、単一パーティションにできない。

このような場合、/bootのみを2GB程度の小さなパーティションにして先頭付近に配置し、残りのほとんどを/用のパーティションにするのがいい。
しかし、HDDイメージ内の一部のディレクトリを別パーテションへ分離することはできない。
80GBで/をつくって、170GBをデータ領域のようにしてもいいが、なんか使いにくい。

いろいろ考えたが、やばり/bootのみ小さな別パーティションにすることにした。
Installerを使ったら、そのような形ではInstallできないが、コマンドプロンプトが出るので、手動で作業すればいいだろう。
一旦作業を中止し、そのための用意を行う。
HDDイメージのままでは、/bootを分離できないので、CD内の"live/dd_Trusty-npae124-text.img.xz"を展開して、loopマウントする。
その中の内容をcpioで取り出して圧縮する(/dev下の特殊ファイルとかがあるので)。
もうddのイメージはいらないので、ファイルを置き換えて、Bootable CDを作りなおし、CDに焼く。

新たに作ったCDで起動する。
まず、fdiskを使って、パーティションを分ける。sda1を/boot用に2GB、sda2を/用に240GB(とりあえず)、sda3をswap用に2GBにする。
パーティションを分けたら、mkfs -t ext4で、sda1とsda2を、mkswapでsda3を初期化する。
それぞれのUUIDを記録しておく。

適当なディレクトリ(何でもいいがx/とする)を作って、そこにsda2をマウントする。x/bootを作ってそこにsda1をマウントする。
ディレクトリを重ねておいて、x/の下で、cpioでまとめ直したファイルを展開する。こうすることで、boot/以下がsda1に入る。
その後、一旦、x/を出て、mount -bind で、/devをx/devにマウントする。
chroot x/ を行い、x/をルートディレクトリとした環境にする。/proc, /sys, /dev/pts を適切にマウントする。

余計なユーザが最初からいるので、deluserしておいて、自分のアカウントをadduserする。
adduser後に、自分をsudo と rootグループに追加しておくこと。
さもなくばinstall後にsudoできなくなってしまう。

/etc/fstabをパーティション構成にあわせて編集する。
さっきメモしておいたUUIDをここで使うのだ。

最後にgrub-install /dev/sda を行って、grubをinstallする。 その後再起動すれば、立ち上がる。

起動後に、apt-get したら、169個の更新があった。カーネルも母艦でコンパイルして、入れなおした。
残念なことに、atyfbの設定をメモしないで、前の環境を削除してしまった。
もう何年も前なので、設定はすっかり忘れた。唯一覚えていることといえば、C1でatyfbを動かすのには、かなり苦労したということだ。
ドライバパッチが残っているのが救いだ。
設定を調べなおして、今度はしっかりメモをしておこう。

14.04は、grubがgrub2になっていた。
そのせいで、起動パラメータの与え方が少し違っており、それもまたatyfbへの設定をややこしくしている。
なんだかんだで、もう少し手がかかりそうだ。

2016年2月19日金曜日

VAIO C1 VRX/K の Linux kernel

数年前、何かを勘違いしたようで、新しいLinux kernel(3.13だったかな)では、PAEのON/OFF選択が無いと思っていた。
そのため、VAIO C1のKernelは、3.2系を使い続けていた。先日、何気なく3.13系のKernelのソースを取ってきて見ていたら、PAEの選択があるのに気がついた。
以前見たときは、疲れている深夜の短い時間に見たので見落としていたのだろう。また、Ubuntu12.04.5では、3.13 カーネルが使えるが、apt-getを使ったやり方でソースの入手がうまくできないので、あまり見ていなかったというのもある。さらにXubuntuやLubuntuでも対応していないので、あきらめていた。

しかし、よく考えてみたら、Linux自身はPCアーキテクチャ専用ではないので、Non-PAEも対象として残るだろう。

そうとなれば、試しに3.13 Kernelを、VAIO C1用にコンパイルしてみよう。
Ubuntuで使うので、UbuntuのKernelソースを入手する。

apt-getでは入手できないので、Ubuntu Packageのページから入手する。画面の右端の「ソースパッケージをダウンロード」と書かれた下にあるリンクから3つのファイルをダウンロードする。
以下に同じリンクを置く。
linux-lts-trusty_3.13.0-77.121~precise1.dsc
linux-lts-trusty_3.13.0.orig.tar.gz
linux-lts-trusty_3.13.0-77.121~precise1.diff.gz
これら3つのファイルを同じディレクトリにダウンロードして、ソースコードを展開する。以下参照。
mkdir linux-source
cd linux-source
wget http://archive.ubuntu.com/ubuntu/pool/main/l/linux-lts-trusty/linux-lts-trusty_3.13.0-77.121~precise1.dsc
wget http://archive.ubuntu.com/ubuntu/pool/main/l/linux-lts-trusty/linux-lts-trusty_3.13.0.orig.tar.gz
wget http://archive.ubuntu.com/ubuntu/pool/main/l/linux-lts-trusty/linux-lts-trusty_3.13.0-77.121~precise1.diff.
dpkg-source -x linux-lts-trusty_3.13.0-77.121~precise1.dsc
これで、サブディレクトリlinux-lts-trusty-3.13.0が作られ、ソースコードが展開される。
Linux 2.6.x や 3.x では、VAIO C1 VRX/Kのフレームバッファは、まともに動作しない。
動かすためには、この自家製パッチを当てる必要がある。
以下のように行う。
cd linux-lts-trusty-3.13.0
cat #ダウンロードしたパッチ# | patch -p1
make menuconfigで、Processor type and features 内の、"High Memory Support" と "Memory split" と "PAE (Physical Address Extension) Support"を以下のように書き換える。
私が使ったコンフィグは、ここからダウンロードできる。
これはProcessor familyにCrusoeを選択したり、いろいろいじっている。そのため、一般的なカーネルではない。
リスクがあるかもしれないので、注意せよ。使いたければ、ダウンロードして、.configを上書きせよ。

make menuconfig の後は、昔はmake depだったけど、今はやる必要はない。
以下のようにすることで、linux-imageとlinux-headersのバイナリパッケージが出来上がる。
CONCURRENCY_LEVEL=4 make-kpkg --rootcmd fakeroot --initrd --revision=$(date +"%Y%m%d") kernel_image kernel_headers
上記は4コアシステムでのコンパイルを想定している。
この前、購入したhpのPCでコンパイルしたら、2時間以下で終わった。

1つ上のディレクトリに、バイナリパッケージができているので、それをVAIOにコピーして、インストールする。
これでLinux 3.13.xがVAIOでも動作するようになる。

最新カーネルがVAIO C1 VRX/Kで動くとなれば、まだまだ現役として使える。最新Lubuntuをインストールしたくなる。
しかし、最新のLubuntuのInstallerは、Non-PAEを受け入れない。そのためInstallできない。

カーネルは用意できるのだから、なんとかならないかとAlternate Install CDの事を調べ始めた(VAIO C1 VRX/Kは、メモリが少なすぎるので通常のDesktop Install CDは使えない)。
AlternateCDをカスタマイズして、Non-PAEにインストールできるものを自力で作ろうと、 Alternate CD のカスタマイズに関するページを、先月末からちょびちょび読んでいた。

全部読み終わって、関連する技術の詳細を調べようと、いろいろ探していたら、なんとすでに作られていた。
Lubuntu fake-PAE の下の方、Ubuntu 14.04 LTS text non-pae 'Trusty-npae124-text.iso' に、それが書いてある。
まだ見てないので、動くかどうかはわからないが、これを使ってみよう。

無駄に勉強しちゃったけど、どこかで何かの役に立つだろう。


2017/12/10追記 <<<<注意>>>>: FrameBuffer設定も必要だ。後から書いたこれを参照せよ。 私のVAIO C1-VRX/Kはもうダメなので、放置していたが、最近になって、このページを見ている人が増えてきているので、注意書きを書いた。