[Raspberry Pi] Archlinuxのimgファイルを作る

こんにちは

ブログの更新に時間がかかってしまいました。テクニカルな記事は自分で実行したりして確認をとる必要があるので時間がかかります。

以前の記事で書いたArchlinux用のimgファイルを今回は作ってみることにしました。

参考にした記事があります。 ほとんどこの通りにすれば、新しいimgファイルを作ることができます。

本当に参考になりました。ありがとうございました。

 

http://mattintosh.hatenablog.com/entry/20160204/1454596130

Arch Linux ARMのディスクイメージを作成する(losetup、kpartx)

環境

環境:

  • Raspberry Pi(Model B): Raspberry Pi1とします)
  • Linuxが動作するパソコン

上の2つのどちらか一つが必要ですが、OSとしてLinuxが動作するものが必要になります。

最初にLinuxが動作するパソコンでArchlinuxのimgファイルを作ってみることにします。というのはRaspberry Pi1で作ることも可能なのですが、卵が先か鶏が先かの問題と似通っているため、Linuxが動作するパソコンで作ることにしました。

imgファイル

Linuxの動作するパソコンでのimgファイル作り

Linuxが動作するパソコンは、Let’s Note CF-NX2という業務用の中古品を使用します。 

このパソコンは別途紹介することにして、早速参考にした記事に従っていきます。

Archlinuxの容量を調べます。実際にはArchlinuxARMのファイルを持ってきて調べます。

コマンドは

 

$ curl -LO http://archlinuxarm.org/os/ArchLinuxARM-rpi-latest.tar.gz

 

 

$ gzip -l ArchLinuxARM-rpi-latest.tar.gz | numfmt --header=1 --field=1,2 --to si

です。

 

 

$ curl -LO http://archlinuxarm.org/os/ArchLinuxARM-rpi-latest.tar.gz

——————————————–

 

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                 Dload  Upload   Total   Spent    Left  Speed

100   185  100   185    0     0    217      0 --:--:-- --:--:-- --:--:--   217

100   185  100   185    0     0     94      0  0:00:01  0:00:01 --:--:--   245

  0     0    0     0    0     0      0      0 --:--:--  0:00:02 --:--:--     0

100  307M  100  307M    0     0  2011k      0  0:02:36  0:02:36 --:--:-- 3408k

-rw-rw-r--  1 kk1  kk1  322052259  7月 29 14:31 ArchLinuxARM-rpi-latest.tar.gz

というファイルができていました。

次に

 

$ gzip -l ArchLinuxARM-rpi-latest.tar.gz | numfmt --header=1 --field=1,2 --to si

 

         compressed        uncompressed  ratio uncompressed_name

 

              323M                763M  57.7% ArchLinuxARM-rpi-latest.tar

—————————————–

これくらいだと1GB以内に収まるため1GBのimgファイルを作ることにすればいいのですが、この資料を作成中に何度か失敗をしたので2GBのファイルを作ることにしました。

したがって、参考にしたブログの記事と相違が出ていますが、そう大きな違いはないと思います。

ただ市販されているSDカードは最低でも4GB以上ですので、2GBにしても問題ありません。 なお最終的にimgファイルを展開したSDカードは後で領域の拡大を行います。

2GBのダミーファイルの作成

コマンドは

$ fallocate -l 2GB ArchLinuxARM_`date +%Y%m%d`.img

このコマンドで作るimgファイルはダミーファイルとなります。 まだ中身がありません。

——————————————–

 

$ fallocate -l 2GB ArchLinuxARM_`date +%Y%m%d`.img

 

-rw-rw-r--  1 kk1  kk1  2000000000  7月 29 14:44 ArchLinuxARM_20170729.img

——————————————–

という2GBのダミーファイルが出来ました。

ダミーファイルにパーティションを作る

作ったダミーファイルにfdiskでパーティションを作ります。

記事のコマンド

 

$ fdisk ArchLinuxARM_20170729.img<<!
o
n


+100M
t
c
n




w
!

—————————————–

ではこの通りにします。

—————————————–

 

$ fdisk ArchLinuxARM_20170729.img<<!

> o

> n

>

>

>

> +200M

> t

> c

> n

>

>

>

>

> w

> !

———————————————-

でもできますが、どのように作っているのか見えないので

次のコマンドを使っても作成することが可能です。

 

$ fdisk ArchLinuxARM_20170729.img

———————————————-

ダミーファイルのパーティションを確認

コマンドは

 

$ fdisk -l ArchLinuxARM_20170729.img

では

———————————————

 

$ fdisk -l ArchLinuxARM_20170729.img

Disk ArchLinuxARM_20170729.img: 953.7 MiB, 1000000000 bytes, 1953125 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x1a06d459

 

デバイス                   起動  Start 最後から セクタ   Size Id タイプ

 

