本稿は、Let's Note CF-SZ6 に Debian GNU/Linux Stretch をインストールした時の備忘録です。
Debian GNU/Linux のインストール
https://www.disk-partition.com/jp/articles/shrink-volume-beyond-half-its-size.html などの記述にしたがい、以下の手順で Windows10 がインストールされている領域を縮小。
- システムの保護を無効に設定し、復元ポイントを全て削除
- 仮想メモリページングファイル(
C:\Pagefile.sys
)を削除1 - デフラグを実行
- ディスクの管理ツールで、ボリュームの縮小を実行
- 仮想メモリページングファイルとシステムの保護の設定を元に戻す
Windows10 の領域を約 60GB まで縮小して、Debian をインストールする領域を用意した。
Device Start End Sectors Size Type
/dev/sda1 2048 534527 532480 260M EFI System
/dev/sda2 534528 567295 32768 16M Microsoft reserved
/dev/sda3 567296 125223588 124656293 59.5G Microsoft basic data
/dev/sda4 125224960 126896127 1671168 816M Windows recovery environment
/dev/sda5 1968951296 2000408575 31457280 15G unknown
/dev/sda6 126896128 127395839 499712 244M Linux filesystem
/dev/sda7 127395840 1937747967 1810352128 863.2G Linux filesystem
/dev/sda8 1937747968 1968951295 31203328 14.9G Linux swap
後は、PANASONIC のロゴが表示されている間に F2 キーを叩いて、BIOS メニューに入り、USB から起動すればインストーラが走る2。普通にインストーラを実行していけば、UEFI が自動検出されて、以下のように自動的にマルチブートな設定でインストールされる。MBR よりも楽だなあと初めて思った。
# efibootmgr
BootCurrent: 0007
Timeout: 2 seconds
BootOrder: 0007,0000,0001,0004,0002,0003
Boot0000* Windows Boot Manager
Boot0001* Recovery Partition
Boot0002* UEFI: PXE IP4 Intel(R) Ethernet Connection (4) I219-LM
Boot0003* UEFI: PXE IP6 Intel(R) Ethernet Connection (4) I219-LM
Boot0004* Windows Recovery Environment
Boot0007* debian
同じ状態のはずの CF-SX3 を、Recovery Partition から起動して Windows7 専用機に復元しようとしたが、失敗した。リカバリデータが格納されている /dev/sda5 は変更していなかったはずなのだが。/dev/sda6〜8 を削除してから復元を試みる必要があった可能性がある。次回は注意すること。
各種設定
ネットワーク
無線LAN
Intel のドライバは non-free で配布されているので、最初に non-free のパッケージを sources.list に追加.
deb http://ftp.jp.debian.org/debian/ stretch main contrib non-free
deb-src http://ftp.jp.debian.org/debian/ stretch main contrib non-free
deb http://security.debian.org/debian-security stretch/updates main contrib non-free
deb-src http://security.debian.org/debian-security stretch/updates main contrib non-free
# stretch-updates, previously known as 'volatile'
deb http://ftp.jp.debian.org/debian/ stretch-updates main contrib non-free
deb-src http://ftp.jp.debian.org/debian/ stretch-updates main contrib non-free
その上で、firmware-iwlwifi をインストール。
# apt update
# apt install firmware-iwlwifi
初回時のみ、iwlwifi を再ロードして初期化する(またはシステム全体を再起動する)。
# modprobe -r iwlwifi
# modprobe iwlwifi
firmware: failed to load iwlwifi-8265-26.ucode (-2)
Direct firmware load for iwlwifi-8265-26.ucode failed with error -2
firmware: failed to load iwlwifi-8265-25.ucode (-2)
Direct firmware load for iwlwifi-8265-25.ucode failed with error -2
firmware: failed to load iwlwifi-8265-24.ucode (-2)
Direct firmware load for iwlwifi-8265-24.ucode failed with error -2
firmware: failed to load iwlwifi-8265-23.ucode (-2)
Direct firmware load for iwlwifi-8265-23.ucode failed with error -2
firmware: direct-loading firmware iwlwifi-8265-22.ucode
loaded firmware version 22.361476.0 op_mode iwlmvm
上記のように failed というメッセージがかなり出てくるので少し心配になるが、最終的に iwlwifi-8265-22.ucode を読み込むことができていて、動作には支障ないようだ。
なお、CF-SV8 に搭載されている Cannon Point-LP CNVi という無線 LAN アダプタの場合は、Debian 10 (buster) で用意されている firmware-iwlwifi パッケージでは動かない。backports.debian.org のリポジトリを有効化して、buster-backports の firmware-iwlwifi パッケージをインストールする必要がある。
# apt -t buster-backports install firmware-iwlwifi
外部からの通信を全て拒否する
サーバ目的として使うマシンではないので、外部からの全てのパケットは拒否するよう設定しておく。iptables-persistent をインストール。
# apt install iptables-persistent
以下のような設定ファイル /etc/iptables/rules.v4 および /etc/iptables/rules.v6 を用意。なお、v197 以後の systemd は NIC に対して、eth0 などの旧来の名前の代わりに、enp2s0 などの名前を割り当てるため、iptables で指定するインタフェース名も従来とは変化しているので、少々注意が必要。
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i enp+ -m state --state INVALID,NEW -j DROP
-A INPUT -i wlp+ -m state --state INVALID,NEW -j DROP
-A FORWARD -i enp+ -m state --state INVALID,NEW -j DROP
-A FORWARD -i wlp+ -m state --state INVALID,NEW -j DROP
COMMIT
設定ファイルを読み込ませる。
# service netfilter-persistent reload
Bluetooth
buleman をインストールして、適当にペアリング。
# apt install blueman
VPN over SSH
従来は vpnc を使っていたが設定が面倒だったので、sshuttle に変更した。まず、sshuttle パッケージをインストール。
# apt install sshuttle
以下のようにコマンドを実行しておくと、指定されたサブネットの範囲については sshuttle を経由して接続するようになる。
$ sshuttle -D -r ユーザ名@サーバ名 AAA.BBB.CCC.DDD/XXX
先に iptables の設定をせずに sshuttle を使おうとすると、
ssh connection to server (pid 14783) exited with returncode 255
という謎のエラーで接続に失敗することがある。デバッグメッセージを出力させても、まったく手がかりが得られずに苦労したのだが、あきらめて先に iptables の設定をしたら接続できるようになった。
省電力設定
ディスプレイを閉じた時にサスペンドするように変更
「アプリケーション」→「設定」→「電源管理」で設定できる。
バッテリー充電管理
バッテリーの過充電を避けるために,tlp をインストールしておく.
# apt install tlp
# systemctl enable tlp
# systemctl start tlp
CPU の周波数スケーリング
バッテリ稼働時間を延ばすには、負荷状況に応じて CPU の周波数を変更する設定が重要。従来は cpufreq デーモンのインストールなどが必要だったが、Linux 3.4 以後はカーネルモジュールで自動的に行われるようだ。
# apt install linux-cpupower
# cpupower frequency-info
として、CPU の周波数制御が powersave モードで行われるようになっている点を確認しておく。
デスクトップ設定
CapsLock キーを Control キーとして動作するようにする
以下を記述して,CapsLock を完全に Control キーとして動作するようにする.
XKBMODEL="pc105"
XKBLAYOUT="jp"
XKBVARIANT=""
XKBOPTIONS="ctrl:nocaps"
タッチパッドでタップした時に、クリックと同じ働きをするようにする
xserver-xorg-input-synaptics をインストールする。
# apt install xserver-xorg-input-synaptics
その上で、synclient コマンドを起動する度に呼び出すように設定する。各種の流儀があるが、XFCE を利用している場合は、以下のように XFCE 用の xinitrc を書き換えておくのが楽だろう。
#!/bin/sh
if [ -z "${DISPLAY}" ]; then
prog=xinit
else
prog=/bin/sh
fi
# Enable tap actions on a touchpad.
if ( grep -q synaptics /var/log/Xorg.0.log ); then
if [ -x /usr/bin/synclient ]; then
/usr/bin/synclient TapButton1=1 LBCornerButton=2 RBCornerButton=3 MaxTapTime=140 \
SingleTapTimeout=140 MaxDoubleTapTime=140 VertEdgeScroll=1
fi
fi
exec ${prog} /etc/xdg/xfce4/xinitrc $*
ビープ音が鳴らないようにする
日本語入力
emacs-mozc mozc-fcitx をインストール。
Let's Note 本体のキーボードは日本語配列なので、Happy Hacking Keyboard などの英語配列の USB 外付けキーボード使う場合などは、キー配列を切り替えて使う必要が生じる。fcitx-imlist コマンドを使うと、簡単に切り替えられるようになる。
;; インストール済みのキーボード配列を調べる
$ fcitx-imlist -l
fcitx-keyboard-us (キーボード - 英語 (US)) [enabled]
fcitx-keyboard-jp (キーボード - 日本語) [enabled]
mozc (Mozc) [enabled]
;; 英語配列を優先する
$ fcitx-imlist -s us
;; 日本語配列を優先する
$ fcitx-imlist -s jp
その他
etckeeper
# apt install etckeeper
git-lfs
nextcloud-client
リポジトリを追加.
deb http://ppa.launchpad.net/nextcloud-devs/client/ubuntu zesty main
リポジトリ署名の公開鍵を追加,nextcloud-client をインストール.
# apt-key adv --recv-key --keyserver keyserver.ubuntu.com AD3DD469
# apt update
# apt install nextcloud-client
[2022/06/13追記] Debian bullseyeでは、本家パッケージリポジトリにnextcloud-desktop
が入ったので、上記設定は不要。単に以下のようにすれば良い。
# apt install nextcloud-desktop
他のマシンと同一のパッケージ構成にする
元のマシンで以下のコマンドを実行すると、インストール済みパッケージ一覧が得られるので、このパッケージ一覧を使って、新しいマシンに一気に同じパッケージをインストールすれば良い。
$ dpkg --get-selections
しかし、元のマシンと、新しいマシンとで Debian のバージョンが異なっていたりすると、単にパッケージ一覧を使っても「そんなパッケージは存在しないよ」というエラーでインストールできない。
そのような場合は、not_depeneded_packages.pl を使って、他のパッケージによって依存されていないパッケージの一覧を作成し、その一覧に含まれるパッケージのインストールを試みると楽。
時刻合わせ
[2022/06/13追記] Debian bullseyeでは、従来の ntpd
の代わりに systemd-timesyncd
が利用できる。
まず、ハードウェアCMOSクロックの設定を確認するために timedatectl
コマンドを実行する。
# timedatectl status
Local time: 月 2022-06-13 22:12:48 JST
Universal time: 月 2022-06-13 13:12:48 UTC
RTC time: 月 2022-06-13 22:12:48
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: no
NTP service: n/a
RTC in local TZ: yes
Warning: The system is configured to read the RTC time in the local time zone.
This mode cannot be fully supported. It will create various problems
with time zone changes and daylight saving time adjustments. The RTC
time is never updated, it relies on external facilities to maintain it.
If at all possible, use RTC in UTC by calling
'timedatectl set-local-rtc 0'.
警告にしたがって、ハードウェアCMOSクロックにはUTCを設定するように設定を変更する。
# timedatectl set-local-rtc 0
# timedatectl status
Local time: 月 2022-06-13 22:13:23 JST
Universal time: 月 2022-06-13 13:13:23 UTC
RTC time: 月 2022-06-13 13:13:23
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: no
NTP service: n/a
RTC in local TZ: no
次に systemd-timesyncd
をインストールする。
# apt install systemd-timesyncd
/etc/systemd/timesyncd.conf
の NTP=
の行を編集して ntp.nict.jp
を参照するように設定しておく.
diff --git a/systemd/timesyncd.conf b/systemd/timesyncd.conf
index e74c0f6..a8b93d9 100644
--- a/systemd/timesyncd.conf
+++ b/systemd/timesyncd.conf
@@ -12,7 +12,7 @@
# See timesyncd.conf(5) for details.
[Time]
-#NTP=
+NTP=ntp.nict.jp
#FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
systemd-timesyncd
を再起動後に、以下のような結果が得られれば、正常に動作(時刻同期)している。
# systemctl restart systemd-timesyncd
# timedatectl status
Local time: 月 2022-06-13 22:39:05 JST
Universal time: 月 2022-06-13 13:39:05 UTC
RTC time: 月 2022-06-13 22:39:05
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
# timedatectl timesync-status
Server: 2001:df0:232:eea0::fff4 (ntp.nict.jp)
Poll interval: 8min 32s (min: 32s; max 34min 8s)
Leap: normal
Version: 4
Stratum: 1
Reference: NICT
Precision: 1us (-20)
Root distance: 0 (max: 5s)
Offset: +62.526ms
Delay: 17.242ms
Jitter: 35.790ms
Packet count: 7
Frequency: -48.092ppm
TODO
- 残設定
- ICカード
- MultiArch
- 暗号化ボリューム
- 最初に、空の領域全体を暗号化ボリュームに設定する。
- 次に、論理ボリューム(LVM)の設定を行う。先に作成した暗号化ボリューム全体を、ボリュームグループに登録する。そのボリュームグループから、/ 用の論理ボリュームと、スワップ用の論理ボリュームを切り出す。
- このように設定すると、起動時の暗号化パスフレーズの入力が1回で済むようになる。
- 「ディスク全体を使って暗号化ボリュームの設定を行う」を選べば、同じような手順になるのだが、そうするとWindowsの回復領域などが破壊されてしまうので、手作業で設定する必要がある。
- secure boot
- CF-SV8 では UEFI の secure boot が有効になっているので,所有者の個人鍵(Machine Owner Key; MOK)を登録して,MOK を使って kernel module に署名してやる必要がある(署名しないと、kernel module が load できず、例えば virtualbox の利用時に問題になる)。手順は、 https://stegard.net/2016/10/virtualbox-secure-boot-ubuntu-fail/ を参照。
- CF-SR4では、なぜか secure boot に失敗し、BIOS 設定で secure boot を無効化する必要があった。https://gihyo.jp/admin/serial/01/ubuntu-recipe/0444 で解説されている通り、shim ブートローダが挟まっているのだが。
-
スタートメニュー→Windowsシステムツール→コントロールパネルと辿って、コントロールパネルを開く。次に、コントロールパネルから、システムとセキュリティ→システムと辿って、システムの詳細設定をクリックして、システムのプロパティを開く。次に、詳細設定タブ→パフォーマンスの設定→詳細設定タブ→仮想メモリの変更と辿って、「すべてのドライブのページングファイルを自動的に管理する」チェックボックスを外し、「ページングファイルなし」チェックボックスにチェックして、設定ボタンをクリックする。 ↩
-
高速起動が有効になっていると、F2 キーを叩いても無視されるらしい。Windows10 であれば、Windows キーを押しながら x を押してメニューを出し、電源オプションを選択。そこで高速起動を無効化すると、F2 キーが使えるようになる。 ↩