こんにちは。Livesense Advent Calendar 2016の3日目を担当しますエンジニアのkurobaraです。
リブセンスでは、会社の口コミサイトである転職会議のメディアチームに所属しています。
転職会議メディアを開発することもありますが、関連プロダクトをやっていることもあります。
最近、寒いですよね。皆様、ご自愛下さいmm
ご存知でしたか?
今更、Raspberry Piのインストール記事?と言われると心苦しいものがありますが・・・
一昔前にはPidoraがありました。
が、2014年時点で更新が止まっているという。。。
しかしながら、Fedoraのサイトに目を向けるとarm向けのimageを提供していることに気づきます
つまり、やり方次第では、Raspberry Piで動作させられるということが分かります
# 組み込みやらFedora界隈の人たちはご存知でしょうが・・・
何故するのか?
- RedHat系Linuxに対する愛(あるのかな?)
- 人とは違うRaspberry Pi用OSを使ってるのでドヤれる(重要)
- 単純に他と違うインストール方法で、技術的に面白い(かも...)
Raspberry Piで動かすならArchLinuxでも全然イケてると思います。
インストールするよ
以降の内容は、自己責任でお願いしますmm
試してみて生じたあらゆる損害等についても、理由の如何に関わらず、
一切責任を負えませんのであしからずご了承下さいmm
Raspberry Piの固有機能(カメラモジュールとか)みたいなのは一切使えないのでご了承ください。
必要なもの
- 作業用Linux(今回はCentOS7で実施)
- Raspberry Pi2ModelB(手元のもの)とSDカード、キーボード、電源、モニター
- Fedoraのimage
- Raspberry Piのfirmware
# 偶々、手元にあったLinuxがCentOS7だっただけです> <
必要なことを整理
- Raspberry PiのfirmwareとRaspberry Piの機能設定(
config.txt
)入りのbootパーティション作成 - Fedoraのimageを展開し、展開した中にfirmwareと機能実装を追加、その後imageとパーティションを作成
- 起動設定に必要なfstabとか、rootのsshとかの設定
# あまり良くないが、ゴリ押しするならraspbianが入った領域に適当にfedoraのimage書き込んで、元のfstabやら起動に必要なものとか、firmwareを入れ込めば案外できるのかも・・・
必要なもの準備
Fedoraのimage取得
imageのバージョンは適宜変更してください
$ wget https://download.fedoraproject.org/pub/fedora/linux/releases/25/Spins/armhfp/images/Fedora-Minimal-armhfp-25-1.3-sda.raw.xz
Raspberry Piのfirmwareの取得
結構デカイので、最新のものがあればいいや理論
$ git clone https://github.com/raspberrypi/firmware.git --depth 1
bootパーティションの作成
image領域作成
領域サイズは好きに決めて良いと思います。
余裕を見て200MBにしました
$ truncate -s 200MB boot.img
リムーバブルメディア用にFAT/FAT32にフォーマット
$ mkfs.fat boot.img
mkfs.fat 3.0.20 (12 Jun 2013)
boot.imgに追加
作成したboot.imgをマウントし、raspberry pi用のbootファイルを追加
config.txt
はこちらになりますので、適宜作成してください
# raspibian
があるならばそこから持ってくるのが安牌かも
$ mkdir work
$ sudo mount -o loop boot.img work
$ sudo cp -Rf firmware/boot/* work/.
$ sudo cp -f config.txt work/.
因みに、NOOBSでインストールしたraspbian
のファイルは殆どコメントアウトされており、下記のみ有効でした
# Enable audio (loads snd_bcm2835)
dtparam=audio=on
# NOOBS Auto-generated Settings:
hdmi_force_hotplug=1
start_x=0
これでboot用のパーティションと中身のファイル配備設定は終わり
OS用パーティションの作成
imageの中身を展開したパーティションファイルの作成
bootやらswapやらは不要なので、今回は抜いてしまい純粋なOSの関連ファイルだけにしてしまいます。
ということなので、それ以外の領域を読み飛ばしたパーティションimageを作成します
$ fdisk Fedora-Minimal-armhfp-25-1.3-sda.raw
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
コマンド (m でヘルプ): p
Disk Fedora-Minimal-armhfp-25-1.3-sda.raw: 2177 MB, 2177892352 bytes, 4253696 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x0fbf13bf
デバイス ブート 始点 終点 ブロック Id システム
Fedora-Minimal-armhfp-25-1.3-sda.raw1 2048 61439 29696 c W95 FAT32 (LBA)
Fedora-Minimal-armhfp-25-1.3-sda.raw2 * 61440 1060863 499712 83 Linux
Fedora-Minimal-armhfp-25-1.3-sda.raw3 1060864 1560575 249856 82 Linux swap / Solaris
Fedora-Minimal-armhfp-25-1.3-sda.raw4 1560576 4059135 1249280 83 Linux
$ dd if=Fedora-Minimal-armhfp-25-1.3-sda.raw bs=512 skip=1560576 of=fedora.img
2693120+0 レコード入力
2693120+0 レコード出力
1378877440 バイト (1.4 GB) コピーされました、 2.29156 秒、 602 MB/秒
パーティションの拡張
1.4GBしか無いため、拡張を行います
32GBのSDカードを想定しているので、その分を設定します
$ resize2fs fedora.img 29500M
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on fedora.img to 7552000 (4k) blocks.
The filesystem on fedora.img is now 7552000 blocks long.
$ truncate -s 29500M fedora.img
マウント
fstab変更やrootパスワード変更、モジュールやfirmwareを追加するためにマウントする
$ sudo mount -o loop fedora.img work
モジュール追加
同梱されているモジュールがあるが、fedoraがarm用で同梱しているものなので気にしない。
$ sudo cp -Rf firmware/modules/4.4.35-v7+ work/lib/modules
$ ls -al work/lib/modules
合計 32
drwxr-xr-x. 4 root root 4096 12月 2 15:51 .
dr-xr-xr-x. 59 root root 20480 11月 16 05:13 ..
drwxr-xr-x. 3 root root 4096 12月 2 15:51 4.4.35-v7+
drwxr-xr-x. 5 root root 4096 11月 16 05:13 4.8.6-300.fc25.armv7hl
fstab設定
当たり前ですが、Fedoraに同梱されている既存のfstabでは起動不可能なので、書き換えます
$ blkid -o export fedora.img
DEVNAME=fedora.img
LABEL=_/
UUID=c19816a7-cbb8-4cbb-8608-7fec6d4994d0
TYPE=ext4
$ sudo vi work/etc/fstab
fstabに記載する内容
- UUIDベースで制御されているので、予め取得したUUIDを記載
-
/boot
の内容が異なるので変更
UUID=c19816a7-cbb8-4cbb-8608-7fec6d4994d0 / ext4 defaults,noatime 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 0
初期セットアップサービスの削除
少しゴリ押しですが・・・
$ sudo rm work/etc/systemd/system/multi-user.target.wants/initial-setup.service
sshログインの設定
ここは、ユーザ個人設定なので・・・
$ sudo mkdir work/root/.ssh
$ sudo touch work/root/.ssh/authorized_keys
$ sudo vi work/root/.ssh/authorized_keys
$ sudo chmod 700 work/root/.ssh
$ sudo chmod 600 work/root/.ssh/authorized_keys
rootパスワード設定
ここは、ユーザ個人設定なので・・・
$ sudo chmod +w work/etc/shadow
$ openssl passwd -1 'your_password'
your_password
$ sudo vi work/etc/shadow
$ sudo chmod -w work/etc/shadow
etc/shadow
は以下のような形に変更する
root:*:17004:0:99999:7:::
→
root:your_password:17004:0:99999:7:::
マウント解除
必要最低限のことはできたので、マウント解除をする
$ sudo umount work
Raspberry Pi書き込み用のimageの作成
ここからの作業がぶっちゃけ重要・・・
書き込み用imageの作成
29500M + 200M = 29700M
以上かつ32GBに収まるようにします
$ truncate -s 29800M rasp_fedora.img
$ sudo parted rasp_fedora.img mklabel msdos
警告: いま存在している rasp_fedora.img のディスクラベルは破壊され、このディスクの全データが失われます。続行しますか?
はい(Y)/Yes/いいえ(N)/No? Y
パーティションの作成
先程作成したbootパーティション
とOSパーティション
の両方が書き込める領域を用意します
少しだけパーティション内に無駄が出ますが、安全側に倒して作成します
$ sudo parted rasp_fedora.img mkpart primary fat16 1MiB 210MiB
$ sudo parted rasp_fedora.img mkpart primary 210MiB 100%
パーティションへの書き込み
$ dd if=boot.img of=rasp_fedora.img obs=1M seek=1
$ dd if=fedora.img of=rasp_fedora.img obs=1M seek=210
これでRaspberry Pi対応版Fedoraの作成完了です
書き込みと起動結果
こんな感じで、SDカードに書き込みます
$ sudo dd if=rasp_fedora.img of=/dev/sda bs=1m
SDカードを抜いてRaspberry Piを起動すると下記のようにログインコンソールが現れます
(光が反射して見づらいですが、モニターのせいです> <;)
という感じで無事にインストールと起動することができました
おまけ
ここまで書いておいて、今更ですが忙しい人向けに3行メモ残します
- Debian系のOSを使えば、
xzdec
,git
,kpartx
あれば楽にimgをセットアップできるInstallerがあるので楽にimageが作成できます - 前述のスクリプト使う場合は、settins.confの
ROOTSIZE
,BOOTSIZE
を間違えるとで後からパーティション切る羽目になります -
オフィシャルだと
dnf
からセットアップ用のパッケージインストールできるようです(未検証)
# セットアップの中身を見ましたが、Debian系のコマンドである以外やってることは殆ど同じでしたw
おまけ(その2)
ついでにwifiで外部と疎通できるところまで書いておきます
使用しているwifiドングルは、GW-USNano2というものを使っています。
今だと後継機と思われるGW-USNANO2Aが入手できるもののようです
# 多分、このシリーズであれば確実にwifi接続できるでしょう。
で、肝心の設定の仕方ですが、DHCPでつなぐと仮定した状態で進めます
設定の作成
雑ですが、下記のようにSSIDとパスフレーズを記載
$ vi /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=/run/wpa_supplicant
update_config=1
network={
ssid="MYSSID"
psk="passphrase"
}
ついでにsystemdで起動するようにしておきます
$ /etc/sysconfig/wpa_supplicant
INTERFACES="-iwlan0"
DRIVERS="-Dwext" #<= deprecatedだがつなぐ目的なので気にしない
OTHER_ARGS="-s"
APにつながるか確認する
以下を実行して問題なく、設定したSSIDが見えてるか確認しておく
$ wpa_supplicant -B -i interface -c /etc/wpa_supplicant/wpa_supplicant.conf
$ wpa_cli
> scan
OK
<3>CTRL-EVENT-SCAN-RESULTS
> scan_results
...
pingで外部と疎通できるか確認
$ dhcpclient wlan0
$ ping www.google.com
dhcpcdをインストール
$ dnf install dhcpcd
systemdを有効化
起動時に自動接続するように仕掛けておきます
$ systemctl enable wpa_supplicant
$ systemctl enable dhcpcd@wlan0
インストール完了後は・・・
いつもどおり(?)、ユーザーやらパスワード変更、各種パッケージの更新を実施してください
# 因みに不用意にアップデートをやりすぎるとカーネルパニックになるのでほどほどで・・・