9.1 KiB
+++ date = "2021-04-30" tags = ["arch"] title = "usbにarchをインストールする方法" slug = "arch" +++
基本的には、macbookでもbootできるarch usbの作成方法です。
grub
まずbootですが、私はmacbook-airの内蔵diskにarchをインストールしてることもあって、そこから持ってくることになりました。
grub-installは成功するんだけど、なぜかうまく動かない。また、archのインストールディスクからgrubがなくなってるのと、現在のインストールディスクがmacbookで認識しなくなってました。supportはずされたのか、それ以外の問題か。なんにせよ最新のgrub-installで作成されるefiではbootできないし、最新のインストールディスクはmacbookから起動できません。(私の環境では)
なので、基本的には、usbにlinuxをインストールして、archが動いてるdiskの/boot(linux-img以外)
及び/dev/sda1
のディレクトリ構成をコピーすればokです。
$ pacman -S linux
$ mount /dev/sdb2 ./mnt
$ cp -rf /boot/efi ./mnt/boot/
$ cp -rf /boot/grub ./mnt/boot/
$ mount /dev/sdb1 ./boot
$ mount /dev/sda1 ./boot2
$ cp -rf ./boot2/* ./boot/
$ grub-mkconfig -o /boot/grub/grub.cfg
ちなみに、grub-installは以下のコマンドで成功(動かないけど)。
$ arch-chroot ./mnt
$ mount /dev/sdb1 ./boot/efi
$ grub-install --efi-directory=/boot/efi /dev/sdb
linux
macbookは2台あるんですけど、archがすんなり起動したやつとしなかったやつがありました。
macbookによってはlinux起動時に以下のようなerrorが出てlinuxが起動しない場合があって、uuidが見つからないと言われてるんだけど、普通にusbのuuidは一致してるので、fstab, grubの問題ではなく、linux kernelの問題でした。
ERROR: device 'UUID=xxx' not found. Skipping fsck. mount: /new_root: can't find UUID=xxx. You are now being dropped into an emergency shell. sh: can't access tty: job control turned off
これは、kernel更新する際、block
をautodetect
の前に置くと起動するようになりました。
HOOKS="base udev block autodetect modconf filesystems keyboard fsck"
$ mkinitcpio -p linux
icns
macのbootloaderはosを読み込む際にアイコンを設定できます。boot領域の/
に.volumeicon.icnsを置きます。
$ mount /dev/sdb1 ./boot
$ cp .volumeicon.icns ./boot/
ちなみに、同じアイコンでも表示されないことがあって、権限等の可能性があるかも。正直、よくわかりませんし、icnsもめんどくさすぎる。
https://qiita.com/syui/items/76aebb2e39f40d8cd1e9
wifi
wifi-deviceがない状態なのでdrive, kernelあたりの問題だと思われます。
b43などmodprobeのblacklistに入れてkernelを更新すると、wifi-deviceが立ち上がりました。
blacklist b43
blacklist b43legacy
blacklist bcm43xx
blacklist bcma
blacklist brcm80211
blacklist brcmfmac
blacklist brcmsmac
blacklist ssb
$ pacman -Syu linux-headers broadcom-wl-dkms
$ mkinitcpio -p linux
https://bbs.archlinux.org/viewtopic.php?pid=1862759#p1862759
network
ip固定するので伝統的な名前、eth0とかにする。
$ ln -s /dev/null /etc/systemd/network/99-default.link
今回はnetworkmanagerを入れることにしたんだけど、便利。ただ、自動設定とかは接続は、systemd-networkで書いてる。
xorg
ディスプレイがoffにならないようにする設定。よく忘れる。xset dpms force off
が効かないことある。ただ、これらの設定によってi3が起動しなくなる事があるので注意。
Section "Monitor"
Option "DPMS" "false"
EndSection
Section "ServerLayout"
Identifier "ServerLayout0"
Option "StandbyTime" "0"
Option "SuspendTime" "0"
Option "OffTime" "0"
Option "BlankTime" "0"
EndSection
https://wiki.archlinux.jp/index.php/Display_Power_Management_Signaling
keyboard
xmodmapとかで設定するといいです。xevを使います。訳あってmacbook-airのusを使ってます。本当はjisのほうがいい。
xmodmap: up to 4 keys per modifier, (keycodes in parentheses):
shift Shift_L (0x32), Delete (0x3e)
lock
control Control_L (0x25), Control_L (0x42), Control_R (0x69)
mod1 Alt_L (0x40), Alt_R (0x6c), Meta_L (0xcd)
mod2 Num_Lock (0x4d)
mod3
mod4 Super_L (0x85), Zenkaku_Hankaku (0x86), Super_L (0xce), Hyper_L (0xcf)
mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
gtk
gtk-themeはnumixを採用。
$ yay -S numix-gtk-theme numix-icon-theme-git
$ vim /usr/share/gtk-x.0/
$ cp /usr/share/gtk-2.0/gtkrc ~/.gtkrc-2.0
# GTK+ 2 : ~/.gtkrc-2.0
# GTK+ 3 : ~/.config/gtk-3.0/settings.ini)
https://wiki.archlinux.jp/index.php/GTK
その他の環境
その他の環境としては、i3, xterm, tilix, pcmanfm, chromium, fcitx, yayなどを採用。
xtermも設定が面倒だけど、アイコンとかもフォントを指定すれば使える。
.Xdefaults
,.Xresources
に書く。
XTerm*termName: xterm-256color
XTerm*locale: true
XTerm*selectToClipboard: true
XTerm*saveLines: 2000
XTerm*background: black
XTerm*foreground: white
xterm*faceName: ricomoon
XTerm*faceSize: 13
terminalの透過は、picomで実現します。
$ sudo pacman -S picom
$ sudo cp /etc/xdg/picom.conf ~/.config/picom/
$ sudo vim ~/.config/picom/picom.conf
opacity-rule = [
"90:class_g = 'URxvt' && focused",
"60:class_g = 'URxvt' && !focused",
"90:class_g = 'xterm' && focused",
"60:class_g = 'xterm' && !focused",
"90:class_g = 'tilix' && focused",
"60:class_g = 'tilix' && !focused"
];
$ picom &
あとは、~/.xinitrc
にでも書けばいいでしょう。
vpn
usbを外のパソコンに挿して、ssh先でvpnを起動し、local networkに入ってリモートすることはよくあるので、vpnの構築方法とclientでの接続方法を紹介。
vpnはserverもclientもpritunlが便利すぎるので、そちらを使います。
https://github.com/Fridus/docker-pritunl
$ sudo systemctl start docker
network:
image: busybox
ports:
- "9700:443"
- "1194:1194/udp"
restart: always
tty: true
mongo:
image: mongo
volumes:
- ./mongo:/data/db
restart: always
net: container:network
pritunl:
image: fridus/pritunl
privileged: true
environment:
- MONGO_URI=mongodb://127.0.0.1:27017/pritunl
restart: always
net: container:network
https-portal:
image: steveltn/https-portal:1
ports:
- '443:443'
environment:
STAGE: 'local'
DOMAINS: 'localhost => https://0.0.0.0:9700'
$ sudo docker-compose up -d
で、設定方法は、https://localhost:9700
にアクセスしてwebから行います。user,passwordはpritunl
です。
基本的にはorg,userを作成して、start serverすればokです。userからはprofile(example.vpn)をダウンロードできますが、それを使います。これはopenvpnでも使用できる形式のものです。ただし、localで構築してることもあって、使用する際はdefaultのip,portが異なります。settingから変更した上で、profileをダウンロードすればいいのですけど、.vpn
を修正したほうが早いです。
ここでは、vpn serverのlocal ipを192.168.11.4
とし、global ipを207.97.227.253
とします。wan(外部)からserverにアクセスするにはrouteでポートフォワーディングなどを設定すればいいでしょう。
- remote 192.168.1.4 1194 udp
+ remote 207.97.227.253 ${routeで設定した192.168.11.4:1194に繋がるwan側のport} udp
次に、pritunl clientの話になります。mac,linux,windowsがあります。cliもありますが、cliはちょっと壊れている気がするし、そこまで柔軟でもないので、gotunlを使います。
https://docs.pritunl.com/docs/command-line-interface
基本的には、GUIでprofileをimportしたあと、gotunlで接続操作すればいいでしょう。
$ sudo tee -a /etc/pacman.conf << EOF
[pritunl]
Server = https://repo.pritunl.com/stable/pacman
EOF
$ sudo pacman-key --keyserver hkp://keyserver.ubuntu.com -r 7568D9BB55FF9E5287D586017AE645C0CF8E292A
$ sudo pacman-key --lsign-key 7568D9BB55FF9E5287D586017AE645C0CF8E292A
$ sudo pacman -Sy
$ sudo pacman -S pritunl-client-electron
$ sudo pacman -S pritunl-client-electron-numix-theme
$ pritunl-client-electron
# ここでprofile(example.vpn)をimport
$ git clone https://github.com/cghdev/gotunl.git
$ cd gotunl
$ go install
$ ./${GOPATH}/bin/gotunl -l
$ ./${GOPATH}/bin/gotunl -c 1