ひこぽんのーと

覚書と雑記です。

Arch LinuxとLakkaのデュアルブート構成のこと

LinuxとLakkaを同一ディクス上でデュアルブート構成にしたい

動画を見てたらやっている人がいたので、
「どうにかすればできるんだ」という薄い根拠のもと、チャレンジしてみた。
簡単そうだけど、やってみたら結構めんどくさかった。
また、意外に実現方法の記事が見当たらなかった。
ちなみに、Lakkaは公式にはデュアルブート非対応とある。

以下に方法を残す。

ここでの前提(というか環境)

LakkaをPCへインストールする

LakkaのUSBインストーラを作成し、PCをUSBブートする。
USBメディアにLive環境を作り始めるので終わるまで待つ。
(サイズの小さいUSBメモリのほうが早いだろうなぁ)

再起動後、ブートローダが表示されたら、すかさずTabキーを押す。
Tabを押すと、Live環境の立ち上げとインストーラの立ち上げを選択できるので、
インストーラを立ち上げる。

インストーラからインストールするHDDを選択し、
2度の確認をOKして、インストールする。
インストールが始まると、ディスク全体がLakkaのみになる。
インストールが完了し、再起動してLakkaが起動すればOK。

パーティションの修正

インストール後は、以下のようにパーティション構成が書き換えられている。

パーティション 用途 ファイルシステムラベル
/dev/sdx1 Lakkaブート領域 System
/dev/sdx2 Lakkaデータ領域 Storage

これをこんな風に変える。

パーティション 用途 ファイルシステムラベル
/dev/sdx1 Lakkaブート領域 & Arch Linux ブート領域 System
/dev/sdx2 Lakkaデータ領域 Storage
/dev/sdx3 拡張領域
/dev/sdx5 Arch Linux ルート領域 Arch Linux
/dev/sdx6 共用データ領域 User Data
/dev/sdx7 スワップ
Lakkaデータ領域のバックアップ

ファイル操作のできるLive CDやUSBを用意して(ここではArch LinuxのUSBインストーラ)、
Lakkaデータ領域にあるすべてのファイル・ディレクトリ(隠しファイルも含む)を
別のメディアにコピーする。

パーティションの編集

fdiskやcfdiskを使ってパーティションを編成する。
Lakkaデータ領域をリサイズして、空き領域に必要なパーティションを作るイメージ。
この時、Lakkaブート領域は変更しないこと。

パーティションのフォーマット

Lakkaデータ領域はリサイズの影響で壊れているので、
mkfs.ext4コマンドでフォーマットする。

mkfs.ext4 /dev/sdx2

新たに作成したパーティションも適時フォーマットする。

Lakkaデータ領域の復元

別のメディアにコピーしておいたLakkaデータ領域の全ファイル・ディレクトリを
元のパーティションにコピーする。
tune2fsコマンドでファイルシステムラベルをつける。

tune2fs -L "Storage" /dev/sdx2

ついでに他のパーティションにも名前をつけておくと良いかも。

ここで一旦再起動して、Lakkaが起動することを確認する。

Arch Linuxのインストール

Arch Linuxのインストールメディアを使用してインストールを行う。
Lakkaブート領域をArch Linuxのブート領域としても使うよう設定する。
GRUB2をインストールして、既存のブートローダを上書きする。
再起動後、GRUB2からArch Linuxが起動できればOK。
Lakkaはこの段階で一旦、起動できなくなる。

/etc/grub.d/40_customの編集

LakkaをGRUB2から起動できるように、
/etc/grub.d/40_customにメニューエントリを追加する。

nano /etc/grub.d/40_custom
----
menuentry "Lakka" {
	search --set=root --label System --hint hd2,msdos1
	linux /KERNEL boot=LABEL=System disk=LABEL=Storage quiet
}
----

grub.cfgの再生成

grub-mkconfigを実行してgrub.cfgの再生成を行う。

 grub-mkconfig -o /boot/grub/grub.cfg

