稼働中のArchを別パーティションにコピーして起動し、 もとのパーティションに再インストールを行った。ハードウェア関連も記載。

準備

  • 時刻あわせぐらいはしておく。
  • pacman -S arch-install-scripts
  • システムを アップデートする(pacman -Syuなど)。
    • 特にカーネルが重要。もし/boot/のカーネル・initramfsと /lib/modules/が不整合になると厄介。
    • 起動できることをチェックしたほうが良い
  • 稼働中のArchを別パーティションにコピー

    rsync -av --one-file-system --delete / /mnt/<先>
    
  • コピー先fstabのデバイスを、コピー先にあわせて書き換え。

  • コピー先の”再インストール前”のシステム起動(以下「旧システム」 あるいは単に「旧」)。

    • ブート時にgrubの編集機能でコピー先をUUIDを使って起動する
    • あるいはブートメニューエントリをコピーして 同じことを行う。この場合、grub-mkconfigを気にしなくて良い。 もし/boot/grub/custom.cfgを使用していないなら、そこにコピーして 編集するとよりシンプル。このファイルはブート時に読み込み・ 解釈される。またgrub-mkconfigにより変更されない。

マウント、pacstrap

  1. インストール先をmkfsし/mntにマウントする。
    • 今回/bootパーティションは使い回す、しばらくの間 書き換えられないように/mnt/bootはマウントせず(mkdirも不要)。
  2. pacstrapする。pacstrap /mnt base base-devel
    • /mnt/bootディレクトリに カーネルとinitramfsが設置された。
      • これらは旧システムと同じ内容のはず。
  3. /mnt/etc/fstabを調整する。 旧からコピーしてデバイスのみ書き換えた

