https://naba-san.hatenablog.com/


Bay-Trail M Atomの中華PCにUbuntu 16.04(.2)をインストールしました

使い慣れるのでCentOS入れたかったんですが、そのままではKernelがemmc諸々に対応してくれないとの事なので断念。

Ubuntu LTSを下地に、DockerなりKVMなり(動くのか?)何なり使えばいいかと割り切りつつ、Ubuntu Server入れてみました。

方針

メンテナンスが必要なものは増やしたくない*1

  • インストール後の環境へバイナリを差し込まない。
  • 同様に、カーネルビルドは極力避ける。

準備したもの

現物
  • 中華PC

Bay-Trail M なAtomを搭載した3735Fマシン。所謂32bit EFI

まだ円安だった頃に、1万円くらいで買ったやつ。今回、ジャンク箱の奥底から発掘してきました。

FAT32でフォーマットしておく。

インストーラの準備
  • Ubuntu 16.04.2 LTS (Xenial Xerus)

公式 または ftp.riken.jp から、「64-bit PC (AMD64) server install image」(ubuntu-16.04.2-server-amd64.iso)
ISOの中身を展開し、そのままUSBメモリにコピーする。

  • USB起動に使う、EFI GRUBイメージ

bootia32.efi (jfwells - github)
保存した bootia32.efi を、USBメモリの /BOOT/EFI/ へ配置する。

これでインストーラUSBメモリの準備はOK。

インストール手順

インストーラ起動からインストール完了まで

SecureBootを切った状態でUSBメモリ起動。

幾つかの問題点を避けつつ、一通りインストール。

一通りインストールが終わった時、GRUBの設定でコケました。この時点ではIA32 EFIに対応しないようです。

GRUBの手動設定か何かを選び、ガイドインストーラを抜け、インストールの完了操作を行いました。
(LVMルートを示すデバイスパスが表示されるので、予め控えておきます。)

USBメモリから対象環境起動

再度インストーラを入れたUSBを起動し、インストール済みの環境を立ち上げます。

  • GRUBの起動メニューで「c」キーを押下
  • コマンドを叩いて環境起動

ls (hd1,gpt2)
linux (hd1,gpt2)/vmlinuz-4.4.0-62-generic root=【控えておいたデバイスパス(「/dev/mapper/」で始まるやつ)】
initrd (hd1,gpt2)/initrd.img-4.4.0-62-generic
boot

※ hd1, gpt2は、LVMとは別に切られたbootパスを指定するように、適宜に読み替えて下さい。
※ デバイスパーティション「(hd1,gpt2)」等を指定した後は、tab補完が効きます。

これでインストール済みの環境が起動しました。

(番外編)ネットワーク接続(NIC)の追加、設定

今回の中華PCは、小型PCなので有線NICを搭載しておらず、インストール完了後にUSB NICを追加しました。

少し手間取りましたが、以下の手順でNICを確認し、認識させました。

  • まずはインタフェース名を確認

# lshw -C network

  *-network
       description: Ethernet interface
       physical id: 1
       bus info: usb@1:2.4
       logical name: enx0090******** (控えておく)
       serial: 00:90:**:**:**:**
       size: 1Gbit/s
       capacity: 1Gbit/s
       capabilities: ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd 1000bt 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=ax88179_178a duplex=full ip=**.***.*.*** link=yes multicast=yes port=MII speed=1Gbit/s
  • 続けて設定追加

# vim /etc/network/interfaces

auto enx0090********
iface enx0090******** inet dhcp

# ifdown enx0090********
# ifup enx0090********

  • 無事疎通

# ping 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=47 time=37.7 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=47 time=37.7 ms

これで apt-get できるようになりました!

EFI環境へのGRUBインストール
  • IA32 EFI GRUBはaptで入手できました。

# apt-get install grub-efi-ia32

# grub-install --efi-directory=/boot/efi

Installing for i386-efi platform.
Installation finished. No error reported.

※ 他のイメージを間違えて削除しないように注意。

  • GRUBの設定は、修正が必要でしたので、下記の通り書き換えます。

# vim /etc/default/grub

#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX_DEFAULT=""

※ splash オプションが邪魔でした。quiet は、あってもなくても良さそうです。
※ nomodeset の設定が必要というページを散見しましたが、これも設定有無にかかわらず起動しました。

  • GRUB の設定内容を反映します。

# update-grub

Generating grub configuration file ...
Warning: Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.
Found linux image: /boot/vmlinuz-4.4.0-62-generic
Found initrd image: /boot/initrd.img-4.4.0-62-generic
Adding boot menu entry for EFI firmware configuration
done
  • (蛇足)EFIの設定状況確認

# efibootmgr

BootCurrent: 0000
Timeout: 5 seconds
BootOrder: 0000,0003,0001,0002,0004
Boot0000* ubuntu
Boot0001* UEFI:CD/DVD Drive
Boot0002* UEFI:Removable Device
Boot0003  UEFI: Built-in EFI Shell
Boot0004* UEFI:Network Device
  • 再起動して動作を確認

# shutdown -r now

EFI上で、起動順が正しく設定されているか確認する。

一通りの作業を終えて、とりあえず起動するようになりました。

*1:NonPAEの時、後々の運用が面倒だったので

*2:たぶんmmcのブロックに異常があって、LVMだからすんなり進んだ?