Arch インスコメモ


arch liveのusbメモリからThinkpad x1 carbon 6genにarchをインスコした時の備忘録（UEFIブート）。なお、winは消す

# live USBメディアの作成

公式サイト( https://www.archlinux.org/download/ )からISOのDL
焼くのめんどくさいときはEtcherを使う 
https://www.balena.io/etcher/


ISOのチェックサム

```
$ gpg --keyserver pgp.mit.edu --keyserver-options auto-key-retrieve --verify archlinux-2019.01.01-x86_64.iso.sig
gpg: assuming signed data in 'archlinux-2019.01.01-x86_64.iso'
gpg: Signature made Wed 02 Jan 2019 12:23:53 AM JST
gpg:                using RSA key 4AA4767BBC9C4B1D18AE28B77F2D434B9741E8AC
gpg: requesting key 7F2D434B9741E8AC from hkp server pgp.mit.edu
\gpg: key 7F2D434B9741E8AC: 31 signatures not checked due to missing keys
gpg: key 7F2D434B9741E8AC: public key "Pierre Schmitz <pierre@archlinux.de>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg:               imported: 1
gpg: Good signature from "Pierre Schmitz <pierre@archlinux.de>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 4AA4 767B BC9C 4B1D 18AE  28B7 7F2D 434B 9741 E8AC
```

デバイスの確認（`sdb1`が今回のターゲット）
マウントされていた場合はアンマウントする

```
$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0         7:0    0    13M  1 loop /snap/gnome-characters/124
loop1         7:1    0  14.5M  1 loop /snap/gnome-logs/45
loop2         7:2    0  15.1M  1 loop /snap/aws-cli/135
loop3         7:3    0    13M  1 loop /snap/gnome-characters/139
loop4         7:4    0  42.1M  1 loop /snap/gtk-common-themes/701
loop5         7:5    0  87.9M  1 loop /snap/core/5662
loop6         7:6    0   2.3M  1 loop /snap/gnome-calculator/238
loop7         7:7    0 147.3M  1 loop /snap/skype/66
loop8         7:8    0   2.3M  1 loop /snap/gnome-calculator/260
loop9         7:9    0  34.6M  1 loop /snap/gtk-common-themes/818
loop10        7:10   0  89.5M  1 loop /snap/core/6130
loop11        7:11   0 140.7M  1 loop /snap/gnome-3-26-1604/74
loop12        7:12   0   3.7M  1 loop /snap/gnome-system-monitor/57
loop13        7:13   0 140.9M  1 loop /snap/gnome-3-26-1604/70
sdb           8:16   1   7.5G  0 disk
├─sdb1        8:17   1   1.8G  0 part /media/mike/Ubuntu 18.04.1 LTS amd64
└─sdb2        8:18   1   2.3M  0 part
nvme0n1     259:0    0   477G  0 disk
├─nvme0n1p1 259:1    0   512M  0 part /boot/efi
└─nvme0n1p2 259:2    0 476.4G  0 part /
```

`dev/sdb1` をアンマウントする

```
$ umount /dev/sdb
$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0         7:0    0    13M  1 loop /snap/gnome-characters/124
loop1         7:1    0  14.5M  1 loop /snap/gnome-logs/45
loop2         7:2    0  15.1M  1 loop /snap/aws-cli/135
loop3         7:3    0    13M  1 loop /snap/gnome-characters/139
loop4         7:4    0  42.1M  1 loop /snap/gtk-common-themes/701
loop5         7:5    0  87.9M  1 loop /snap/core/5662
loop6         7:6    0   2.3M  1 loop /snap/gnome-calculator/238
loop7         7:7    0 147.3M  1 loop /snap/skype/66
loop8         7:8    0   2.3M  1 loop /snap/gnome-calculator/260
loop9         7:9    0  34.6M  1 loop /snap/gtk-common-themes/818
loop10        7:10   0  89.5M  1 loop /snap/core/6130
loop11        7:11   0 140.7M  1 loop /snap/gnome-3-26-1604/74
loop12        7:12   0   3.7M  1 loop /snap/gnome-system-monitor/57
loop13        7:13   0 140.9M  1 loop /snap/gnome-3-26-1604/70
sdb           8:16   1   7.5G  0 disk
├─sdb1        8:17   1   1.8G  0 part
└─sdb2        8:18   1   2.3M  0 part
nvme0n1     259:0    0   477G  0 disk
├─nvme0n1p1 259:1    0   512M  0 part /boot/efi
└─nvme0n1p2 259:2    0 476.4G  0 part /

```

ISOを書き込む

```
$ sudo dd bs=4M if=archlinux-2019.01.01-x86_64.iso of=/dev/sdb status=progress && sync                                                        
[sudo] password for mike:
150+1 records in
150+1 records out
631242752 bytes (631 MB, 602 MiB) copied, 105.399 s, 6.0 MB/s
```


# BIOSの設定

- セキュアブートをオフにする  
 Security > Secure boot > Secure boot > Disabled
- USBメモリの起動優先順位を変更する


そしてLive USBから起動する。

# Archのインスコ

ミラーサーバーの国の優先順位を変更
日本とアメリカだと10倍ぐらい速度の差があった

```
# vim /etc/pacman.d/mirrorlist # 日本を最上位に移動する
# head /etc/pacman.d/mirrorlist
...
# Japan
# pacman -Syu # Wifiの設定後でもOK
```

## WiFiの設定

まずインターフェイスの確認
wから始まっているのが往々にして無線のネットワークインターフェイス

```
# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s31f6: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether e8:6a:64:86:78:38 brd ff:ff:ff:ff:ff:ff
3: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
    link/ether 20:79:18:d2:ca:1c brd ff:ff:ff:ff:ff:ff
```

`wlp2s0`が対象のI/F
`ore_ore`という名前(任意)のプロファイルを作る

```
# cp /etc/netctl/examples/wireless-wpa /etc/netctl/ore_ore
# cat /etc/netctl/ore_ore
Description='A simple WPA encrypted wireless connection'
Interface=wlan0
Connection=wireless

Security=wpa
IP=dhcp

ESSID='MyNetwork'
# Prepend hexadecimal keys with \"
# If your key starts with ", write it as '""<key>"'
# See also: the section on special quoting rules in netctl.profile(5)
Key='WirelessKey'
# Uncomment this if your ssid is hidden
#Hidden=yes
# Set a priority for automatic profile selection
#Priority=10
```

`ore_ore` プロファイルを修正する
変更するのは次の3点

1. Interface: WifiのI/F(この場合は`wlp2s0`)
1. ESSID: wifiのSSID
1. Key: WifiのPW

```
# vi /etc/netctl/ore_ore # ゴニョゴニョ
# cat /etc/netctl/ore_ore
Description='A simple WPA encrypted wireless connection'
Interface=wlp2s0
Connection=wireless

Security=wpa
IP=dhcp

ESSID='XXX'
# Prepend hexadecimal keys with \"
# If your key starts with ", write it as '""<key>"'
# See also: the section on special quoting rules in netctl.profile(5)
Key='XXX'
# Uncomment this if your ssid is hidden
#Hidden=yes
# Set a priority for automatic profile selection
#Priority=10

```

Wifiに接続する
pingが通れば成功

```
# netctl start ore_ore # 数秒かかる
# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=121 time=8.90 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=121 time=10.1 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=121 time=10.4 ms
...
```

## パーテーションの設定

(U)EFIかどうか確認
ディレクトリが存在すればOK

```
# ls /sys/firmware/efi/
config_table  efivars  esrt  fw_platform_size  fw_vendor  runtime  runtime-map  systab
```

ドライブを探す
ThinkPad X1 carbonはPCIe SSDなのでインターフェイスの名前は`nvme0n1`で、後ろに`p1`のようにパーテーション番号がつく。

```
$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0         7:0    0    13M  1 loop /snap/gnome-characters/124
loop1         7:1    0  14.5M  1 loop /snap/gnome-logs/45
loop2         7:2    0  15.1M  1 loop /snap/aws-cli/135
loop3         7:3    0    13M  1 loop /snap/gnome-characters/139
loop4         7:4    0  42.1M  1 loop /snap/gtk-common-themes/701
loop5         7:5    0  87.9M  1 loop /snap/core/5662
loop6         7:6    0   2.3M  1 loop /snap/gnome-calculator/238
loop7         7:7    0 147.3M  1 loop /snap/skype/66
loop8         7:8    0   2.3M  1 loop /snap/gnome-calculator/260
loop9         7:9    0  34.6M  1 loop /snap/gtk-common-themes/818
loop10        7:10   0  89.5M  1 loop /snap/core/6130
loop11        7:11   0 140.7M  1 loop /snap/gnome-3-26-1604/74
loop12        7:12   0   3.7M  1 loop /snap/gnome-system-monitor/57
loop13        7:13   0 140.9M  1 loop /snap/gnome-3-26-1604/70
sdb           8:16   1   7.5G  0 disk
├─sdb1        8:17   1   1.8G  0 part /media/mike/Ubuntu 18.04.1 LTS amd64
└─sdb2        8:18   1   2.3M  0 part
nvme0n1     259:0    0   477G  0 disk
├─nvme0n1p1 259:1    0   512M  0 part /boot/efi
└─nvme0n1p2 259:2    0 476.4G  0 part /
```

UEFIブートなので、GPTパーテーションを作る
下のような感じで書き換える

`EF00`はEFIパーテーションHEX
`8E00`は linux LVM (logical volume manager) のHEX
なお、空欄ではEnterキーを押している

```
$ gdisk /dev/nvme0n1
GPT fdisk (gdisk) version 1.0.4

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y

Command (? for help): n
Partition number (1-128, default 1):  
First sector (34-1000215182, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-1000215182, default = 1000215182) or {+-}size{KMGTP}: +512MB
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): EF00
Changed type of partition to 'EFI System'

Command (? for help): n
Partition number (2-128, default 2): 
First sector (34-1000215182, default = 1050624) or {+-}size{KMGTP}: 
Last sector (1050624-1000215182, default = 1000215182) or {+-}size{KMGTP}: 
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8E00
Changed type of partition to 'Linux LVM'

Command (? for help): w
# 最後のコマンドはy、全部書き換える
```

パーテーションの確認

```
$ fdisk -l /dev/nvme0n1
Disk /dev/nvme0n1: 477 GiB, 512110190592 bytes, 1000215216 sectors
Disk model: LENSE30512GMSP34MEAT3TA                 
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: gpt
Disk identifier: 07E88104-29C7-41AE-91AD-379E474EA1C7

Device           Start        End   Sectors   Size Type
/dev/nvme0n1p1    2048    1050623   1048576   512M EFI System
/dev/nvme0n1p2 1050624 1000215182 999164559 476.4G Linux LVM
```

## LVMパーテーションの暗号化

LVMパーテーションの暗号化する
暗号はデフォのLUKSを使用する
パスフレーズは覚えておく

```
# cryptsetup luksFormat /dev/nvme0n1p2 # ※p1ではない
```

## LVMの中に論理ボリュームを作成する

まずは、LVMを復号化して開く
`main_part`は任意のデバイスマッパーネームをつける

```
# cryptsetup open --type luks /dev/nmve0n1p2 main_part
```

LVMの中に物理ボリューム(PV)を作成

```
# pvcreate /dev/mapper/main_part
```

PVの確認

```
# pvscan 
  PV /dev/mapper/cryptlvm   VG main_group      lvm2 [476.43 GiB / 0    free]
  Total: 1 [476.43 GiB] / in use: 1 [476.43 GiB] / in no VG: 0 [0   ]
# pvdisplay
  --- Physical volume ---
  PV Name               /dev/mapper/cryptlvm
  VG Name               main_group
  PV Size               <476.44 GiB / not usable <3.32 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              121967
  Free PE               0
  Allocated PE          121967
  PV UUID               D9rfJy-SqUn-I6Ca-PzzO-eb79-E61t-fHkwmu
```

ボリュームグループ(VG)を作成
`main_group` はVG名 (任意)

```
vgcreate main_group /dev/mapper/main_part
```

VGの確認

```
# vgscan
  Reading volume groups from cache.
  Found volume group "main_group" using metadata type lvm2
# vgdisplay
  --- Volume group ---
  VG Name               main_group
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               3
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               476.43 GiB
  PE Size               4.00 MiB
  Total PE              121967
  Alloc PE / Size       121967 / 476.43 GiB
  Free  PE / Size       0 / 0   
  VG UUID               LiXnT1-xe6V-dmpZ-r7fs-HZF4-14wT-VrFTy5
```

論理ボリュームを(LV)作成
swapはメモリの半分(8GB)割り当てる
rootは64GB割り当てる
homeは残り全部

```
lvcreate -L8G main_group -n swap
lvcreate -L64G main_group -n root
lvcreate -l 100%FREE main_group -n home
```

LVの確認

```
# lvscan
  ACTIVE            '/dev/main_group/swap' [8.00 GiB] inherit
  ACTIVE            '/dev/main_group/root' [64.00 GiB] inherit
  ACTIVE            '/dev/main_group/home' [404.43 GiB] inherit
# lvdisplay
  --- Logical volume ---
  LV Path                /dev/main_group/swap
  LV Name                swap
  VG Name                main_group
  LV UUID                79nm1Z-BCbW-Rhra-tryB-7lR9-XsCv-1jHiQD
  LV Write Access        read/write
  LV Creation host, time archiso, 2019-01-22 13:14:18 +0000
  LV Status              available
  # open                 2
  LV Size                8.00 GiB
  Current LE             2048
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:1
   
  --- Logical volume ---
  LV Path                /dev/main_group/root
  LV Name                root
  VG Name                main_group
  LV UUID                FqcEYQ-0cUp-BMul-VxND-42Es-BHsE-Yj4zdB
  LV Write Access        read/write
  LV Creation host, time archiso, 2019-01-22 13:14:50 +0000
  LV Status              available
  # open                 1
  LV Size                64.00 GiB
  Current LE             16384
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:2
   
  --- Logical volume ---
  LV Path                /dev/main_group/home
  LV Name                home
  VG Name                main_group
  LV UUID                VlSY7x-8Q0O-UFQL-rnQT-05xp-inTH-QLCieR
  LV Write Access        read/write
  LV Creation host, time archiso, 2019-01-22 13:15:09 +0000
  LV Status              available
  # open                 1
  LV Size                404.43 GiB
  Current LE             103535
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:3
  --- Logical volume ---
  LV Path                /dev/main_group/swap
  LV Name                swap
  VG Name                main_group
  LV UUID                79nm1Z-BCbW-Rhra-tryB-7lR9-XsCv-1jHiQD
  LV Write Access        read/write
  LV Creation host, time archiso, 2019-01-22 13:14:18 +0000
  LV Status              available
  # open                 2
  LV Size                8.00 GiB
  Current LE             2048
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:1
   
  --- Logical volume ---
  LV Path                /dev/main_group/root
  LV Name                root
  VG Name                main_group
  LV UUID                FqcEYQ-0cUp-BMul-VxND-42Es-BHsE-Yj4zdB
  LV Write Access        read/write
  LV Creation host, time archiso, 2019-01-22 13:14:50 +0000
  LV Status              available
  # open                 1
  LV Size                64.00 GiB
  Current LE             16384
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:2
   
  --- Logical volume ---
  LV Path                /dev/main_group/home
  LV Name                home
  VG Name                main_group
  LV UUID                VlSY7x-8Q0O-UFQL-rnQT-05xp-inTH-QLCieR
  LV Write Access        read/write
  LV Creation host, time archiso, 2019-01-22 13:15:09 +0000
  LV Status              available
  # open                 1
  LV Size                404.43 GiB
  Current LE             103535
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:3
```


## フォーマットとマウント

LVをフォーマットする
マッピングされているので、次のような名前になる
`/dev/mapper/VG名-LV名`

```
# mkfs.ext4 /dev/mapper/main_group-root
# mkfs.ext4 /dev/mapper/main_group-home
```

スワップも

```
# mkswap /dev/mapper/main_group-swap
```

LVをマウントする
`/mnt/`にマウントする

```
# mount /dev/mapper/main_group-root /mnt/
# mkdir /mnt/home
# mount /dev/mapper/main_group-home /mnt/home
# swapon /dev/mapper/main_group-swap
```

ブートローダーをマウントする

```
# mkdir /mnt/boot/
# mount /dev/nvme0n1p1 /mnt/boot
```

設定し終えるとブロックデバイスはこんな感じ

```
# lsblk
NAME                  MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
nvme0n1               259:0    0   477G  0 disk  
├─nvme0n1p1           259:1    0   512M  0 part  /boot
└─nvme0n1p2           259:2    0 476.4G  0 part  
  └─cryptlvm          254:0    0 476.4G  0 crypt 
    ├─main_group-swap 254:1    0     8G  0 lvm   [SWAP]
    ├─main_group-root 254:2    0    64G  0 lvm   /
    └─main_group-home 254:3    0 404.4G  0 lvm   /home
```

## Archのインスコ

baseとbase-develをインスコする
https://www.archlinux.jp/groups/x86_64/base/
https://www.archlinux.jp/groups/x86_64/base-devel/
この`pacstrap`コマンドでboot以外のフォルダも作られる

```
# pacstrap /mnt/ base base-devel 
```

マウントの設定ファイルを修正
システム起動時に自動的にマウントするため

```
# genfstab -p /mnt >> /mnt/etc/fstab
```

## Archのインスコ (中で作業)

チェンジルートする

```
# arch-chroot /mnt
```

32bitのインテルのドライバーを入れるため
Miltilibを有効化。下の2行をコメントアウトする

```
# vi etc/pacman.conf
[multilib]
Include = /etc/pacman.d/mirrorlist
```


インテルのマイクロコードをインスコ

```
# pacman -Sy intel-ucode
```

マイクロコードを確認 (のちのち再起動後確認できる)

```
# dmesg | grep microcode
[    1.703624] microcode: sig=0x806ea, pf=0x80, revision=0x9a
[    1.703917] microcode: Microcode Update Driver: v2.2.
```

Linuxカーネルのコピーをインスコ

```
# pacman -S linux-headers linux-lts linux-lts-headers
```

## initrdの設定

mkinitcpioはinitrd(initramfs)のイメージを作るためのスクリプト
下の様に修正する

```
# vi /etc/mkinitcpio.conf
HOOKS=(base udev autodetect keyboard keymap modconf block encrypt lvm2 filesystems fsck)
```

initramfsを生成する

```
# mkinitcpio -p linux
# mkinitcpio -p linux-lts # linux-lts をインスコした場合は
```

## ブートローダーの設定

ローダーを作る
GRUBを使わずsystemd-bootを使用する

```
bootctl --path=/boot/ install
```

ローダーの設定をする
下のように編集する

```
# vi /boot/loader/loader.conf
default arch
timeout 3
editor 0 
```

arch.confを作成する
arch.confのXXXの伏せ字を`blkid`のコマンドのUUIDのIDの結果で埋める
PARTUUIDではないので注意する、またクォーテーションは含めない
vi だったらコマンドで (`:r !blkid`) で結果を読み込める

```
# blkid
/dev/nvme0n1p2: UUID="XXX" TYPE="crypto_LUKS" PARTLABEL="Linux LVM" PARTUUID="XXX2"
# vi /boot/loader/entries/arch.conf
title Arch Linux
linux /vmlinuz-linux
initrd /intel-ucode.img # intel マイクロコードを読み込む
initrd /initramfs-linux.img # mkinitcpioで作成したimgを読み込む
options cryptdevice=UUID=XXX:cryptlvm root=/dev/mapper/main_group-root quiet rw
```

## 起動

```
# umount -R /mnt
# shutdown -r now
# # ~起動後~
# # rootでログインできればOK
```

# 再起動後のArchの設定

## WiFi

live USBと同じ


## ミラーリスト

ミラーリストで日本の優先度を一番にする

```
# vi /etc/pacman.d/mirrorlist
```

## 言語

localeの設定

```
# vi /etc/locale.gen
en_US.UTF-8 UTF8 # ←をアンコメントアウト
# localectl set-locale LANG=”en_US.UTF-8”
```

## 時間

time zone を日本に設定

```
tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent, ocean, "coord", or "TZ".
1) Africa                                                            7) Europe
2) Americas                                                          8) Indian Ocean
3) Antarctica                                                        9) Pacific Ocean
4) Asia                                                             10) coord - I want to use geographical coordinates.
5) Atlantic Ocean                                                   11) TZ - I want to specify the timezone using the Posix TZ format.
6) Australia
#? 4
Please select a country whose clocks agree with yours.
1) Afghanistan             9) China                 17) Iraq                  25) Kyrgyzstan            33) Oman                  41) Sri Lanka             49) Vietnam
2) Armenia                10) Cyprus                18) Israel                26) Laos                  34) Pakistan              42) Syria                 50) Yemen
3) Azerbaijan             11) East Timor            19) Japan                 27) Lebanon               35) Palestine             43) Taiwan
4) Bahrain                12) Georgia               20) Jordan                28) Macau                 36) Philippines           44) Tajikistan
5) Bangladesh             13) Hong Kong             21) Kazakhstan            29) Malaysia              37) Qatar                 45) Thailand
6) Bhutan                 14) India                 22) Korea (North)         30) Mongolia              38) Russia                46) Turkmenistan
7) Brunei                 15) Indonesia             23) Korea (South)         31) Myanmar (Burma)       39) Saudi Arabia          47) United Arab Emirates
8) Cambodia               16) Iran                  24) Kuwait                32) Nepal                 40) Singapore             48) Uzbekistan
#? 19

The following information has been given:

        Japan

Therefore TZ='Asia/Tokyo' will be used.
Selected time is now:   Sat Feb  9 16:34:35 JST 2019.
Universal Time is now:  Sat Feb  9 07:34:35 UTC 2019.
Is the above information OK?
1) Yes
2) No
#? 1

You can make this change permanent for yourself by appending the line
        TZ='Asia/Tokyo'; export TZ
to the file '.profile' in your home directory; then log out and log in again.

Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Tokyo

```

ハードウェアクロックの時間のズレを調整

```
# hwclock --systohc --utc
```

## hostname

host名の追加

```
echo archer > /etc/hostname
```

## Pacman

pacman.confに`Color`と`ILoveCandy`を追加
プログレスバーがpacmanに変わる

```
# vi/etc/pacman.conf
# Misc options
#UseSyslog
Color
#TotalDownload
CheckSpace
#VerbosePkgLists
ILoveCandy
```

## ユーザーの追加

rootのPW変更

```
# passwd
```

Sudoerの設定
wheelグループはどんなコマンドも許可

```
# pacman -S sudo
# visudo # 下の2行のコメントを外す

## Uncomment to allow members of group wheel to execute any command
# wheel ALL=(ALL) ALL
```

一般ユーザー追加

```
# useradd -m -G wheel -s /bin/bash mike
# passwd mike
# reboot # 一応mikeユーザーでログインできることを確認する
```

一応仮想コンソール用ユーザーも追加する
mikeはGUI用のユーザーでnekoはCUI用
万が一mikeで問題が発生した時用に

```
# useradd -m -G wheel -s /bin/bash neko
# passwd neko
```

ルートユーザーでログインすることを無効化する

```
$ sudo passwd -l root
```

## Yayのインスコ

```
$ sudo pacman -S git
$ sudo pacman -S make fakeroot # NOTE: これが依存PKG
$ git clone https://aur.archlinux.org/yay.git
$ cd yay
$ makepkg -si
```

## Virtual Console

### keymap

capslockをctrl化する
https://wiki.archlinux.jp/index.php/%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB%E3%81%A7%E3%81%AE%E7%89%B9%E5%88%A5%E3%81%AA%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E3%82%AD%E3%83%BC
もとのキーマップをコピーして新しい設定を作る

```
# mkdir -p /usr/local/share/kbd/keymaps
# cp /usr/share/kbd/keymaps/i386/qwerty/us.map.gz /usr/local/share/kbd/keymaps/
# gunzip /usr/local/share/kbd/keymaps/us.map.gz
```

capslockをctrlに変更

```
# vi /usr/local/share/kbd/keymaps/us.map
...
keycode 58 = Control
```

読み込み

```
# loadkeys /usr/local/share/kbd/keymaps/us.map
```

起動時に読み込みにする場合
下を追記する

```
# vi /etc/vconsole.conf
...
KEYMAP=/usr/local/share/kbd/keymaps/us.map
```

## X

### タッチパッドのドライバー

libinputをインスコする

```
$ pacman -S xf86-input-libinput
```

### Install

インテルドライバーのインスコ

```
# pacman -S xf86-video-intel lib32-intel-dri lib32-mesa lib32-libgl
```

Xのインスコ

```
# pacman -S xorg-server xorg-xinit xorg-apps mesa xterm
```

Xが起動するか確認

```
# startx 
```

### Font


元ネタ https://www.reddit.com/r/archlinux/comments/5r5ep8/make_your_arch_fonts_beautiful_easily/

フォントインスコ

```
$ sudo pacman -S ttf-dejavu ttf-liberation noto-fonts
```

プリセットの作成

```
$ sudo ln -s /etc/fonts/conf.avail/70-no-bitmaps.conf /etc/fonts/conf.d
$ sudo ln -s /etc/fonts/conf.avail/10-sub-pixel-rgb.conf /etc/fonts/conf.d
$ sudo ln -s /etc/fonts/conf.avail/11-lcdfilter-default.conf /etc/fonts/conf.d
```

`/etc/fonts/local.conf`に下のように設定フィアルを作成する
再起動するとフォントがきれいになっている

```
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <match>
        <edit mode="prepend" name="family"><string>Noto Sans</string></edit>
    </match>
    <match target="pattern">
        <test qual="any" name="family"><string>serif</string></test>
        <edit name="family" mode="assign" binding="same"><string>Noto Serif</string></edit>
    </match>
    <match target="pattern">
        <test qual="any" name="family"><string>sans-serif</string></test>
        <edit name="family" mode="assign" binding="same"><string>Noto Sans</string></edit>
    </match>
    <match target="pattern">
        <test qual="any" name="family"><string>monospace</string></test>
        <edit name="family" mode="assign" binding="same"><string>Noto Mono</string></edit>
    </match>
</fontconfig>
    
```

### IME

日本語フォントをインスコする

```
$ pacman -S otf-ipafont
```

Fcitxをインスコする

```
$ pacman -S fcitx fcitx-mozc fcitx-configtool
```

下のように.xinitrcを作成する

```
$ cat .xinitrc 
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=”@im=fcitx” 
```

Fcitx configurationで下のように設定して、
再起動するとIMEが使えるようになる

```
add mozc and prioritize it more over Keyboard English
change default keyboard layout to to English(US)
Global config > show advance options
    active input method = lart
    inactive input method = ralt
```


### ファンクションキー

Fnキーの挙動をインバートするには`Fn+Esc`を押下すればOK
参考 https://bbs.archlinux.org/viewtopic.php?id=233368


### Keymap

capslockを無効化する
ログイン中かえたいなら `setxkbmap -option ctrl:nocaps` でもOK
恒久的に変えたいので、X configuration fileを修正する
`/etc/X11/xorg.conf`を変更せず、自分で設定ファイルを追加する
xorg.confはHWを変更すると壊れやすいため
なお、ファイルの頭の数字は2桁で読み込み順番に関係する
再起動すればXで反映されている

```
# vi /etc/X11/xorg.conf.d/20-keyboard-layout.conf
Section "InputClass"
    Identifier       "keyboard_layout"
    MatchIsKeyboard  "on"
    Option           "XkbLayout"  "us"
    Option           "XkbOptions" "ctrl:nocaps"
EndSection
```


# Thinkpad X1 carbon 6gen用の設定

## 休止状態の設定

もう一度 mkinitcpio.confを編集して`resume` を追加する

```
# vi /etc/mkinitcpio.conf
HOOKS=(base udev autodetect keyboard keymap modconf block encrypt lvm2 resume filesystems fsck)
```

initramfsのイメージを生成する

```
mkinitcpio -p linux
# mkinitcpio -p linux-lts
```

arch.confを以下のように修正する。
`resume=/dev/mapper/main_group-swap` の設定を追加する

```
title Arch Linux
linux /vmlinuz-linux
initrd /intel-ucode.img
initrd /initramfs-linux.img
options cryptdevice=UUID=XXX:cryptlvm root=/dev/mapper/main_group-root resume=/dev/mapper/main_group-swap quiet rw
```

## サスペンドの設定

サポートされているサスペンドの設定の確認

```
# dmesg | grep -i "acpi: (supports"
[    0.979007] ACPI: (supports S0 S4 S5)
```

再起動しBIOSからSleep StateをLinuxに変更する
Config > Power > Sleep State > Linux

Sleep StateをLinuxに変更後
S3が追加されている

```
# dmesg | grep -i "acpi: (supports"
[    1.053591] ACPI: (supports S0 S3 S4 S5)
```

## CPUのクロックスロットリングの問題

パッチを当てる
CPUのクロック数がおかしいときがあるため

```
# aurman -S lenovo-throttling-fix-git
# sudo systemctl enable --now lenovo_fix.service
```

## BIOS更新

現状のバージョン確認
最近買ったので最新だった

https://pcsupport.lenovo.com/us/zh/products/laptops-and-netbooks/thinkpad-x-series-laptops/thinkpad-x1-carbon-6th-gen-type-20kh-20kg/downloads/ds502281

```
# dmidecode -s bios-version
N23ET59W (1.34 )
```

もし、上げる場合は、ファームウェアを更新する
`fwupd`をインスコする

```
# pacman -S fwupd
```

Laptopが電源につなぐ。
BIOSのバージョンあげるのは自己責任で

```
# fwpudmgr refresh 
# fwpudmgr get-updates
# fwupdmgr update
```

## Trim SSD

SSDのTRIMとはHDDでいうデフラグ的なもの
できるか確認。SSDの1行目か2行目に0でない値があれば可能

```
# lsblk --discard
NAME                  DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
nvme0n1                      0      512B       2T         0
├─nvme0n1p1                  0      512B       2T         0
└─nvme0n1p2                  0      512B       2T         0
  └─cryptlvm                 0        0B       0B         0
    ├─main_group-swap        0        0B       0B         0
    ├─main_group-root        0        0B       0B         0
    └─main_group-home        0        0B       0B         0
```

定期的なトリミングを有効化する
Ubuntuでもしていないらしいので、する必要もないのかもしれない？

```
# pacman -S utils-linux
# systemctl enable fstrim.timer
```


# その他

## pacmanのメモ

```
# pacman -S <word> # パッケージインスコ
# pacman -R <word> # パッケージ削除
# pacman -Syy # パッケージリストの更新　(`apt update`)
# pacman -Syyu # パッケージリストの更新とパッケージ更新
# pacman -Ss <word> # wordでパッケージを検索する
# pacman -Qs <word> # wordでローカルでローカルのパッケージを検索する
# pacman -Qsi <word> # Qsの詳細
# pacman -Ql # ローカルのパッケージ一覧
# pacman -Syu # パッケージのアップグレード
```

## 用語
- LVM (Logicl Volume Manager) はブロックデバイスを仮想化する機能。
   - PV（物理ボリューム）: ようするにハードディスクそのもの
   - VG（ボリュームグループ）: ようするにRAIDでいうJBOD（スパニング）
   - LV（論理グループ）: ようするにパーテーション
- ループデバイスは通常のファイルをブロックデバイスとして読み書きできるようにする機能

# References
- https://github.com/ejmg/an-idiots-guide-to-installing-arch-on-a-lenovo-carbon-x1-gen-6#installing-arch-and-setting-it-up-to-boot-and-run
- https://wiki.archlinux.jp/index.php/%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%82%AC%E3%82%A4%E3%83%89
- https://wiki.archlinux.jp/index.php/USB_%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%83%A1%E3%83%87%E3%82%A3%E3%82%A2#BIOS.E3.83.BBUEFI_.E3.83.96.E3.83.BC.E3.82.BF.E3.83.96.E3.83.AB_USB
- https://unix.stackexchange.com/questions/89609/arch-linux-live-usb-no-longer-booting-uefi
- https://wiki.archlinux.jp/index.php/Lenovo_ThinkPad_X1_Carbon
- https://blog.amedama.jp/entry/2015/09/24/142537
- https://piro791.blog.so-net.ne.jp/2008-11-04
- https://qiita.com/MoriokaReimen/items/dbe1448ce6c0f80a6ac1
- https://qiita.com/eup42/items/ea927f83e52f8d504427
- http://lfsbookja.osdn.jp/7.10-systemd/chapter07/console.html
- https://bbs.archlinux.org/viewtopic.php?id=234539
- https://lambdalisue.hatenablog.com/entry/2013/09/27/212118


## その他

openしたLVMをクローズする

```
# cryptsetup close /dev/mapper/main_part
```

### write error failed: No space left on device のエラーが出た時

きれいに

```
# lsblk
# fdisk /dev/nvme0n1 # 全部のパーテーション消すまで繰り返す
d # delete a partition
w
y
# mkfs -t /dev/nvme0n1 # フォーマット
```

また作りなおす

```
# partition bootableは上述の処理と同じ
# 次はカラのパーテーションを作る
```