chrootして設定開始

  1. chroot中に旧システムを参照できるよう、バインドしておく。

    mkdir /mnt/old && mount -o ro,bind 旧/ /mnt/old
    
  2. chrootする。

    arch-chroot /mnt
    
  3. rootのパスワードを忘れずに設定する。

    passwd
    
  4. インストールされたカーネルモジュールのバージョンが、稼働中の カーネルと同じであることを確認する。

    uname -r
    ls /lib/modules
    

    違うようなら一旦chrootを抜けて旧システムのカーネルを アップデートし、再起動、chrootし直す。必要なら新システムの カーネルもアップデートする。理由は、

    1. 旧/bootを使いまわしている間、/boot/vmlinuz-*と <新>/lib/modules/*を整合させる必要がある。
    2. モジュールのビルドを行うため、実行中カーネルと/lib、 linux-headersを整合させる必要がある。
  5. インストールガイドに従って/etcを設定する

    • hostname echo "<ホスト名>">/etc/hostname
    • localtime ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
    • vconsole.conf echo "KEYMAP=jp106">/etc/vconsole.conf
    • ロケールはC(今は)
      • locale.conf echo "LANG=C">/etc/locale.conf
      • loceale-gen locale-gen
    • mkinitcpioは、pacstrapの中でされているが、 今回は/bootをマウントしてないので無意味。 最初は旧システムのものに頼る。
  6. 幾つかインストール

    pacman -S rsync git openssh
    pacman -S linux-headers # hid-acerモジュールコンパイル用
    pacman -S wpa_supplicant # 無線LAN用
    
  7. /rootは、旧システムから rsync -aした。 特に.ssh/が重要

    他の主要ユーザーも。(rsyncしやすいようにuid,gidを旧システムと統一するか、uidマッピングを使う)

最低限のデバイスを使用可に

キーボードドック

hid-acerモジュールをインストール(キーボードドックに必要)。

 git clone https://github.com/SWW13/hid-acer.git
 cd hid-acer
 make && make install

これだけ。make installでは、depmodもしてくれる。

LAN, sshd

  1. 無線LAN

    うちでは無線LANが主な接続なので、先に設定する。

    • インターフェース名固定(wlan0)
      /etc/udev/rules.d/79-my-net-names.rules
      ___
      ACTION=="add",SUBSYSTEM=="net",ENV{ID_NET_NAME_MAC}=="wlx004488aaccff",NAME="wlan0"
    

    ファイル名の番号とサフィックス.rulesが重要。

    • wpa_supplicant

    wpa_supplicant-wlan0.confを旧からコピーして、サービスをenableする。

      cp <...>  /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
      systemctl enable wpa_supplicant@wlan0
    

    ファイル名の -wlan0 の部分が、サービス名の @wlan0 に対応する。 これはユニットファイルwpa_supplicant@.service中の記述による。

  2. systemd-networkd

    netctlではなくnetworkd/resolvedを使っている。

    • サービス登録

      systemctl enable systemd-networkd.service
      systemctl enable systemd-resolved.service
      
      • /etc/resolv.confのresolvedへの委託は後で設定する。
      • glibcのresolveを使うので、/etc/nsswitch.confは 書き換えない(hosts: files dns myhostnameのまま)
    • wlan0のネットワーク定義を設置

      vi /etc/systemd/network/my_wifi.network
      ___
      [Match]
      Name=wlan0
      
      [Network]
      DHCP=ipv4
      

      これで、wpa_supplicantによりwlan0がupになったとき、 networkdがdhcpによる設定を行ってくれる。

  3. sshd

sshd.confとホストキーは旧システムからコピーした

   cp -p <旧>/etc/ssh/{sshd_config,ssh_host_*} /etc/ssh/
   systemctl enable sshd

chroot環境を抜けて再起動

  1. grubは当面省略(gptの システムパーティション on /boot/は、既に使用可能)

  2. chroot環境から抜ける

  3. 再起動前に インストール先のresolv.conf を systemd-resolvedに任せる

    # ln -sf /run/systemd/resolve/resolv.conf /mnt/etc/resolv.conf
    
  4. 再起動

システム設定

ジャーナルサイズ制限を変更

   vi /etc/systemd/journald.conf
   ___
    :
   SystemMaxUse=50M
    :

50Mは小さすぎるが、遅いSDカードを使っているため、当面こうしておく。

一般ユーザー (gid, uid指定)

旧システムとgid,uidをそろえると rsyncが簡単。

   groupadd -g <gid> <g名>
   useradd -g <gid> -u <uid> <u名>
   passwd  <u名>
   usermod -aG wheel <u名>
sudo

sudoersは前の内容をコピー(visudo中に)。主に%wheel ALL=(ALL) ALLを使う。

   pacman -S sudo
   visudo
makepkg設定
   /etc/makepkg.conf
   ___
    :
   MAKEFLAGS="-j4"
    :

ソフトウェア導入

yaourt
   vi /etc/pacman.conf
   ___
   [archlinuxfr]
   SigLevel = Never
   Server = http://repo.archlinux.fr/$arch
   ___
   pacman --sync --refresh yaourt
X
   pacman -S xorg-server xorg-server-utils xf86-video-intel xorg-apps

xf86-video-intelは、デフォルトのアクセラレーション であるSNAだとlightdm+onboardとlight-lockerで不具合がでたので、 古いほうのUXAを指定した。

   vi /etc/X11/xorg.conf/20-intel.conf
   ___
   Section "Device"
      Identifier  "Intel Graphics"
      Driver      "intel"
      #Option      "AccelMethod"  "sna"
      Option      "AccelMethod"  "uxa"
   EndSection
xfce4
pacman -S xfce4 xfce4-goodies

軽い。 新ユーザーだと、手で操作しても平均3.5sで起動からログアウトまでできる。

$ time startx
Real     0m3.579s
 :

いろいろインストールした後、元のメインユーザーを旧からコピーしたら、4~4.5s

日本語フォント
yaourt -S ttf-ricty otf-takao
タイプヒンティング抑制
vi /etc/fonts/conf.avail/71-no-embedded-bitmaps.conf
___
<!--
コメントなど
-->
<fontconfig>
  <match target="font">
    <edit mode="assign" name="embeddedbitmap">
      <bool>false</bool>
    </edit>
    <edit mode="assign" name="hintstyle">
       <const>hintnone</const>
    </edit>
  </match>
</fontconfig>
___
ln -s ../conf.avail/71-no-embedded-bitmaps.conf /etc/fonts/conf.d/71-no-embedded-bitmaps.conf
onboard

lightdmでも使うので早めに。

pacman -S onboard

フローティングキーラベルを短時間化する改造は後で。

lightdm
pacman -S lightdm  lightdm-gtk-greeter

greeterの設定はonboard+ 大きな文字(/etc/lightdm/lightdm-gtk-greeter.conf)

keyboard=onboard
a11y-states=font;keyboard

DMサービス登録

systemctl enable lightdm.service

マニュアルでonboardをスイッチするには [F3]キー。なぜかonboardオンで 立ち上がったとき、onboardが一瞬表示された後、消える。プロセスとしては 動いている。lightdmもonのつもりになっている。→fcitx関連をインストールしたら、 なぜか消えなくなった。→と思ったら毎回違う。

日本語入力
pacman -S fcitx-im fcitx-configtool fcitx-mozc fcitx-anthy

lightdmは かなり初期のうちに~/.xprofileを実行する。 /etc/X11/xinit/xinitrc.dよりも先。なので環境変数はここに書いた。

 :
rt GTK_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"
export QT_IM_MODULE=fcitx
 :

対照的に、~/.xsessionは最後の方、デスクトップ環境の セッションの直前に実行される(/etc/lightdm/Xsession参照)。 Xを必要とするものはここに書くことにした。 * synclient とsyndaemon(入力調整) * touchegg * その他 xfce4にかかわらず実行したいターミナルソフトなどを & をつけてバックグラウンドで。

gvfs
pacman -S gvfs gvfs-afc gvfs-nfs gvfs-smb

しかし、今のところ Xのセッションで勝手に起動される gvfsdを 次のように置き換え(-r)ないと、 マウントに成功しても /run/user//gvfsに反映されない。

/usr/lib/gvfs/gvfsd -r &
lv
yaourt -S lv
alsa

まず HDMIのintel_hdaがデフォルトサウンドカードにならないよう、デバイスの順番を変更する。

cat > /etc/modprobe.d/hda_intel_enum_reorder.conf
# avoid useless HDMI to be default device
options snd_hda_intel index=1
^D

コンソールミキサーも使いたいので、pacman -S alsa-utils

grub
pacman -S grub os-prober efibootmgr

/etc/default/grub を旧からコピー

grub-installなどはしばらく後で。

nfs
pacman -S nfs-utils
systemctl enable rpcbind.service
systemctl enable nfs-client.target
systemctl mask nfs-blkmap.target
autofs
pacman -S autofs

auto.miscを旧からコピーした。

systemctl enable auto.misc

マウントポイントへのsymlink作成 ln -s /misc/pstorage /var/xfertemp/pstorage ln -s /misc/backup /var/backup

ブラウザ

opera以外にfirefoxとchromiumも入れておく。

   pacman -S opera
   pacman -S firefox-i18n-ja chromium
   yaourt -S chromium-pepper-flash-dev

chromium を開いて chrome://plugins ページ詳細で libpepperflashplayer.so のFlashPlayerが有効になっていることを確認。

…以前、operaで、タッチスクリーンかタッチパッドのゼスチャーで 滑らかにズームできていたような気がする。

bluetooth
pacman -S bluez bluez-utils blueberry
オフィス、メール
  • libreoffice-fresh-ja
  • pacman -S thunderbird-i18n-ja
電源
yaourt -S laptop-mode-tools

TODO: /etc/laptop-mode/conf.dのファイル

オプションの依存:acpid bluez-utils hdparm sdparm ethtool wireless_tools xorg-xset python2-pyside

pacman -S acpid hdparm sdparm ethtool
pacman -S cpupower
ネット
yaourt -S connect
pacman -S iptstate

pacman -S wget ntp iw rdesktop tcpdump
systemctl enable ntpd.service

yaourt -S libreswan
開発
  • abs
  • dos2unix
その他システム
pacman -S  arch-install-scripts acpi logrotate cryptsetup minicom dosfstools dar

yaourt -S  jfbterm uim anthy

yaourt -S profile-sync-daemon

アクセサリ

PKGBUILDで makedepends=('npm')を足す。

yaourt -S nodejs-livedown

マルチメディア

yaourt -S smplayer smtube audacious cmus ffmpeg libmad libmp4v2 libvorbis

カメラ。

yaourt -S guvcview

お遊び

yaourt -S inkscape azdrawing xournal pinta

ビルド重い * krita

その他検討中

cpi azdrawing bluedevil blueman grub + efibootmgr + os-prober dar | yaourt hdparm 9.48-1 (多分laptop-modeの依存) jfbterm-git | yaourt kiconedit | yaourt krita | yaourt libreswan | yaourt nodejs-livedown | yaourt pdnsd pinta ppp pppconfig profile-sync-daemon xss-lock xt7-player-mpv-git xrdp-git

設定ファイル

オートサスペンド禁止

タイムラグとデータ(イベント?)欠落の問題があるため、
以下のデバイスはオートサスペンドさせないことにした。
  • タッチスクリーン

タッチスクリーン接続元のi2c_designware、 カーネルデバイス名”INT33C3:00” はデフォルトで オートサスペンドされるので、udevルールで 常時onに変更する。

  vi /etc/udev/rules.d/91-acer-touchscreen.rules
  ___
  ACTION=="add|change", KERNEL=="INT33C3:00", SUBSYSTEM=="platform", DRIVER=="i2c_designware", TEST=="power/control", ATTR{power/control}:="on"

さらにlaptop-modeを使用するなら、オートサスペンドonに 書き換えられないよう、ブラックリスト登録する。

  vi /etc/laptop-mode/conf.d/runtime-pm.conf
  ___
  AUTOSUSPEND_RUNTIME_DEVTYPE_BLACKLIST="i2c_designware"
  • キーボード+タッチパッド

USBデバイスなので、ベンダ・プロダクトIDをつかって laptop-modeにオートサスペンドのブラックリスト登録を行う。

  vi /etc/laptop-mode/conf.d/runtime-pm.conf
  ___
  # prevent USB-autosuspend for keybord and touchpad
  AUTOSUSPEND_RUNTIME_DEVID_BLACKLIST="06CB:2991"

フラッシュメディアの スケジューラ

HDD向けの最適化は無駄なので、ノー・オペレーション noop にする。

vi /etc/udev/rules.d/60-scheduler.rules
___
ACTION=="add|change", SUBSYSTEM=="block", ATTRS{model}=="LITEON IT L8T-64", ATTR{queue/scheduler}="noop"
ACTION=="add|change", SUBSYSTEM=="block", KERNEL=="mmcblk*", ATTR{queue/scheduler}="noop"

サスペンド/レジューム後、タッチスクリーンが死ぬ

hid-multitouch を再度読み込むと直る。 rmmod hid-multitouch; modproble hid-multitouch

これをスクリプトに書いて、systemdのサスペンド/レジュームフックとして設置する。 レジュームでは引数1に “post”が渡される

```
vi /usr/lib/systemd/system-sleep/reinit_touchscreen.sh
___
#!/bin/sh
#ohi  /usr/lib/systemd/systemd-sleep/ohi_reinit_touchscreen
case $1/$2 in
  post/*)
  rmmod hid_multitouch ; modprobe hid_multitouch
  ;;
esac
___
chmod +x /usr/lib/systemd/system-sleep/reinit_touchscreen.sh
```

/usr/lib/systemd/system-sleep/ohi_acer_reinit_touchscreen bashスクリプトで hid_multitouch 再読み込み (rmmod;modprobe) タッチスクリーンがレジューム後にとまるため。 case $1/$2 in post/*) ; DO_IT ;; esac

libreswan /etc/ipsec.*

/etc/sysctl.d/*

/etc/udev/rules.d

  • LANアダプタの名前固定

  • キーボードドックのUSBオートサスペンド禁止(ドックの度に必要) ACTION==“add”, SUBSYSTEM==“platform”, DRIVER==“i2c_designware”, TEST==“power/control”, ATTR{power/control}:=“on”