再起動後、GRUBメニューにLakkaがあり、問題なく起動できればOK。

ああ、めんどくさかった!
UEFI環境でGPTの場合はなんか違うんだろうか、と思いつつ、
おしまい。

Lakkaのethernet, wifiに静的IPアドレスを設定するのこと

Raspberry Pi 3 B+にインストールしたLakkaで静的IPアドレス設定方法を残しておく。

Ethernetの場合

IP確認

LanケーブルをつなぐとまずはDHCPでプロファイルが作られる。
Lakkaの情報メニューから付与されたIPアドレスを確認する。

ネットワークサービス名の確認

Lakkaはconnmanctlでネットワーク設定を行うので、SSHで作業を行う。
ネットワーク設定は、/storage/.cache/connman/配下にある。
Ethernetならば「ethernet~」、Wifiならば「wifi〜」というディレクトリができているが、
このディレクトリ名がconnmanctlでのサービス名にあたる。

静的IPアドレスの設定

サービス名を確認したら、コマンドで設定する。

# connmanctl config <service> --ipv4 manual <ip_addr> <netmask> <gateway> --nameservers <dns_server>

設定が済むと直ちにIPが変わるため、接続が切れると思うので、
再度、LakkaのメニューでIPを確認を行う。
IPアドレスが変更されていればOK.

Wifiの場合

ステルスモードのアクセスポイントへの接続

scanしても見えないので、connmanctlを使って設定を行う。

$ connmanctl  // 対話モードとなる
connmanctl> scan wifi  // アクセスポイントのスキャン
connmanctl> services  // サービス名の表示
connmanctl> agent on  // エージェントを有効化
connmanctl> connect <サービス名: 例:wifi_dc85de828967_38303944616e69656c73_managed_psk>
ここでSSIDとパスフレーズを聞かれる。
入力後、接続確立のメッセージがでればOK.
connmanctl> quit

静的IPアドレスの設定

設定方法はEthernetの場合と同じ。

おしまい。

Raspberry Pi 3のWi-Fi自動起動のこと

Raspberry Pi 3にArch Linux Armをインストールして、
オンボードEthernetWi-FIに個別のIPアドレスを付与する点で
非常にハマったのでメモを残しておく。

Arch Linux Armのネットワーク設定は、
デフォルトの場合、Systemd-Networkdが使われていて、
Ethernetの方は自動認識してくれるが、Wi-Fiは設定を作成しないと接続できない。
そこでWi-Fi接続の際は、WPA_Supplicantの定義ファイルとSystemd-Networkdの定義ファイルを作成する必要がある。

  • WPA_Supplicantの定義 -> Wi-Fi接続設定(SSID、パスワード関連)
  • Systemd-Networkdの定義 -> IPアドレス設定(DHCP、手動接続など)

ところが、これをやってもIPアドレスは振られるものの
なぜかWi-FIから接続できなかった。(結局、原因もわからなかった)

そこで、Systemd-Networkdを使わずにNetworkManagerを使う方針に変更。
nmtuiで接続設定を作成(SSID、パスワード関連およびIPアドレス設定)し、
OS起動時にWi-Fi接続が行われるように設定した。

  • 「自動的に接続する 」をON
  • 「全ユーザーに使用可能 」をON

ところが、起動時にWi-Fi接続は行われなかった。
コマンドを用いて手動起動は確認できた。

nmcli con up <接続定義名>

ところで、うちのWi-Fiルーターはステルスモードで動いている。
WPA_Supplicantでは「scan_ssid=1」の定義を加える必要があったが、
nmtuiではそのような項目は無かったように思った。
そこで、nmcliで各プロパティを見ていると、
「802-11-wireless」の項目に「hidden」というプロパティがあるのに気づいた。
マニュアルによるとデフォルトはFALSEらしい。

