5
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Organization

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

こんにちは。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

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


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

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

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
5
Help us understand the problem. What are the problem?