Linux
fedora
RaspberryPi

Raspberry PiにFedora25をインストールしたよ

More than 1 year has passed since last update.

こんにちは。Livesense Advent Calendar 2016の3日目を担当しますエンジニアのkurobaraです。

リブセンスでは、会社の口コミサイトである転職会議のメディアチームに所属しています。

転職会議メディアを開発することもありますが、関連プロダクトをやっていることもあります。

最近、寒いですよね。皆様、ご自愛下さいmm


ご存知でしたか?


今更、Raspberry Piのインストール記事?と言われると心苦しいものがありますが・・・

一昔前にはPidoraがありました。

が、2014年時点で更新が止まっているという。。。

しかしながら、Fedoraのサイトに目を向けるとarm向けのimageを提供していることに気づきます

つまり、やり方次第では、Raspberry Piで動作させられるということが分かります

スクリーンショット 2016-12-02 18.32.02.png

# 組み込みやら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を起動すると下記のようにログインコンソールが現れます

(光が反射して見づらいですが、モニターのせいです> <;)

DSC_0232.JPG

DSC_0233.JPG

という感じで無事にインストールと起動することができました


おまけ


ここまで書いておいて、今更ですが忙しい人向けに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


インストール完了後は・・・


いつもどおり(?)、ユーザーやらパスワード変更、各種パッケージの更新を実施してください

# 因みに不用意にアップデートをやりすぎるとカーネルパニックになるのでほどほどで・・・