Raspberry Pi2B,3BがARMv7ベースになったので,ubuntuを動作させられるようだ。
Raspberry PiのUbuntuはオフィシャルからはリリースされていないが、アンオフィシャルなものは出ているので、Pi3Bにインストールしてみた。
https://wiki.ubuntu.com/ARM/RaspberryPi でリリースされている。
ubuntuは16.04だが,GUIが入っていないserverになる。→ 18.04になっている。
以下は,16.04をインストールしたときのメモ。
Raspberry Pi2: ubuntu-16.04.3-preinstalled-server-armhf+raspi2.img.xz
Raspberry Pi3: ubuntu-16.04-preinstalled-server-armhf+raspi3.img.xz
通常のRaspberry Pi用OSのイメージをMicroSDカードに書き込むのは,Raspbianのときと同じ。~
Windowsマシンで,.xzファイルのままなら Etcher 使用して,解凍した.imgファイルなら Win32DiskImager を使用して,容量が8GB以上のMicro SDカードに書きこむ。
このとき,使用するMicroSDカードの相性に注意する。
64GB,128GBなどの大きな容量のMicroSDカードを使用する場合には, Etcher で書き込む必要がある。 Win32DiskImager で書き込んだ場合は,ブート出来ない。
これは,64GB,128GBのMicroSDカードは大抵exFATでフォーマットされて販売されている。Raspberry Piでは,最初のパーテーションがFAT/FAT32でないとブートローダーがロードできないので,結果,ブート出来ないのが理由。
MicroSDカードをFAT32でフォーマットし直せば使えるのではあるが, SD card Formatter 5.0 では64GB以上だとFAT32でフォーマット出来なくなってしまっている。
なので,古いBuffaloのDiskFormatter2なんかを使ってフォーマット(論理サイズ調整をONにして)すれば,FAT32でフォーマット出来ます。
あとは,通常通りイメージファイルを書き込めば,64GB,128GBのMicroSDカードでも使用出来る。
無線LANは最初からは使えないようなので有線LANを使う。
MicroSDカードをPi3に挿して,有線LANを既存のNetwork(DHCP環境)に接続する。
ubuntuは,デフォルトでSSHログイン出来るようになっているようだ。
Pi3の電源をOnしてしばらくたったら,別のWindowsマシン等からPuTTYなどのSSHクライアントを使ってログインする。
この時,接続したネットワークのDHCPサーバーにより,Raspberry Piの有線LAN(Ethernet)コネクタにアサインされたIP Addressを知らないと接続できない。IP Addressではなく,ubuntu@ubuntu.localを使用してもリモートログイン出来る。
IP Addressを知る場合は,
for /l %i in (0,1,255) do ping -w 1 -n 1 192.168.1.%i
arp -a | find "b8-27"
# arp-scan -l --interface eth0
ログインする時の初期アカウントは,
ユーザー名:ubuntu パスワード:ubuntu
になっている。
上記でログインすると,パスワードを変更するように促される。好きなパスワードに変更する。
もう一度ログインし直す。
rootのパスワードを変更する。
$ sudo passwd root
Raspberry Pi用の配布されているubuntu 16.04LTSはシステムのブートにU-Bootを使用している。しかし,そのままではPi3でブート出来なくなるので,その対策をする。
/usr/share/flash-kernel/bootscript/bootscr.rpi3を修正する。
setenv fdt_addr_r 0x02008000 fatload mmc 0:1 ${fdt_addr_r} bcm2710-rpi-3-b.dtb fdt addr ${fdt_addr_r} fdt get value bootargs /chosen bootargs setenv kernel_addr_r 0x01000000 setenv ramdisk_addr_r 0x02100000 fatload mmc 0:1 ${kernel_addr_r} vmlinuz fatload mmc 0:1 ${ramdisk_addr_r} initrd.img setenv initrdsize $filesize bootz ${kernel_addr_r} ${ramdisk_addr_r}:${initrdsize} ${fdt_addr_r}
次にブート関連ファイルの更新を行う
# update-initramfs -u -k all
/boot/firmware/config.txt を修正する。
... kernel=uboot.bin # enable uart (needed for u-boot on RPi3) enable_uart=1 # set extended DT area # device_tree_address=0x100 # device_tree_end=0x8000 device_tree_address=0x02008000 device_tree_end=0x200ff00 # enable i2c dtparam=i2c_arm=on dtparam=spi=on ...
デフォルトのpackageリポジトリは古いため既に無効になっている。
http://ports.ubuntu.com ↓ http://jp.archive.ubuntu.com
に全て変更する。
# add-apt-repository ppa:ubuntu-raspi2/ppa
として,PPAリポジトリ(Raspberry Pi用の追加package)を追加する。
オプションPPAの内容
インストールされているubuntuのpackage(PPAも含む)を更新する。
# apt-get update # apt-get upgrade # apt-get dist-upgrade
この時,upgrade途中で書き込みエラーとかで失敗する場合は,MicroSDカードの相性や寿命が考えられる。
日本語ロケールとタイムゾーンの設定を行う。
# locale-gen ja_JP.UTF-8 # echo "LANG=ja_JP.UTF-8" | tee /etc/default/locale # dpkg-reconfigure -f noninteractive locales # timedatectl set-timezone Asia/Tokyo # timedatectl status
SSH等でリモートログインして使用する場合は設定の必要ないが,モニターとキーボードを接続して使用する場合は必要になる。
# localectl set-keymap jp106 # localectl status System Locale: LANG=ja_JP.utf8 VC Keymap: jp106 X11 Layout: jp X11 Model: jp106 X11 Options: terminate:ctrl_alt_bksp
マシン名をpi3に変更する。
# hostnamectl set-hostname pi3
この後,ホスト名が解決できないとかメッセージが出る場合は,/etc/hostsファイルを修正する。
127.0.0.1 localhost 127.0.1.1 pi3 <-- HOSTNAMEの名前
ユーザを追加する。 例:yuji
# adduser yuji
/etc/groupファイルを編集して,追加したユーザが参加するグループを片っ端から登録する。
編集し終わったら,
# grpconv
で,変更を反映させる。
Raspberry Pi用のubuntuでは,swapは有効になっていない。
swapが必要な場合は,以下の手順でswapを使えるようにする。(GUI環境にはメモリがけっこう必要)
# apt-get install dphys-swapfile
インストールが完了するとswapが使用されている。
# free
で確認できる。
ブート時にエラーが出ていて,そのままではwlanが使用できない。
wlanのファームウェアを以下のようにして,ファイルを更新する。
brcmfmac43430-sdio.bin と brcmfmac43430-sdio.txtを,/lib/firmware/brcmにコピーする。
# cp brcmfmac43430-sdio.bin /lib/firmware/brcm/brcmfmac43430-sdio.bin # cp brcmfmac43430-sdio.txt /lib/firmware/brcm/brcmfmac43430-sdio.txt
wlanに必要なツールが入っていなかったらインストールする。
# apt-get install wireless-tools wpasupplicant
/etc/network/interfacesを編集する。eth0,wlan0のエントリを追加して,interfaced.dでロードするのをやめる。 /etc/network/interfaces
: auto eth0 iface eth0 inet dhcp allow-hotplug wlan0 iface wlan0 inet dhcp wireless-power off wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf #source /etc/network/interfaces.d/*.cfg <-- コメント化
/etc/wpa_supplicant/wpa_supplicant.confを以下のように作成する。
/etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant country=JP network={ ssid="access1" key_mgmt=NONE <-- WEPの場合 wep_key0="xxxxxx" wep_tx_keyidx=0 priority=2 <-- 数字が大きい方が優先される } network={ ssid="access2" psk="xxxxxxxxxxxxxx" <-- WAPの場合 priority=1 }
/boot/firmware/config.txtには,
# enable i2c dtparam=i2c_arm=on dtparam=spi=on
にセットされている。(i2cやspiをon)
なぜかi2c-devモジュールが読み込めてないので,/etc/modulesに追加する。
i2c-dev
リブート後モジュールがロードされているか確認。
# lsmod
Raspberry Pi用のubuntuでは,GUI環境は入っていない。入れたい場合は(上記でPPAのレポジトリをわすれずに),
# apt-get install lubuntu-desktop # apt-get install xserver-xorg-video-fbturbo # apt-get install fonts-ipafont fonts-ipaexfont language-pack-ja fcitx-mozc # apt-get install gnome-session-flashback language-pack-gnome-ja
でGUI環境をインストールする。軽い? lubuntuにしてみた。サイズが1.8GBで3時間以上かかる。
/etc/X11/xorg.conf を作成する。
/etc/X11/xorg.conf
Section "Device" Identifier "Raspberry Pi FBDEV" Driver "fbturbo" Option "fbdev" "/dev/fb0" Option "SwapbuffersWait" "true" EndSection
vcgencmd, raspistillなどのツール。
# apt-get install libraspberrypi-bin libraspberrypi-dev
/usrにインストールされるいくつかのサードパーティのスクリプトは,/opt/vc/bin/vcgencmdにあると期待してるため,リンクを張っておく。
# ln -s /usr /opt/vc
fcitx(入力メソッド)がそのままでは自動起動しないので,起動するようにする。
$ cp /usr/share/applications/fcitx.desktop ~/.config/autostart/
GUIでリモートアクセスするために,VNCサーバーをインストールしておく。
# apt-get install tightvncserver
設定ファイルを作成するため一度vncserverを起動する。
$ vncserver
アクセス用のパスワードを設定する。
New 'X' desktop is hostname:1
のように最後の数字がデスクトップ番号になる。
停止するには,
$ vncserver -kill :1
とする。
接続用のパスワードを変更するには,
$ vncpasswd
として変更できる。
.vnc/xstartupファイルを編集する。
#!/bin/bash xrdb $HOME/.Xresources lxsession -s LXDE &
とかしておく。
/etc/systemd/system/vncserver@.serviceファイルを作成する。
/etc/systemd/system/vncserver@.service
[Unit] Description=Start TightVNC server at startup After=syslog.target network.target [Service] Type=forking User=[USERNAME] PAMName=login PIDFile=/home/[USERNAME}/.vnc/%H:%i.pid ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x768 :%i ExecStop=/usr/bin/vncserver -kill :%i [Install] WantedBy=multi-user.target
Unitファイルを読み込ませる。
# systemctl daemon-reload
自動で起動するようにする。
# systemctl enable vncserver@1.service
vncserverを起動する。
# systemctl start vncserver@1
新しくコメントをつける