結局、NetworkManagerでWi-Fi自動起動ができた。
ステルスモード時は「802-11-wireless.hidden」を「TRUE」にする必要がある。

nmcli connection edit <接続定義名>
nmcli > set 802-11-wireless.hidden TRUE
nmcli > save
nmcli > quit

結局、Systemd-Networkdでできなかった理由はわからないままか。。。
おしまい。

Arch Linux ArmにUPNPメディアレンダラーを立てるのこと

以前、Raspberry Pi上にUPNPメディアレンダラーを立てる記事を書いた。
nagamitsu1976.hatenadiary.jp
これと同じことをArch Linux Armでやった時、
gmrender-resurrectのビルドに多少手間取ったので記録を残しておく。

GMRenderのビルド

クローン

GitHubからソースを取得する。
https://github.com/hzeller/gmrender-resurrect.git

依存ライブラリのインストール

Arch Linux AURにgmrender-resurrect-gitとして登録されていたので、
依存関係はここを見て確認した。
https://aur.archlinux.org/packages/gmrender-resurrect-git
見たところ、必要なパッケージはlibupnp、gst-plugin-good, gst-plugin-baseだったので、
これらをインストールした。

$ pacman -S libupnp # vlcをインストールしたから入ってた(多分)
$ pacman -S gst-plugins-good
$ pacman -S gst-plugins-base
ビルド

Configure, make, make installを実行。

$ ./autogen.sh
$ ./configure
$ make
$ make install
テスト

gmrender-resurrectのReadmeを参照して、
手順通りに起動し、音声が再生できればOK。

Arch Linux Armでラジオを鳴らすのこと

以前、Raspberry PiRadikoを聴く件について書いた。
nagamitsu1976.hatenadiary.jp
あれと同じことをArch Linux Armでやってみたら
存外ハマったので記録を残しておく。

ALSAの設定

音声出力設定

alsa-utilパッケージのインストールと/boot/config.txtに下記を設定する。

dtparam=audio=on
hdmi_drive=2 # HDMIで音を出す場合に設定
audio_pwm_mode=2 # ステレオ端子で音を出す場合に設定

詳しくはArch Linux Armのサイトの手順を参照。
Raspberry Pi | Wiki | Arch Linux ARM

aplay -Lでデバイスが見つからない場合

root以外のユーザで上記の設定をしていても
バイスが見つからないことがある。
その場合は、ユーザをaudioグループに追加するとデバイスが参照できる。

再起動でボリュームが初期値に戻る

Arch Linuxの時と同じ対処方法をとればOK。

$ sudo alsactl -f /var/lib/alsa/asound.state store
$ sudo alsactl restore

SWFTools(swfextract)のビルド

Arch Linux Arm用にビルドされたSWFToolsが無いので、ソースからビルドする必要がある。
作業内容については、この記事を参考にした。
radikoの録音・再生(ArchLinux) | まっつんぶろぐ

ソースの取得

SWFToolsのサイトから最新ソースをダウンロード。
http://www.swftools.org/

依存ライブラリのインストール

SWFToolsのサイトから情報を引きたかったのだが、参照できなかったので、
先のブログ様の記事の通り、ライブラリをインストールした。

$ pacman -S pdflib zip fftw zziplib ruby
ビルド

ソースを展開してビルド開始。
先のブログ様の記事の通り、途中でエラーが発生し、ビルドが中断するが、
srcディレクトリ内を参照し、swfextract.oができていればOKとする。

$ ./Configure
$ make
# swfextractができていれば
$ make install

その他パッケージのインストール

必要なもの

rtmpdumpとvlcが必要なのでインストールする。

$ pacman -S rtmpdump vlc

これで大体、Raspbianの時と同じ環境となり、
以前作成したシェルを実行したら、うまくRadikoが聴けた。

Raspberry Piに Arch Linux Armをインストールするのこと

Arch Linux Arm on Raspberry Pi

