1
0
hugo/content/blog/2021-04-30-arch.md

295 lines
9.1 KiB
Markdown
Raw Normal View History

2024-04-23 13:21:26 +00:00
+++
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
```