TUIで動作するPython製のscriptを見かけたので試してみました.
カテゴリー: sid
cpu情報を表示するcpufetch
cpufetchというscreenfetchインスパイアな感じのcpu情報表示ツールを見かけたので試してみました.
$ git clone https://github.com/Dr-Noob/cpufetch
$ cd cpufetch
$ make
$ ./cpufetch -s retro
################
####### #######
#### ####
### #### Name: Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz
### ### Microarchitecture: Ivy Bridge
### ### Technology: 22nm
# ### ### ### Max Frequency: 3.300 GHz
## ### ######### ###### ###### ### ### Cores: 2 cores (4 threads)
## ### ### ### ### #### #### ### ### AVX: AVX
## ### ### ### ### ### ### ### ### FMA: No
## ### ### ### ### ########## ### #### L1i Size: 32KB (64KB Total)
## ### ### ### ### ### ### ##### L1d Size: 32KB (64KB Total)
## ## ### ### ##### ######### ## ### L2 Size: 256KB (512KB Total)
### L3 Size: 3MB
### Peak Performance: 52.80 GFLOP/s
#### ####
##### ##########
########## ################
###############################
標準のスタイルでテキストで貼り付けると真っ白になるので retro
です.通常の実行結果は以下に.
Rust製のCLI電子メールクライアントのHimaraya
Rust製のCLI電子メールクライアントのHimarayaというものを見かけたので少し試してみました.
Himarayaは単体ではCLIのクライアントでバッチ的に利用できます.VIm/Neovimのプラグインを使うとTUIで直感的に操作できるようになるようです.
Windows/macOS/Linux(amd64)はリリースページからバイナリが入手できます.今回はLinux amd64環境で試しました.
$ wget https://github.com/soywod/himalaya/releases/download/v0.2.2/himalaya-linux.tar.gz (1)
$ tar tvf ./himalaya-linux.tar.gz (2)
-rwxr-xr-x runner/docker 9090192 2021-04-05 00:50 himalaya.exe
$ tar xf ./himalaya-linux.tar.gz (3)
$ sudo install -m 755 ./himalaya.exe /usr/local/bin/himaraya (4)
$ rm ./himalaya.exe
$ mkdir ~/.config/himalaya (5)
$ vi ~/.config/himalaya/config.toml (6)
$ cat ~/.config/himalaya/config.toml
name = "Kenichiro Matohara"
downloads-dir = "~/.config/himalaya/gmail/"
signature = "Regards,"
[matoken_gmail]
default = true
email = "matoken@gmail.com"
imap-host = "imap.gmail.com"
imap-port = 993
imap-login = "matoken@gmail.com"
imap-passwd-cmd = "gpg2 --no-tty -q -d ~/.msmtp-password-gmail2.gpg"
smtp-host = "smtp.gmail.com"
smtp-port = 487
smtp-login = "matoken@gmail.com"
smtp-passwd-cmd = "gpg2 --no-tty -q -d ~/.msmtp-password-gmail2.gpg"
- Linuxリリースバイナリのダウンロード
- アーカイブの内容確認
- アーカイブの展開
/usr/local/bin
にhimaraya
として導入- 設定ファイルディレクトリの作成
- 設定ファイル作成
設定ファイルは README.md
にgmailの例が書かれているので,imap4/smtpの場合はそのまま真似すると良さそうです.
設定ファイルのパスワード部分の imap-passwd-cmd
, smtp-passwd-cmd
は平分でも書けるようですが,コマンドが書けるのでmsmtpで使っているgpg2のものを使いました.opensslなども使えます.パスワードマネージャを使っても良さそうです.
$ himaraya list
UID |FLAGS |SUBJECT |SENDER |DATE
403387 | |[oss-security] CVE-2021-29136: umoci: malicious … |Aleksa Sarai |2021-04-06 11:13:14
403386 | |[oss-security] Django: CVE-2021-28658: Potential… |Mariusz Felisiak |2021-04-06 09:10:32
403385 | |Ingress Damage Report: Entities attacked by taar… |Niantic Project Operations |2021-04-06 07:52:16
403384 | |Ingress Damage Report: Entities attacked by taar… |Niantic Project Operations |2021-04-06 07:52:14
403383 | |Ingress Damage Report: Entities attacked by taar… |Niantic Project Operations |2021-04-06 07:52:15
403382 | |CPUのコアを増やせば、コア間の通信が増え処理速度が上がらないのではありませんか? |Quoraダイ
ジェスト |2021-04-06 06:35:23
403381 | |In October, you had 4.8K users visit your websit… |Google Analytics |2021-04-05 22:44:18
403380 | |Daily activity summary for Nextcloud |Nextcloud |2021-04-05 21:30:06
403379 | |Re: [oss-security] Risk of local privilege escal… |Leo Famulari |2021-04-05 20:20:55
403378 | |Re: [oss-security] Risk of local privilege escal… |Leo Famulari |2021-04-05 20:19:15
いくつかのコマンドを使いバッチ的にメールボックスを操作できます.しかし普通のMUAとして使うには面倒です.
Vim/Neovimのプラグインを使うとTUIで利用できるらしいので試してみます.
Note |
※前提条件として,vim-plugが使える状態になっている必要があります. junegunn/vim-plug: Minimalist Vim Plugin Manager |
$ echo "Plug 'soywod/himalaya', {'rtp': 'vim'}" >> ~/.vimrc
Vimの設定ファイルの ~/.vimrc
にHimaraya pluginを追記します.
vimを起動して, :PlugInstall
を実行してHimaraya Pluginを導入します.
その後,Vimの中で :Himaraya
で起動します.
Himarayaの設定ができていればそのままTUIで使えるようになります :)
今の時点ではあまり使いやすくはなくAlpineやMutt/NeoMuttのほうが良さそうです.でも開発も活発そうなのでこれからに期待したいです.
ところで名前の Himaraya は山つながりで Alpine のインスパイアなのでしょうか?
$ himalaya --version
himalaya 0.2.2
$ dpkg-query -W vim gpg
gpg 2.2.27-1
vim 2:8.2.2434-3
$ lsb_release -dr
Description: Debian GNU/Linux bullseye/sid
Release: unstable
$ arch
x86_64
dnsクエリをスパイする dnspeep
dnspeep
というRust製のdnsのクエリ内容を表示するプログラムを知ったので少し試してみました.
GitHubのReleaseページにLinux x86_64とmacOS x86_64のバイナリが置いてあるのでその環境だとそれをダウンロードして会伊藤するだけで使えます.他の環境では cargo build
すればいいのかな?
$ wget https://github.com/jvns/dnspeep/releases/download/v0.1.1/dnspeep-linux.tar.gz
$ tar tvf ./dnspeep-linux.tar.gz
-rwxr-xr-x runner/docker 5570536 2021-04-02 06:20 dnspeep
$ file dnspeep
dnspeep: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=a917041c223b18db709ff3c563ee1a6a3c82ba6e, for GNU/Linux 3.2.0, with debug_info, not stripped
$ ./dnspeep -h|xsel
Usage: ./dnspeep [options]
Options:
-p, --port PORT port number to listen on
-f, --file FILENAME read packets from pcap file
-h, --help print this help menu
What the output columns mean:
query: DNS query type (A, CNAME, etc)
name: Hostname the DNS query is requesting
server IP: IP address of the DNS server the query was made to
response: Responses from the Answer section of the DNS response (or "<no response>" if none was found).
Multiple responses are separated by commas.
$ sudo ./dnspeep
query name server IP response
A tweetdeck.twitter.com. 192.168.1.102 CNAME: td.twitter.com., A: 104.244.42.132, A: 104.244.42.4, A: 104.244.42.68, A: 104.244.42.196
:
libpcapからパケットを引っ張ってdnsのクエリを整形して出力しているようです.こんな感じでtcpdumpでもいいのですが,dnsに特化しているのでオプションとか覚えなくていいのはいいですね.
$ sudo tcpdump -i eth0 udp port 53 or tcp port 53
dnspeep v0.1.1
$ dpkg-query -W libpcap0.8 tcpdump libpcap0.8:amd64 1.10.0-2 libpcap0.8:i386 1.10.0-2 tcpdump 4.99.0-2 $ lsb_release -dr Description: Debian GNU/Linux bullseye/sid Release: unstable $ arch x86_64
標準入力の結果をシームレスに選択してクリップボードにコピーする「yank」
ターミナルからの標準入力の結果をシームレスに選択してクリップボードにコピーしてくれる yank
というコマンドを知りました.
yankは各種環境のパッケージが用意されています.
Debian sid amd64 / Ubuntu 21,04 amd64 / Raspberry Pi OS buster armhf では yank
というパッケージで提供されているのでこれを導入します.
$ sudo apt install yank (1)
$ yank (2)
bash: yank: command not found
$ dpkg -L yank | grep bin/ (3)
/usr/bin/yank-cli
yank
パッケージを導入- yankコマンドが見つからない
- Debian系では名前空間の衝突のためにコマンド名が
yank-cli
になっている.
とりあえず導入できましたが,Debian環境だと yank
コマンドが見つかりません.他のパッケージと名前が競合してしまっているので yank-cli
として提供されているようです.
The binary is installed at /usr/bin/yank-cli due to a naming conflict.
$ apt-file search /bin/yank
emboss: /usr/bin/yank
yank: /usr/bin/yank-cli
競合しているのはなんds楼と検索してみると emboss
というパッケージのようです.
ヨーロッパ分子生物学オープンソフトウェアスイート
EMBOSS は、分子生物学のユーザコミュニティ (例: EMBnet) のために開発された オープンソースな解析用ソフトウェアパッケージです。このソフトウェアを 使うことで、様々なフォーマットで書かれたデータを自動的に処理したり、 ウェブから配列データを透過的に取得したりもできます。また、このパッケージには 拡張ライブラリが含まれているので、真のオープンソース精神に則って ソフトウェアを開発しリリースできるプラットフォームです。 さらに、EMBOSS は様々な配列解析用パッケージやツールとシームレスに 統合されています。EMBOSS は、長く続いた商用パッケージソフトウェアへの流れを 断ち切ったのです。
なかなか熱そうなプロジェクトのようです.
使わないならalias等でyankに向けてもいいかもしれません.
とりあえず導入出来たので試してみます.
$ apt-cache search yank | yank-cli
elpa-csv-mode - Emacs major mode for editing comma/char separated values
python3-readlike - GNU Readline-like line editing module
yank - interactively select and yank terminal output to stdout or xsel
apt-cache search の結果を yank で受けてカーソルなどで単語単位で移動してEnterで選択した部分をクリップボードにコピーします.
クリップボード貼付けをするとたしかにコピーされていました.
例えばパッケージ名をコピーして, $ sudo apt install \`xsel\`
のようにして使うと便利そうです.
その他便利そうなオプションとして, -d
があります.cutコマンドの-dと同じようにデリミタが指定できます.
$ nkf -w mntemsadext00_rct.csv | yank-cli -d,
こんな感じでcsvファイルに ,
を指定してあげると,各項目がコピーできます.
しかし,yankはページ跨ぎが出来ないようです.1ページ目のものしかコピーできません.こういう場合はyankに渡す前にフィルタしてあげるといいようです.grepや,昨日このblogで紹介したyankと同じ作者の「pick」もこういうときに便利です.
$ nkf -w mntemsadext00_rct.csv | grep 田代 | yank-cli -d,`
$ nkf -w mntemsadext00_rct.csv | pick | yank-cli -d,`
なにかの結果の一部が欲しいときに便利そうです.
$ dpkg-query -W yank pick pick 2.0.2-1 yank 1.1.0-2 $ lsb_release -dr Description: Raspbian GNU/Linux 10 (buster) Release: 10 $ uname -m armv7l $ cat /proc/device-tree/model ;echo Raspberry Pi 3 Model B Rev 1.2
$ dpkg-query -W yank pick pick 2.0.2-1.1 yank 1.2.0-1 $ lsb_release -dr Description: Debian GNU/Linux bullseye/sid Release: unstable $ uname -m x86_64
コマンドライン標準入力からあいまい検索が出来る「pick」
コマンドラインの標準入力をあいまい検索してその結果を主治力出来るpickというコマンドを知ったので試してみました.
たくさんの環境パッケージがあります.今回はDebian sid amd64とRaspberry Pi OS buster armhfで pick
パッケージを導入しました.
$ sudo apt install pick (1)
$ ls ~/Downloads/*.pdf | wc -l (2)
181
$ ls ~/Downloads/*.pdf | pick | xargs -I{} xpdf "{}" (3)
rpi (4)
/home/matoken/Downloads/rpi_DATA_CM_3p0.pdf
/home/matoken/Downloads/rpi_MECH_3b_1p2.pdf
/home/matoken/Downloads/RPi-Camera-User-Manual.pdf
/home/matoken/Downloads/rpi_SCH_3b_1p2_reduced.pdf
/home/matoken/Downloads/rpi_SCH_4b_4p0_reduced.pdf
/home/matoken/Downloads/rpi_SCH_ZeroW_1p1_reduced.pdf
/home/matoken/Downloads/RPi_Pi Pico_Digital Edition.pdf
pick
パッケージ導入- pdfファイルがたくさんある
- lsの結果をpickを挟んでxpdfに渡す
- 「rpi」とキーワードを入力することで絞り込まれる
上下カーソル入力で結果を選択,Enterで確定.確定された行はSTDOUTに出力され,今回の例では xpdf で開かれる.
コマンド結果が多くて grep を繋いでいくみたいなときに pick を使うとインタラクティブに絞り込まれたりしてわかりやすいです.
似たものに sysbox の choose-stdin というものもあります.
$ dpkg-query -W pick
pick 2.0.2-1.1
$ lsb_release -dr
Description: Debian GNU/Linux bullseye/sid
Release: unstable
$ uname -m
x86_64
$ dpkg-query -W pick pick 2.0.2-1 $ lsb_release -dr Description: Raspbian GNU/Linux 10 (buster) Release: 10 $ uname -m armv7l $ cat /proc/device-tree/model ;echo Raspberry Pi 3 Model B Rev 1.2
Raspberry Pi の OSイメージを書き込む Raspberry Pi Imager v1.6 の新機能で書き込み時にカスタマイズ
Raspberry Pi で利用するストレージへのOSイメージ書き込みツールのRaspberry Pi Imagerの最新版のv1.6がリリースされたようです.
自分は出た当初少し試しただけで他のツールに比べて嬉しいことがあまりないと感じたので使っていなかったのですが,このv1.6ではイメージのカスタマイズ機能が入ったようなので試してみました.
Raspberry Pi Imagerの導入
$ sudo apt install rpi-imager
Raspberry Pi OSであればパッケージが存在するのでこれを導入すればokです.
Linux/Windows/macOSはGitHubのreleaseページから入手できます.
若しくは,Raspberry Pi downloadsページにもあります.こちらだとGutHubとファイル名が違いますがamd64の.debをdiffしてみると同じもので署名ファイルもあります..AppImageもありますが試してみると最新ではないようでした.
$ wget https://github.com/raspberrypi/rpi-imager/releases/download/v1.6/rpi-imager_1.6_amd64.deb (1)
$ wget https://downloads.raspberrypi.org/imager/imager_1.6_amd64.deb https://downloads.raspberrypi.org/imager/imager_1.6_amd64.deb.sig (2)
$ diff ./imager_1.6_amd64.deb ./rpi-imager_1.6_amd64.deb (3)
$ gpg2 --verify ./imager_1.6_amd64.deb.sig (4)
gpg: assuming signed data in './imager_1.6_amd64.deb'
gpg: Signature made Tue 16 Mar 2021 08:56:51 PM JST
gpg: using RSA key 54C3DD610D9D1B4AF82A37758738CD6B956F460C
gpg: Good signature from "Raspberry Pi Downloads Signing Key" [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: 54C3 DD61 0D9D 1B4A F82A 3775 8738 CD6B 956F 460C
$ gpg2 --verify ./imager_1.6_amd64.deb.sig ./rpi-imager_1.6_amd64.deb
gpg: Signature made Tue 16 Mar 2021 08:56:51 PM JST
gpg: using RSA key 54C3DD610D9D1B4AF82A37758738CD6B956F460C
gpg: Good signature from "Raspberry Pi Downloads Signing Key" [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: 54C3 DD61 0D9D 1B4A F82A 3775 8738 CD6B 956F 460C
$ sudo apt install ././imager_1.6_amd64.deb (5)
- GitHubからダウンロード
- downloads.raspberrypi.orgからダウンロード
- ファイル名は違うけど同じ内容なのを確認
- 署名確認
- インストール
Debian sid amd64環境ではAppImageが古いので.debを導入しました.
Imagerの起動と書き込み設定
Raspberry Pi ロゴのアイコンの「Imager」や, rpi-imager
を実行すると起動します.
ここで,「ctrl + shift + x」を押すことで今回のカスタマイズ用の拡張オプション画面が表示されます.
今回はhostnameの修正,SSHの有効化,ssh公開鍵の登録,Wi-Fi 設定,タイムゾーンの設定を行いました.
「SAVE」して「RASPBERRY PI OS LITE (32-BIT)」を書き込んでみました.
書き込みが終了しても1つ目のパーティション(/boot)がマウントされたままでした.これはバグかな?(1回しか試していないので勘違いかもしれない)
$ mount | grep /dev/mmcblk0p1 (1)
/dev/mmcblk0p1 on /media/matoken/boot type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)
$ sudo umount /dev/mmcblk0p1 (2)
- 1つ目のパーティションがマウントされたまま
- アンマウントする
カスタマイズ内容確認
書き込まれたメディアの中を見ると /boot/firstrun.sh
が作成されていました.Raspberry Pi Imagerは直接設定を書き換えるわけではなく,OSイメージを書き込んだあと子のファイルを作って,Raspberry Pi OSの初回起動時にこのscriptを実行して設定を反映していくようです.
#!/bin/bash
set +e
CURRENT_HOSTNAME=`cat /etc/hostname | tr -d " \t\n\r"`
echo raspberrypi-custom >/etc/hostname
sed -i "s/127.0.1.1.*$CURRENT_HOSTNAME/127.0.1.1\traspberrypi-custom/g" /etc/hosts
FIRSTUSER=`getent passwd 1000 | cut -d: -f1`
FIRSTUSERHOME=`getent passwd 1000 | cut -d: -f6`
install -o "$FIRSTUSER" -m 700 -d "$FIRSTUSERHOME/.ssh"
install -o "$FIRSTUSER" -m 600 <(echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPgwY9aZPxN/YoBBzd7TOcCk7EuGO0E9PuUjCHPtTuHP mk@x220") "$FIRSTUSERHOME/.ssh/authorized_keys"
echo 'PasswordAuthentication no' >>/etc/ssh/sshd_config
systemctl enable ssh
cat >/etc/wpa_supplicant/wpa_supplicant.conf <<WPAEOF
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
ap_scan=1
update_config=1
network={
ssid="matoken"
psk="○○○○○○○○○○○○"
}
WPAEOF
chmod 600 /etc/wpa_supplicant/wpa_supplicant.conf
rfkill unblock wifi
for filename in /var/lib/systemd/rfkill/*:wlan ; do
echo 0 > $filename
done
rm -f /etc/xdg/autostart/piwiz.desktop
rm -f /etc/localtime
echo "Asia/Tokyo" >/etc/timezone
dpkg-reconfigure -f noninteractive tzdata
cat >/etc/default/keyboard <<KBEOF
XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT=""
XKBOPTIONS=""
KBEOF
dpkg-reconfigure -f noninteractive keyboard-configuration
rm -f /boot/firstrun.sh
sed -i 's| systemd.run.*||g' /boot/cmdline.txt
exit 0
ちょっと雑かなと感じるところもありますが便利な感じです.
( /etc/wpa_supplicant/wpa_supplicant.conf
は wpa_passphrase
コマンドを通してpskにしておきたいとか)
自分はsd card書き込み前にPCでマウントしてパッケージを最新にしたりインストールしたりといったことをしているので,sd card書き込みをしなくてもこのファイルを書き出してくれると嬉しいかなと思いました.
アンインストール
$ sudo apt purge rpi-imager
$ rm -r ~/.config/Raspberry\ Pi/Imager.conf ~/.cache/Raspberry\ Pi/Imager
パッケージを削除して,設定ファイルとキャッシュを削除しました.
環境
$ dpkg-query -W rpi-imager
rpi-imager 1.6
$ lsb_release -dr
Description: Debian GNU/Linux bullseye/sid
Release: unstable
$ uname -m
x86_64
Debian で Linux Kernel の initramfs の圧縮形式を変更する🐧🗜️
先日「Debian sidでLinux Kernel(5.11)をbuildするメモ 」を書いたのですが,Twitterで@henrichさんからこんなメッセージが.
/bootの容量のためにはinitramfsの圧縮をgzipからxzやzstdにするのもありですね
— henrich (@henrich) March 23, 2021
そういえば圧縮形式色々あったなと試してみました.
現在の圧縮形式を確認する
$ grep COMPRESS /etc/initramfs-tools/initramfs.conf
# COMPRESS: [ gzip | bzip2 | lz4 | lzma | lzop | xz | zstd ]
COMPRESS=gzip
$ file --mime-type /boot/initrd.img-`uname -r`
/boot/initrd.img-5.11.8+: application/gzip
設定は gzip
で,実際のファイルもgzipになっています.
圧縮形式は gzip
以外に bzip2, lz4, lzma, lzop, xz, zstd
が選べるようです.
圧縮形式の比較
$ ls -1sS --block-size=1 ./initrd.img-5.11.8+.*
183033856 ./initrd.img-5.11.8+.raw
81076224 ./initrd.img-5.11.8+.lz4
78315520 ./initrd.img-5.11.8+.lzop
54329344 ./initrd.img-5.11.8+.gzip
51761152 ./initrd.img-5.11.8+.zstd
50081792 ./initrd.img-5.11.8+.bz2
36548608 ./initrd.img-5.11.8+.xz
36540416 ./initrd.img-5.11.8+.lzma
容量がどのくらいになるのか各アーカイバで圧縮してみました.
$ \time -f %e cat ./initrd.img-5.11.8+.raw > /dev/null
0.03
$ \time -f %e lz4cat ./initrd.img-5.11.8+.lz4 > /dev/null
0.38
$ \time -f %e lzop -d -c ./initrd.img-5.11.8+.lzop > /dev/null
0.42
$ \time -f %e zstdcat ./initrd.img-5.11.8+.zstd > /dev/null
0.44
$ \time -f %e zcat ./initrd.img-5.11.8+.gzip > /dev/null
1.38
$ \time -f %e lzma -d -c ./initrd.img-5.11.8+.lzma > /dev/null
3.22
$ \time -f %e xzcat ./initrd.img-5.11.8+.xz > /dev/null
3.37
$ \time -f %e bzcat ./initrd.img-5.11.8+.bz2 > /dev/null
9.39
展開時間も確認してみました.
圧縮形式 | 圧縮データ量(byte) | 展開時間(秒) |
---|---|---|
raw | 183033856 | 0.03 |
lz4 | 81076224 | 0.38 |
lzop | 78315520 | 0.43 |
gzip | 54329344 | 1.38 |
zstd | 51761152 | 0.44 |
bzip2 | 50081792 | 9.39 |
xz | 36548608 | 3.37 |
lzma | 36540416 | 3.22 |
圧縮データの圧縮率などは既定値のままで,展開時間は \time -f %e zcat ./initrd.img-5.11.8+.gzip > /dev/null
若しくは \time -f %e lzma -d -c ./initrd.img-5.11.8+.lzma > /dev/null
のようにして測りました.
サイズでは raw > lz4 ≒ lzop > gzip ≒ zstd ≒ bz2 > xz ≒ lzma な感じで,
展開速度は bz2 > xz ≒ lzma > gzip > zstd ≒ lzop ≒ lz4 > raw な感じです.
Caution | 時間についてはデスクトップ環境で色々動いている状態で1回しか測っていないので目安程度にしてください. |
Caution | ここでは既定値で圧縮しましたが,zstd, lz4, xzについてはinitramfs作成時に圧縮オプションなどが既定値と違うようなので目安程度にしてください. |
容量的にはxz, lzmaが良さそうですが展開時間がとても増えそうです.zstdはgzipより速くて小さくなって良さそうです.
ということでzstdにしてみます.
initramfsを zstd で作り直す
$ sudo git -C /etc diff HEAD /etc/initramfs-tools/initramfs.conf
diff --git a/initramfs-tools/initramfs.conf b/initramfs-tools/initramfs.conf
index 01bdd85..a0c051b 100644
--- a/initramfs-tools/initramfs.conf
+++ b/initramfs-tools/initramfs.conf
@@ -41,7 +41,7 @@ KEYMAP=n
# COMPRESS: [ gzip | bzip2 | lz4 | lzma | lzop | xz | zstd ]
#
-COMPRESS=gzip
+COMPRESS=zstd
#
# DEVICE: ...
/etc/initramfs-tools/initramfs.conf
を編集して, COMPRESS
を zstd
に変更します.
$ update-initramfs -h
Usage: update-initramfs {-c|-d|-u} [-k version] [-v] [-b directory]
Options:
-k version Specify kernel version or 'all'
-c Create a new initramfs
-u Update an existing initramfs
-d Remove an existing initramfs
-b directory Set alternate boot directory
-v Be verbose
See update-initramfs(8) for further details.
$ sudo update-initramfs -k `uname -r` -u -v
update-initramfs
で更新を行います.
$ ls -s --block-size=1 /boot/initrd.img-5.11.8+
54542336 /boot/initrd.img-5.11.8+
$ ls -s --block-size=1 /boot/initrd.img-5.11.8+
41611264 /boot/initrd.img-5.11.8+
$ file --mime-type /boot/initrd.img-5.11.8+
/boot/initrd.img-5.11.8+: application/zstd
$ zstd -lv /boot/initrd.img-5.11.8+
*** zstd command line interface 64-bits v1.4.8, by Yann Collet ***
/boot/initrd.img-5.11.8+
# Zstandard Frames: 1
Window Size: 8.00 MB (8388608 B)
Compressed Size: 39.53 MB (41446437 B)
Decompressed Size: 174.55 MB (183032320 B)
Ratio: 4.4161
Check: XXH64
出来上がったファイルを確認すると zstd
になっていました.
再起動しても問題ありませんでした :)
上で確認した容量より大分小さ唸っているのは圧縮レベルの差でしょうか?
initramfs圧縮レベルの確認
$ grep zstd /usr/sbin/mkinitramfs
zstd) compress="zstd -q -19 -T0" ;;
update-initramfs
から呼ばれる mkinitramfs
を確認するとzstdの圧縮レベルオプションは -19
で最高圧縮率でした.(既定値は -3
)
$ \time -f%e zstdcat -T1 /boot/initrd.img-5.11.8+ > /dev/null
0.50
その分展開時間も少し伸びていそうです.
case "${compress}" in
gzip) # If we're doing a reproducible build, use gzip -n
if [ -n "${SOURCE_DATE_EPOCH}" ]; then
compress="gzip -n"
# Otherwise, substitute pigz if it's available
elif command -v pigz >/dev/null; then
compress=pigz
fi
;;
lz4) compress="lz4 -9 -l" ;;
zstd) compress="zstd -q -19 -T0" ;;
xz) compress="xz --check=crc32"
# If we're not doing a reproducible build, enable multithreading
test -z "${SOURCE_DATE_EPOCH}" && compress="$compress --threads=0"
;;
bzip2|lzma|lzop)
# no parameters needed
;;
*) echo "W: Unknown compression command ${compress}" >&2 ;;
esac
周りを見てみると, lz4
は -9
で最高( -12
)ではないけど既定値( 1
)より圧縮率を高くしてあります.xzには整合性チェックがオプションがあるけど容量にはあまり関係ないかな?
その他は既定値のようです.
$ count=1;while [[ $count -lt 19 ]];do zstdcat /boot/initrd.img-5.11.8+ | zstd -T0 -$count -c - > /tmp/zstd-$count.zstd;count=$(( $count+1 ));done
$ ls -1sS --block-size=1 /tmp/zstd-*
56188928 /tmp/zstd-1.zstd
53272576 /tmp/zstd-2.zstd
51761152 /tmp/zstd-3.zstd
51466240 /tmp/zstd-4.zstd
50061312 /tmp/zstd-5.zstd
49614848 /tmp/zstd-6.zstd
47431680 /tmp/zstd-7.zstd
46690304 /tmp/zstd-8.zstd
46424064 /tmp/zstd-9.zstd
45973504 /tmp/zstd-10.zstd
45850624 /tmp/zstd-11.zstd
45686784 /tmp/zstd-12.zstd
45539328 /tmp/zstd-13.zstd
45371392 /tmp/zstd-14.zstd
45309952 /tmp/zstd-15.zstd
44093440 /tmp/zstd-16.zstd
42987520 /tmp/zstd-17.zstd
41705472 /tmp/zstd-18.zstd
41447424 /tmp/zstd-19.zstd
$ ls -1S /tmp/zstd-* | xargs -I{} -n1 sh -c "echo -n \"{} \"; \time -f%e zstdcat -T0 {} > /dev/null"
/tmp/zstd-1.zstd 0.37
/tmp/zstd-2.zstd 0.36
/tmp/zstd-3.zstd 0.40
/tmp/zstd-4.zstd 0.47
/tmp/zstd-5.zstd 0.44
/tmp/zstd-6.zstd 0.42
/tmp/zstd-7.zstd 0.40
/tmp/zstd-8.zstd 0.37
/tmp/zstd-9.zstd 0.35
/tmp/zstd-10.zstd 0.40
/tmp/zstd-11.zstd 0.41
/tmp/zstd-12.zstd 0.38
/tmp/zstd-13.zstd 0.39
/tmp/zstd-14.zstd 0.39
/tmp/zstd-15.zstd 0.43
/tmp/zstd-16.zstd 0.37
/tmp/zstd-17.zstd 0.42
/tmp/zstd-18.zstd 0.53
/tmp/zstd-19.zstd 0.68
圧縮レベルごとの容量と展開時間はこんな感じになりました.色々動いている環境なのでおかしそうなところがありますが大体の目安として.
Kernel build時の動作
Kernel 5.11.9 が来ていたのでビルドしてみました.
$ wget https://cdn.kernel.org/pub/linux/kernel/v5.x/incr/patch-5.11.8-9.xz
$ cd linux-5.11
$ xzcat ../patch-5.11.8-9.xz | patch -p1
$ grep ^COMPRESS= /etc/initramfs-tools/initramfs.conf
COMPRESS=zstd
$ time make -j`nproc` bindeb-pkg
$ ls -1sS ../*5.11.9*
737300 ../linux-image-5.11.9+-dbg_5.11.9+-5_amd64.deb
59584 ../linux-image-5.11.9+_5.11.9+-5_amd64.deb
8040 ../linux-headers-5.11.9+_5.11.9+-5_amd64.deb
1124 ../linux-libc-dev_5.11.9+-5_amd64.deb
8 ../linux-5.11.9+_5.11.9+-5_amd64.buildinfo
4 ../linux-5.11.9+_5.11.9+-5_amd64.changes
$ sudo apt install ../linux-image-5.11.9+_5.11.9+-5_amd64.deb ../linux-headers-5.11.9+_5.11.9+-5_amd64.deb ../linux
-libc-dev_5.11.9+-5_amd64.deb
$ file /boot/initrd.img-5.11.9+
/boot/initrd.img-5.11.9+: Zstandard compressed data (v0.8+), Dictionary ID: None
$ ls --block-size=1 -s /boot/initrd.img-5.11.9+
41602048 /boot/initrd.img-5.11.9+
$ sudo shutdown -r now 'kernel upgrade'
問題なく zstd になりました.
参考URL
Debianのinitramfsの圧縮形式をzstdにしようというバグレポート.bullseyeはフリーズされているので入らない.
環境
$ dpkg-query -W initramfs-tools-core zstd
initramfs-tools-core 0.140
zstd 1.4.8+dfsg-2.1
$ lsb_release -dr
Description: Debian GNU/Linux bullseye/sid
Release: unstable
$ uname -srm
Linux 5.11.9+ x86_64
XScreenSaverと動画視聴時のスクリーンセーバー抑制
こちらのフォーラムに回答したのですが,色々余計なことも書きたかったのでここに書いておきます.
XScreenSaverの自分の大体の設定,動画視聴時のスクリーンセーバー抑制についてです.ここではXScreenSaverの説明ですが,GnomeやKDE,Cinnamonなどでもコマンドを置き換えることでほぼ同じように使えるはずです.
Note |
例えばGnome ScreenSaverの場合 xscreensaver-command を gnome-screensaver-command に置き換える |
2021-03-25追記)
XScreenSaver FAQ を見ると,XScreenSaver 5.45以降はFirefox, Chrome, Chromium, MPV, VLCでの動画視聴時にスクリーンセーバーが抑制されるようになっているようです.確認すると,xprintidleはカウントされますがスクリーンセーバーは抑制されるといった動作になっているようです.
XScreenSaverの設定
$ sudo apt install xscreensaver
xscreensaver
パッケージを導入します.
$ dpkg-query -W xscreensaver*
xscreensaver 5.45+dfsg1-1
xscreensaver-data 5.45+dfsg1-1
xscreensaver-data-extra 5.45+dfsg1-1
xscreensaver-gl 5.45+dfsg1-1
xscreensaver-gl-extra 5.45+dfsg1-1
xscreensaver-screensaver-bsod 5.45+dfsg1-1
xscreensaver-screensaver-dizzy 0.3-3.1
いろいろなスクリーンセーバーを使いたい場合その他のパッケージも導入します.
設定は xscreensaver-demo
で行えます.
私は,いくつかのスクリーンセーバーを有効にして,Modeを Random Screen Saver
にして選択したスクリーンセーバーがランダムに起動するようにしています.
その他スクリーンセーバー起動時にロックするようにしています.離席時に他の人が触りにくくなります.
- Blank After
- 指定した時間経過後スクリーンセーバー起動
- Lick Screen After
- スクリーンセーバー起動後指定時間でロックする(スクリーンセーバー解除時にパスワードが必要)
xscreensaver-command でスクリーンセーバー制御
xscreensaver-command
というコマンドで制御が出来ます.私がよく使うオプションはこのあたりです.
- -activate
- スクリーンセーバーを有効にします
- -deactivate
- スクリーンセーバーを解除します
- -lock
- 画面をロックします
1文字の省略形のオプションもありますが,manやhelpには載っていないので使わないほうがいいかもしれません.
私はこのコマンドで離席時画面をロックするためにキーボードショートカットに登録したり,以前は BlueProximity というソフトウェアでBluetoothデバイスを身につけてそれを持ったまま離席してある程度離れると画面をロックするというのに使っていました.(最近のDebian ではなくなっていたり,今使っているスマートフォンは少電力機能のせいかすぐロックされてしまうようになって今は使っていません.)
Alt+l
)でスクリーンロックする例. -- lock screen
awful.key({ "Mod1" }, "l", function () awful.util.spawn( "xscreensaver-command -lock",false) end),
xprintidleを見ながらスクリーンセーバー起動確認
スクリーンセーバーの設定を行って正しく起動するかを確認するとき xprintidle
コマンドが便利です.
xprintidle is a utility that queries the X server for the user's idle time and prints it to stdout (in milliseconds).
Xサーバーのアイドル時間を表示してくれるコマンドです.単位はミリ秒です.
$ watch xprintidle
watch コマンドなどで定期的に呼ぶようにしてスクリーンセーバーの起動を待つとわかりやすいです.
mpvでスクリーンセーバー抑制
--stop-screensaver, --no-stop-screensaver Turns off the screensaver (or screen blanker and similar mechanisms) at startup and turns it on again on exit (default: yes). The screensaver is always re-enabled when the player is paused. This is not supported on all video outputs or platforms. Sometimes it is implemented, but does not work (especially with Linux "desktops").
mpvにはスクリーンセーバー抑制オプションがありました.
$ echo 'alias mpv="mpv --stop-screensaver"' >> ~/.bashrc
$ source ~/.bashrc
$ alias | grep mpv
alias mpv='mpv --stop-screensaver'
alias や
$ cp /usr/share/applications/mpv.desktop ~/.local/share/applications/
$ vi ~/.local/share/applications/mpv.desktop
$ diff -u1 /usr/share/applications/mpv.desktop ~/.local/share/applications/mpv.desktop
--- /usr/share/applications/mpv.desktop 2020-08-13 05:52:09.000000000 +0900
+++ /home/matoken/.local/share/applications/mpv.desktop 2021-03-24 22:15:59.037232611 +0900
@@ -31,3 +31,3 @@
TryExec=mpv
-Exec=mpv --player-operation-mode=pseudo-gui -- %U
+Exec=mpv --stop-screensaver --player-operation-mode=pseudo-gui -- %U
Terminal=false
デスクトップファイルに設定しておくと良さそうです.
mplayerでスクリーンセーバー抑制
-heartbeat-cmd Command that is executed every 30 seconds during playback via system() - i.e. using the shell. NOTE: MPlayer uses this command without any checking, it is your responsibility to ensure it does not cause security problems (e.g. make sure to use full paths if "." is in your path like on Windows). It also only works when playing video (i.e. not with -novideo but works with -vo null). This can be "misused" to disable screensavers that do not support the proper X API (also see -stop-xscreensaver). If you think this is too complicated, ask the author of the screensaver program to support the proper X APIs. EXAMPLE for xscreensaver: mplayer -heartbeat-cmd "xscreensaver-command -deactivate" file EXAMPLE for GNOME screensaver: mplayer -heartbeat-cmd "gnome-screensaver-command -p" file
mplayerには -heartbeat-cmd
というオプションがあります.mpvと同じようにaliasやデスクトップファイルを編集しておくと便利です.
lightsOnスクリプトでスクリーンセーバー抑制
mpvやmplayerでは抑制できましたが,ウェブブラウザ等で動画閲覧時に抑制できません.そういうときに便利なのが lightsOn
です.
各種動画プレイヤーや,ウェブブラウザでFlash/HTML5ビデオ再生時にスクリーンセーバーを抑制してくれます.これを使うと上のmpv/mplayerの設定も不要になります.
$ wget https://raw.githubusercontent.com/kodx/lightsOn/master/lightsOn.sh
$ chmod u+x ./lightsOn.sh
$ ./lightsOn.sh
とりあえず実行すればokです.
しかし手元の環境では xprop: unable to open display ':0.0'
というメッセージで動作しませんでした.
DISPLAY番号が 0
で固定になっているせいのようです.
diff --git a/lightsOn.sh b/lightsOn.sh
index 6b5be4b..bdab249 100755
--- a/lightsOn.sh
+++ b/lightsOn.sh
@@ -162,7 +162,7 @@ checkFullscreen()
for display in $displays
do
#get id of active window and clean output
- activ_win_id=$(DISPLAY=:0.${display} xprop -root _NET_CLIENT_LIST_STACKING | sed 's/.*\, //') #previously used _NET_ACTIVE_WINDOW, but it didn't work with some flash players (eg. Twitch.tv) in firefox. Using sed because id lengths can vary.
+ activ_win_id=$(DISPLAY=${DISPLAY}.${display} xprop -root _NET_CLIENT_LIST_STACKING | sed 's/.*\, //') #previously used _NET_ACTIVE_WINDOW, but it didn't work with some flash players (eg. Twitch.tv) in firefox. Using sed because id lengths can vary.
# Skip invalid window ids (commented as I could not reproduce a case
# where invalid id was returned, plus if id invalid
@@ -173,8 +173,8 @@ checkFullscreen()
# Check if Active Window (the foremost window) is in a fullscreen state
if [[ -n $activ_win_id ]]; then
- isActivWinFullscreen=$(DISPLAY=:0.${display} xprop -id $activ_win_id | grep _NET_WM_STATE_FULLSCREEN)
- isActivWinAbove=$(DISPLAY=:0.${display} xprop -id $activ_win_id | grep _NET_WM_STATE_ABOVE)
+ isActivWinFullscreen=$(DISPLAY=${DISPLAY}.${display} xprop -id $activ_win_id | grep _NET_WM_STATE_FULLSCREEN)
+ isActivWinAbove=$(DISPLAY=${DISPLAY}.${display} xprop -id $activ_win_id | grep _NET_WM_STATE_ABOVE)
log "checkFullscreen(): Display: $display isFullScreen: \"$isActivWinFullscreen\""
log "checkFullscreen(): Display: $display isAbove: \"$isActivWinAbove\""
if [[ "$isActivWinFullscreen" = *NET_WM_STATE_FULLSCREEN* || "$isActivWinAbove" = *NET_WM_STATE_ABOVE* ]];then
少し書き換えて使っています.
これを自動起動するようにしておくと動画視聴時に抑制されます.
私はNetworkManagerのScriptで自宅のネットワークの場合起動するようにしています.その他のネットワークでは起動しない → スクリーンセーバーが抑制されない.
環境
$ dpkg-query -W xscreensaver* mpv mplayer xprintidle
mplayer 2:1.4+ds1-1
mpv 0.32.0-2+b1
xprintidle 0.2.4-1
xscreensaver 5.45+dfsg1-1
xscreensaver-data 5.45+dfsg1-1
xscreensaver-data-extra 5.45+dfsg1-1
xscreensaver-gl 5.45+dfsg1-1
xscreensaver-gl-extra 5.45+dfsg1-1
xscreensaver-screensaver-bsod 5.45+dfsg1-1
xscreensaver-screensaver-dizzy 0.3-3.1
$ lsb_release -dr
Description: Debian GNU/Linux bullseye/sid
Release: unstable
$ uname -m
x86_64
Debian sidでLinux Kernel(5.11)をbuildするメモ
Linux kernelの新機能を試したくてディストリビューションパッケージより新しいものを使いたいことがあります.
毎回注ぎ足しつぎ足しで設定しているので実際試すと足りないパッケージ等あると思いますが大雑把に最近のkernelのbuild手順をメモしておきます.
関連パッケージの導入
$ sudo apt install build-essential fakeroot gpg2
$ sudo apt build-dep linux
ソースの入手と署名の確認
$ wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.11.tar.xz https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.11.tar.sign
$ unxz ./linux-5.11.tar.xz
$ gpg --verify ./linux-5.11.tar.sign
gpg: assuming signed data in './linux-5.11.tar'
gpg: Signature made Mon 15 Feb 2021 06:11:32 PM JST
gpg: using RSA key 647F28654894E3BD457199BE38DBBDC86092693E
gpg: Good signature from "Greg Kroah-Hartman <gregkh@linuxfoundation.org>" [unknown]
gpg: aka "Greg Kroah-Hartman (Linux kernel stable release signing key) <greg@kroah.com>" [undefined]
gpg: aka "Greg Kroah-Hartman <gregkh@kernel.org>" [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: 647F 2865 4894 E3BD 4571 99BE 38DB BDC8 6092 693E
$ tar tvf ./linux-5.11.tar | lv
$ tar xf ./linux-5.11.tar
$ cd linux-5.11
sourceは kernel.org からアーカイブを入手しました.余裕があったらgitリポジトリのほうが便利だと思います.
署名は以下から確認します.
署名はxzではなくtarに対してのものなので一旦.xzから展開した.tarで確認します.
署名チェックがOKだったら展開します.
configの作成
$ cp /boot/config-`uname -r` ./.config
$ make oldconfig
kernelの .config
ファイルを現在のKernelの .config
を元に作成します.
make oldconfig
で差分の変更を対話形式で聞いてくるので答えていきます.すべてデフォルトにする場合は olddefconfig
を使います.
$ make xconfig
カスタマイズが必要な場合は make menuconfig
, nconfig
等でカスタマイズします.
GUIの場合xconfig(QT base)/gconfig(GTK+ base)などが便利だと思います.
.config
が更新されます.
$ make testconfig
設定後一応テストしておきます.
セキュアブートのためのDebian UEFI証明書をコピー(セキュアブートを使わない場合はスキップ)
$ tar xf ../linux_5.10.9-1.debian.tar.xz debian/certs/
既存のDebian kernel source( apt source linux
で入手可能)からコピーしてきます.(他に正攻法がある気がする)
2021-04-28 追記)
Debian pkgのLinux source から貰ってこなくても.config
のCONFIG_SYSTEM_TRUSTED_KEYS
を""
にすることでエラーを回避できるようです.@@ -9373,7 +9375,7 @@ # CONFIG_MODULE_SIG_KEY="" CONFIG_SYSTEM_TRUSTED_KEYRING=y -CONFIG_SYSTEM_TRUSTED_KEYS="debian/certs/debian-uefi-certs.pem" +CONFIG_SYSTEM_TRUSTED_KEYS="" # CONFIG_SYSTEM_EXTRA_CERTIFICATE is not set CONFIG_SECONDARY_TRUSTED_KEYRING=y CONFIG_SYSTEM_BLACKLIST_KEYRING=y
Linux 5.12.0 でセキュアブート出来るのを確認しました.
build
$ time make -j`nproc` bindeb-pkg
:
dpkg-deb: building package 'linux-libc-dev' in '../linux-libc-dev_5.11.0-1_amd64.deb'.
dpkg-deb: building package 'linux-image-5.11.0' in '../linux-image-5.11.0_5.11.0-1_amd64.deb'.
dpkg-deb: building package 'linux-image-5.11.0-dbg' in '../linux-image-5.11.0-dbg_5.11.0-1_amd64.deb'.
dpkg-genbuildinfo --build=binary
dpkg-genchanges --build=binary >../linux-5.11.0_5.11.0-1_amd64.changes
dpkg-genchanges: info: binary-only upload (no source code included)
dpkg-source --after-build .
dpkg-buildpackage: info: binary-only upload (no source included)
$ ls -1s ../linux*.deb
7932 ../linux-headers-5.11.0_5.11.0-1_amd64.deb
728724 ../linux-image-5.11.0-dbg_5.11.0-1_amd64.deb
52136 ../linux-image-5.11.0_5.11.0-1_amd64.deb
1124 ../linux-libc-dev_5.11.0-1_amd64.deb
buildして成功するとパッケージが生成されます.
CPU i5-3320M/RAM 16GB/SATA SSDの環境で200分程かかりました.別の作業をしながらだとさらに時間が伸びます.
kernelパッケージを導入
$ sudo apt install ../linux-image-5.11.0_5.11.0-1_amd64.deb ../linux-libc-dev_5.11.0-1_amd64.deb ../linux-headers-5
.11.0_5.11.0-1_amd64.deb
出来上がったkernelパッケージを導入します.
古いkernelパッケージの削除
古い使わなくなったKernelパッケージはディスクを消費するので(特に /boot
)削除しましょう
$ dpkg -l linux-image* | grep ^ii
ii linux-image-5.10.0-4-amd64 5.10.19-1 amd64 Linux 5.10 for 64-bit PCs (signed)
ii linux-image-5.11.7 5.11.7-2 amd64 Linux kernel, version 5.11.7
ii linux-image-5.11.8+ 5.11.8+-3 amd64 Linux kernel, version 5.11.8+
$ sudo apt purge linux-image-5.11.7
インストールされているパッケージを確認して古いものを削除します.
Machine Owner Keyで署名する(セキュアブートを使わない場合はスキップ)
前もってMOK(Machine Owner Key)の用意をして設定しておきます.MOKの作成についてはこちらを.
$ sudo sbsign --key ~/MOK.priv --cert ~/MOK.pem /boot/vmlinuz-5.11.0 --output vmlinuz-5.11.0
$ sudo mv ./vmlinuz-5.11.0 /boot/vmlinuz-5.11.0
Kernelに署名します.
ここでは作成したMOKの鍵( ~/MOK.priv
)と証明書( ~/MOK.pem
)を使い, /boot/vmlinuz-5.11.0
に署名して差し替えています.
$ find /lib/modules/5.11.0/updates/dkms/ -type f -print0 | xargs -0 -n1 sudo ./scripts/sign-file sha256 ~/MOK.priv ~/MOK.der
DKIMで作られたモジュールにも署名します.
追記 20210830)
/etc/dkms/sign_helper.sh
というファイルがありました./etc/dkms/sign_helper.sh#!/bin/sh /lib/modules/"$1"/build/scripts/sign-file sha512 /root/mok.priv /root/mok.der "$2"MOKのファイルを
/root/mok/priv
,/root/mok.der
,/root/mok.pem
としておくと dkms 実行時に自動的に署名してくれるようです.kernel install時だけでなく dkms 更新時などにも自動実行してくれるので署名し忘れが無くなって助かります.changelog を見ると dkms 2.8.3-3 から入ったようです.
/usr/share/doc/dkms/changelog.Debian.gzdkms (2.8.3-3) unstable; urgency=medium * dynamically generate breaks for shim-signed in Ubuntu and Derivates -- Gianfranco Costamagna <locutusofborg@debian.org> Wed, 29 Jul 2020 10:30:50 +0200
再起動して反映
うまく行けば新しいKernelで起動できます.
うまく行かない場合は古いKernelで起動して設定し直しましょう.
patch
kernel.orgにはパッチが2種類あります.n.y.0からの累積パッチとすぐ前のバーションからのインクリメンタルパッチがあります.
$ sudo apt install patch
patch
パッケージが必要なので導入しておきます.
累積patch
上ではKernel 5.11.0をbuildしました.Kernel 5.11.7を適用します.
$ wget https://cdn.kernel.org/pub/linux/kernel/v5.x/patch-5.11.8.xz
間が空いているので累積パッチを入手します.
$ cd linux-5.11
$ xzcat ../patch-5.11.8.xz | patch -p1
sourceディレクトリに移動してパッチを適用します.
あとは上の手順と同じです.
インクリメンタルpatch
次に 5.11.7 から 5.11.8 のように1つだけアップデートしたいときのインクリメンタルパッチの手順です.
$ wget https://cdn.kernel.org/pub/linux/kernel/v5.x/incr/patch-5.11.7-8.xz
インクリメンタルパッチを入手します.
$ cd linux-5.11
$ xzcat ../patch-5.11.7-8.xz | patch -p1
sourceディレクトリに移動してパッチを適用します.
あとは上の手順と同じです.
環境
$ sudo lshw -c system -sanitize | head
computer
description: Notebook
product: 23533KJ (LENOVO_MT_2353)
vendor: LENOVO
version: ThinkPad T430s
serial: [REMOVED]
width: 64 bits
capabilities: smbios-2.7 dmi-2.7 smp vsyscall32
configuration: administrator_password=disabled chassis=notebook family=ThinkPad T430s power-on_password=disabled sku=LENOVO_MT_2353 uuid=[REM
OVED]
*-pnp00:00
$ dpkg-query -W shim-signed-common shim-unsigned linux-*5.11.8* build-essential fakeroot
build-essential 12.9
fakeroot 1.25.3-1.1
linux-headers-5.11.8+ 5.11.8+-3
linux-image-5.11.8+ 5.11.8+-3
shim-signed-common 1.33+15+1533136590.3beb971-7
shim-unsigned 15+1533136590.3beb971-10
$ lsb_release -dr
Description: Debian GNU/Linux bullseye/sid
Release: unstable
$ uname -smr
Linux 5.11.8+ x86_64