RaspbianからArch Linux Armに載せ替えてみた。
GUIなどはインストールしなかった分、起動は早かった……ような気がする。
以下に手順を残しておく。

ガイドに従ってインストール

サイトの指示に従ってインストールする。
ガイドは作業PCがLinux前提で書いてあるけど、
Windowsだったらどうするんだろうなぁ。
Raspberry Pi | Arch Linux ARM

環境設定

以下はArch Linuxをインストールした時と同じ手順で行えた。
初期起動時点でsshdは起動しているのでリモートで作業できる。
nagamitsu1976.hatenadiary.jp

GW-900Dのドライバ導入

うちのRaspberry Piは初期型なのでWifiはドングルを使っている。
このドングルはドライバが用意されていないので、
ソースからビルドする必要があるのはRaspbianと変わらない。

ビルド環境の準備

ビルド環境とgitをインストール

$ pacman -S base-devel
$ pacman -S linux-raspberrypi-headers
$ pacman -S git
RTL8812au ドライバの作成&インストール
$ cd [適当なworking directory]
$ git clone https://github.com/gnab/rtl8812au.git
$ cd rtl8812au
$ nano Makefile
# ターゲットCPUをi386からarmに変更
$ make
$ cp 8812au.ko /lib/modules/extramodules--raspberrypi/kernel/drivers/net/wireless/
$ depmod
$ reboot

再起動したらlsmodとdmesgでドライバがロードされているか確認。*2
ip linkでネットワークインターフェイス名を確認し、wifiのI/Fが確認できればOK。

Pacmanフックの追加

カーネルが更新されるとwifiドライバもビルドし直しとなる。
手動ビルドも面倒なので、Pacmanフックを使って自動化してみる。
Pacmanフックを設定するには/etc/pacman.d/hooks配下にhookファイルを配置する。
Arch Linuxwiki Pacmanフックの項を参考に作ってみたhookファイルはこんな感じ。

/etc/pacman.d/hooks/rtl8812au.hook
……
[Trigger]
Operation = Upgrade
Type = Package
Target = linux-raspberrypi
Target = linux-raspberrypi-headers

[Action]
Depends = linux-raspberrypi-headers
Depends = make
Depends = gcc
When = PostTransaction
Exec = /usr/local/src/rtl8812au/8812au_make.sh
……

カーネルカーネルヘッダの更新をトリガーとして、
それらが更新された後にExecで指定したmake用のシェルを実行する、
といった感じ。ドライバのビルドにはカーネルヘッダが必要なので
依存条件にカーネルヘッダが入れてある。*3

wpa_supplicantの設定

接続情報の設定

wpa_passphreseでssidのパスワードを自動生成しておく。
/etc/wpa_supplicant/wpa_supplicant-wlan0.confを新規作成し、以下の内容を記述する。

ctrl_interface=/run/wpa_supplicant
update_config=1
network={
	ssid="XXXXXXXXXXX"
	proto=RSN
        key_mgmt=WPA-PSK
	pairwise=CCMP
	group=CCMP
	#psk="xxxxxxxxxxxxx"
	psk=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345678901
	scan_ssid=1
}
wpa_supplicant起動パラメータの編集

このまま起動するとこんな感じで、ドライバー未サポートのエラーが出る。

Successfully initialized wpa_supplicant
nl80211: Driver does not support authentication/association or connect commands
wlan0: Failed to initialize driver interface

Arch Linuxwikiにあるwpa_supplicantの項に対処方法が書いてあるので、
wikiに従って対処する。
WPA supplicant - ArchWiki

$ nano /usr/lib/systemd/system/wpa_supplicant@.service
……
# ExecStartの行の最後に「-Dnl80211,wext」を追加する。
ExecStart=/usr/bin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -i%I -Dnl80211,wext
……
wpa suppliantサービスの有効化

wpa suppliantサービスの有効化を行う。