ArchLinuxARM_20170729.img1        2048   411647  409600   200M  c W95 FAT32 (LBA

ArchLinuxARM_20170729.img2      411648  3906249 34946021.7G  83 Linux

——————————————–

となっていました。

ダミーファイルのフォーマット

参考にした記事に従って ここではLinuxをインストールしたパソコン(ubuntu)を使用していますので記事に従って

Ubuntu の場合(w kpartx)

kpartxを使うとのことで

——————————————–

 

$ sudo kpartx -av ArchLinuxARM_20170729.img

add map loop1p1 (252:2): 0 409600 linear 7:0 2048

add map loop1p2 (252:3): 0 3494602 linear 7:0 411648

———————————————

「失敗を繰り返していたので本来ならば

add map loop0p1 (252:0): x xxxx

add map loop0p2 (252:1): x xxx

となるはずですが、

loop0p1 → loop1p1、loop0p2 → loop1p2になっていますので注意して」ください。

——————————————–

となりました。

次のコマンドではloop0をloop1に変更して

——————————————–

 

$ lsblk /dev/loop1

NAME      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT

loop1       7:1    0  1.9G  0 loop

├─loop1p1 252:2    0   200M  0 part1

└─loop1p2 252:3    0   1.7G   0 part

——————————————–

と表示されました。

 

参考した記事によれば

———————————————

「kpartxはループデバイスを/dev/mapper以下に配置する」 とのことです。

———————————————

参考にした記事では

 

# mkfs.vfat /dev/loop0p1

# mkfs.ext4 /dev/loop0p2

となっていますが、なぜかフォーマット出来ませんでした。

 

これを以下のようにします。

———————————————

 

$ sudo mkfs.vfat /dev/mapper/loop1p1

$ sudo mkfs.ext4 /dev/mapper/loop1p2

———————————————

でエラーとはなりませんでした。

ダミーファイルへシステムファイルをコピー

ダミーのファイルにシステムをコピーします。

まずマウントします。

 

$ sudo mkdir root

としてrootを作っておきます。

次にrootにmountします。

 

$ sudo mount /dev/mapper/loop1p2 root

rootの下にbootを作ります。

 

$ sudo mkdir root/boot

root/bootにmountします。

 

$ sudo mount /dev/mapper/loop1p1 root/boot

 

$ sudo bsdtar -xpf ArchLinuxARM-rpi-latest.tar.gz -C root

私の場合は、ここでエラーが出ましたが

~/root$ ls

として出来たファイルを確認したところ、以下の様になっていました。

———————————————

 

bin   dev  home  mnt  proc  run   srv  tmp  var
boot  etc  lib   opt  root  sbin  sys  usr

———————————————

また

 

~/root/boot$ ls

で root/bootのファイルを見たところ

———————————————

 

bcm2708-rpi-0-w.dtb     bcm2835-rpi-b.dtb     fixup_x.dat

bcm2708-rpi-b-plus.dtb  bcm2835-rpi-zero.dtb  initramfs-linux.img

bcm2708-rpi-b.dtb       bootcode.bin          kernel.img

bcm2708-rpi-cm.dtb      cmdline.txt           overlays

bcm2835-rpi-a-plus.dtb  config.txt            start.elf

bcm2835-rpi-a.dtb       fixup.dat             start_cd.elf

bcm2835-rpi-b-plus.dtb  fixup_cd.dat          start_db.elf

bcm2835-rpi-b-rev2.dtb  fixup_db.dat          start_x.elf

———————————————

となっていましたので多分大丈夫だと思い。

 

 

$  sudo umount /dev/mapper/loop1p1 /dev/loop1p2

でmountを解除しました。

 

$ sudo losetup -d /dev/loop1

 

で終了です。

本当にimgが出来ているかどうかは、実機で動作させてみます。

SDカードへの書き込み

その前にLinuxでimgをSDカードに書き込むには

 

$ sudo dd if=ArchLinuxARM_20170729.img of=/dev/sdc1 bs=1M

書き込みが終わったSDカードをRaspberry Pi1に入れて電源を投入します。

動作確認

Raspberry Pi1での確認

sshでloginしてファームウェアを確認して見ました。

 

$ uname -a

Linux alarmpi 4.9.36-1-ARCH #1 SMP Fri Jul 7 02:00:21 UTC 2017 armv6l GNU/Linux

となっていました。

 

# pacman -Sy

 

 

# pacman -Syu

でアップグレードします。

 

初期設定もしていない状態なので英語のキーボード仕様になっています。

必要最低限の設定はこのブログでも公開していますので参考?にしてください。

 

なおここで紹介したimgファイルはubunut上で作成してSDカードに書き込み、Raspberry Pi1(Model B+)で動作確認をしましたが、同様のことはRaspberry Pi1本体上で行うことも可能です。

 

コメント