+++ 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です。 ```sh $ 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は以下のコマンドで成功(動かないけど)。 ```sh $ 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`の前に置くと起動するようになりました。 ```sh:/etc/mkinitcpio.conf HOOKS="base udev block autodetect modconf filesystems keyboard fsck" ``` ``` $ mkinitcpio -p linux ``` ### icns macのbootloaderはosを読み込む際にアイコンを設定できます。boot領域の`/`に.volumeicon.icnsを置きます。 ```sh $ 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が立ち上がりました。 ```sh:/mnt/etc/modprobe.d/broadcom-wl-dkms.conf blacklist b43 blacklist b43legacy blacklist bcm43xx blacklist bcma blacklist brcm80211 blacklist brcmfmac blacklist brcmsmac blacklist ssb ``` ```sh $ pacman -Syu linux-headers broadcom-wl-dkms $ mkinitcpio -p linux ``` https://bbs.archlinux.org/viewtopic.php?pid=1862759#p1862759 ### network ip固定するので伝統的な名前、eth0とかにする。 ```sh $ ln -s /dev/null /etc/systemd/network/99-default.link ``` 今回はnetworkmanagerを入れることにしたんだけど、便利。ただ、自動設定とかは接続は、systemd-networkで書いてる。 ### xorg ディスプレイがoffにならないようにする設定。よく忘れる。`xset dpms force off`が効かないことある。ただ、これらの設定によってi3が起動しなくなる事があるので注意。 ```sh:/etc/X11/xorg.conf.d/10-monitor.conf 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を採用。 ```sh $ 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`に書く。 ```sh 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で実現します。 ![](https://raw.githubusercontent.com/syui/img/master/other/arch_20210430.png) ```sh $ sudo pacman -S picom $ sudo cp /etc/xdg/picom.conf ~/.config/picom/ $ sudo vim ~/.config/picom/picom.conf ``` ```sh:~/.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" ]; ``` ```sh $ picom & ``` あとは、`~/.xinitrc`にでも書けばいいでしょう。 ### vpn usbを外のパソコンに挿して、ssh先でvpnを起動し、local networkに入ってリモートすることはよくあるので、vpnの構築方法とclientでの接続方法を紹介。 vpnはserverもclientもpritunlが便利すぎるので、そちらを使います。 https://github.com/Fridus/docker-pritunl ```sh $ sudo systemctl start docker ``` ```yml:docker-compose.yml 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' ``` ```sh $ 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でポートフォワーディングなどを設定すればいいでしょう。 ```sh:example.vpn - 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://github.com/cghdev/gotunl)を使います。 https://client.pritunl.com/ https://docs.pritunl.com/docs/command-line-interface 基本的には、GUIでprofileをimportしたあと、gotunlで接続操作すればいいでしょう。 ```sh $ 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 ```