$  systemctl start wpa_supplicant@wlan0
$ systemctl status wpa_supplicant@wlan0
# ステータス確認で問題なければenableする。
$ systemctl enable wpa_supplicant@wlan0

IPアドレスの割り当て

IPアドレスはsystemd-networkdが管理しているようなので*4、以下を編集する。
ファイルの書き方はここを参照。*5

Ethernetポートの場合

/etc/systemd/network/eth0.networkを編集

[Match]
Name=eth0

#[Network]
#DHCP=yes
[Address]
Address=192.168.10.32/24

[Route]
Gateway=192.168.10.1
Wifiの場合

/etc/systemd/network/wlan0.networkを編集。
ファイルがなければ/etc/systemd/network/eth0.networkをコピーしてリネームしてから編集する。

[Match]
Name=wlan0

#[Network]
#DHCP=yes
[Address]
Address=192.168.10.33/24

[Route]
Gateway=192.168.10.1

systemd-networkdのリロード

systemd-networkdをリロードして、
ip aでIPアドレスが設定通りか確認する。

$ systemctl restart systemd-networkd

再起動

再起動して、ネットワークが自動起動すればOK。

Congraturations!

初期設定はこんな感じでおしまい。

*1:日本のサイトが無いので台湾にした

*2:/lib/modules/extramodules--raspberrypiの配下であれば読み込んでくれるらしい

*3:rtl8812auのMakefileではuname -rの結果をターゲットバージョンとするので、Pacmanフックでビルドする場合は、ターゲットバージョンの取り方を書き換えておく必要がある

*4:http://archpi.dabase.com/

*5:https://wiki.archlinux.jp/index.php/Systemd-networkd

Arch Linuxのインストール手順のこと その4

How to use AUR

Ubuntuで言うPPAみたいなもの。
AURのリポジトリにはソースが置いてあるので、
ダウンロードしてきて、ビルド、インストールすると認識すればいい。
手でやるのは面倒だと思うけど、そこはそれ、
パッケージ名を指定するだけで導入できるツールがある。

Yaourtの導入

ヨーグルトと読むらしい。
これを導入すれば、AURも簡単に導入できる。

gitのインストール

インストールしたてのArch Linuxにはgitも入ってないので、これを追加する。

$ sudo pacman -S git
package-queryのインストール

yaourtで必要なpackage-queryをインストールする。
適当なディレクトリを作ってそこにcloneして、手順に従ってビルドする。

$ mkdir ~/.local/share/aur
$ cd aur
$ git clone https://aur.archlinux.org/package-query.git
$ cd package-query
$ makepkg -si
$ cd ..
yaourtのインストール

続いて、yaourtをcloneして、ビルドする。
ビルドが終われば導入完了。

$ git clone https://aur.archlinux.org/yaourt.git
$ cd yaourt
$ makepkg -si
$ cd ..

実験: Mate Tweakのインストール

AURパッケージ導入の実験として、Mate Tweakをインストールしてみる。
Ubutu MateにあったMate TweakはArch LinuxではAURに分類されているので、
まずは、Arch LinuxのAURのページへ行き、Mate Tweakのパッケージ名を調べる。
f:id:nagamitsu1976:20180621153107p:plain
いくつかあるが4つのうち3つは開発版だたりgtk2版だったりして違うようなので、
最上位にある「mate-tweak」をインストールしてみる。

$ yaourt -S mate-weak

手順としては上のコマンドを実行するだけ。
これで、ソースのダウンロードからビルド、インストールまで一括で行える。
コマンド実行中にビルドファイルの編集、ビルドされたパッケージの内容確認を聞かれるが
これは特にしなくても大抵は問題ない。
出来あったパッケージをインストールすれば、
コントロールセンターにMate Tweakが追加される。

That's all. This is end.

といったところで、Arch Linuxの導入はおしまい。
Arch Linuxをインストールしてみると、
Ubuntuの導入がいかに楽なのかがよく実感できる作業でした。