Lenovo ThinkPad P17 に Debianをインストールする
今までMacBook Pro の VMware Fusion で Linux を使っていたんだけど、もう直接Linuxを使った方がいいかと思って。
新しいノートパソコンはLenovoのでかいやつ。17インチ。
www.lenovo.com
ThinkPad P17 はWindows用のドライブとは別に、空のSSDがもう一つ付けた。メモリも増やし、ディスプレイも3840 x 2160 に変更した。
これをDebian 10 とWindows 10 でデュアルブートにする。デュアルブートで設定するのは15年ぶりぐらい。
一つ前のバージョンなら、ここに公式のセットアップガイドがある。
https://download.lenovo.com/pccbbs/mobiles_pdf/lenovo_thinkpad_p53_p73_debian10_installation_v1.0.1.pdf
UEFI BIOSのデザインが全然変わっているが、項目はだいたい同じなのでここの通りに設定する。
注意点は、Windowsも使うなら、先にWindowsのBitLocker ディスクの暗号化を解除しておく。
これをやらずにBIOSのセキュリティを無効にしてしまうと、Windowsのディスクが読み込めなくなる。幸い、Windowsのアカウントでログインして回復キーを取得するように案内されるので、その通りにして事なきを得た。アカウントの種類によっては詰んでた可能性がなきにしもあらず。
Windows 10 Homeだったので適当にoutlookのメールを新規登録してアカウントは作ってあった。
Boot Order は、USB HDD?とりあえずUSB系を上に移動する。
「Section 2 – Discrete vs Hybrid Graphics」のハイブリッドもやめて、「Discrete Graphics」を選んでnvidiaだけを使う設定にする。
DebianのインストーラーはUSBにコピーする。
4.3. USB メモリでの起動用ファイルの準備
# cp debian.iso /dev/sdX # sync
特にddとかツールとかではなく、ただコピーする。(mountはしない)
最近のインストーラーは、これだけで旧BIOSとUEFIと両方に対応したインストールメディアが作れるみたい。
有線LANは繋いでおく。ポートがあって良かった。有線がなかったら更に面倒なことになっていた。
taskselでデスクトップはKDEを選ぶ。本当はLXDEかMATEが良かったんだけど、スケーリング解像度に対応しておらずフォントやメニューのサイズがおかしくなるので、諦めてKDEに。
nvidia-settings でも倍率を設定できるけど、ダメっぽかった。
空のディスクで一つのパーティションでインストールする。
ドライバはPDFの通りにせずに、apt install nvidia-driver を入れる。Wi-Fiドライバはまだ入らない。
en:users:drivers:iwlwifi [Linux Wireless]
カーネルを5.2以上にバージョンアップする必要がある。
sources.list に backports を書いて、linux-image-5.8 を入れる。
細かいバージョンごとに全部選べるみたいだけど、昔はこんなのあったっけ?新しいカーネルが順次追加されていってるようで、これならDebianでハードウェアが認識せずに困ることは無くなるのかも。
取り敢えず一覧の中から新しい Linux Kernel 5.8.0-0.bpo.2-amd64 をインストールすることにした。
カーネルのバージョンを上げたら
apt install -t buster-backports nvidia-driver apt install -t buster-backports firmware-iwlwifi
でドライバのインストール。
この辺、ちょっと試行錯誤してPDFの通りにソースから入れたりもしたので、これだけで動かないこともあるのかも。
https://wireless.wiki.kernel.org/_media/en/users/drivers/iwlwifi/iwlwifi-qu-48.13675109.0.tgz
一応これもDLしてたけど、同じファイルが firmware-iwlwifiパッケージ(中身は違うっぽい) にあった。
ここでnvidia-driver を入れているので、ここまでの作業はコンソールの黒い画面に超小さい文字で作業しないといけない。ちょっとつらい。
あとDebianインストール時にGRUBのインストールをどうするかという質問がなかった。
勝手にデフォルトのブートローダーが書き換わってしまった?再起動したらGRUBになる。問題ないと言えば無いんだけど…。
ブートローダーはWindows Boot Managerのまま、WindowsとLinuxでデュアルブート/GRUB4DOSを使ってデュアルブート - LinuxJapanWiki - アットウィキ
こっちをやろうと思っていた。インストールはAdvancedを選ぶ必要があったかもしれない。ほとんど何の質問もなくすぐインストール完了までいくとは思わなかった。
次回、何らかのアップデートでブートローダーが書き換わることがあったらやってみる。
せっかくハードウェアに指紋認証があるので、Linuxでも使いたい。
https://gitlab.freedesktop.org/libfprint/libfprint/-/tags
最新版をexperimentalでインストールすれば、バージョン的には対応しているっぽいけれど
https://askubuntu.com/questions/1214592/fingerprint-reader-lenovo-thinkpad-l13-synaptics-driver
一筋縄ではいかないようだ。
lsusb | grep Synaptics Bus 001 Device 003: ID 06cb:00bd Synaptics, Inc.
今は無理だけど
apt install libpam-fprintd pam-auth-update
を実行すると一括でpam設定してくれる。
2020/10/16追記:
今試したらいけた。
元々インストールしていたfprintd関連のパッケージを全て apt remove --purge してから、もう一度
apt install -t experimental libpam-fprintd
でインストールし直した。それでrootでfprintd-verifyすると普通に動いた。
指紋の登録は
fprintd-enroll
を実行する。
その後、pam-auth-update で各種パスワード入力の場所で指紋認証が使えるようになる。
デスクトップへのログインは、一度パスワードでログインしないと対応されない?ログインしてからログアウトして、再びログインするときには指紋認証が出るんだけど。
sudo はデフォルトが指紋認証になっていて、パスワード認証はしばらく待つ?
ちょっと使い勝手が分からない。
2020/10/20追記:
Support fingerprint reader login · Issue #284 · sddm/sddm · GitHub
sddmじゃなくてgdmを使えということか…。
gdm3を入れたらgnome関連のパッケージが大量にインストールされた。見た目が良くなって指紋認証ログインも使えるようになった。
ただ、起動直後は10秒ぐらい待たないとデバイスが認識されない。
askubuntu.com
うーん…未解決。画面ロック時の指紋認証は、パスワードが空の状態でEnterを押せばすぐにできる。
それから、関係は不明だけれどWi-Fiのパスワードが記憶されなくなってしまった。パスワードの保存を all users (not encrypted) にすれば記憶できた。最初の設定がどうなっていたか分からん…。not encryptedでいいんだっけ?
kde wallet使ってないから元々encryptedは無理な気もする。
noindex と canonical を同時に指定するとGoogleクローラーはどう動くかというテストのための記事
noindexとcanonicalを併用するのは良くない。というのがもっぱらの通説。
何っ! PWAがデスクトップでも動くだと? しかも最高だと?【SEO記事12本まとめ】 | 海外&国内SEO情報ウォッチ | Web担当者Forum
重複コンテンツ対策にはrel=canonicalを推奨、noindexタグではシグナルがすべて失われる | 海外SEO情報ブログ
リンクをたどっていくと
2 questions about the canonical tag : TechSEO
No Index & Rel Canonicals At The Same time? No Way!
この辺りの記事に行き着く。
もう少し詳しい記事は
Rel Canonical and No Index No Follow on Same Page Google SEO
こっちにある。
でもねえ…。
canonicalとnoindexはまったく別の概念で、検索エンジンにインデックスさせたくないことと正規URLに誘導したいということは両立する。
そもそもnoindexを解析するためにはhtmlを読んでいる必要があり、canonicalも読んでいるはずなんだけど。
メタ情報という意味では同じだし、検索エンジンには出したくないけどSNSやリンク共有では綺麗なURLを見せたいというユースケースもあるはず。
というわけで、noindex + canonical のページへのリンクを貼っておく。
The auto wiring container for only one file with 200 lines.
現状、Googlebot のクローラーは noindex があっても canonical の方のURLも同時に見に行ったのはアクセスログで確認した。サーチコンソールにもどこからもリンクされていないcanonicalの方のURLが登録されていた。
手抜きして文章をコピーしたので検索結果には出てきてない模様。コピー元の方が出てきた。
noindexが効いて出てこないのか、重複コンテンツで出てこないのか、分からなくなってしまった。
もう一度文章を変えて様子見中。
最初の1回だけcanonicalを見に行ったのか、常に見に行くのかのテストにもなる。
テストページじゃなくてもうちょっとちゃんとしたサイトが欲しいところだけど。
xmodmap をログイン時(Xセッション起動時)に実行する
Debuan buster にアップグレードしたら xmodmapが自動実行されなくなっていたのでメモ。
以前やった設定は
MacBook Pro の初期設定のメモ その2 - ログ日記
ここ。
Linuxの設定じゃなくてMacの設定として書いてた。
それで、.xsessionrc や .xinitrc や .xsession のどれがどうなっているのかあまり把握していなかったのでメモ。
.xsessionrc というのはDebian系専用の設定らしい。
ディスプレイマネージャーがどれでも実行される。
rg .xsession /etc/X11/
とかで検索すれば実際の動きを調べられる。
.xsessionや.Xsession(この順で探索されて先に見つかった方)は、設定があればスタートアップスクリプトとしてデフォルトのx-session-managerの代わりに実行される。
.xinitrcは手動でstartxしたとき用?
.xsessionrcは
if [ -r "$USERXSESSIONRC" ]; then . "$USERXSESSIONRC" fi
で読み込まれる。(実行ではない)
それなら今までの設定で合ってるじゃん、と思って sleep を 3 から 10 にしたら起動できた。
GUIのログインセッションの起動で結構待たないとダメなんだね。
以前はスクショだったのでテキストで再掲しておく。
$ cat .xsessionrc /home/nishimura/bin/run_xmodmap.sh & $ cat bin/run_xmodmap.sh #!/bin/bash sleep 10 /usr/bin/xmodmap /home/nishimura/.xmodmap $ cat .xmodmap remove lock = Eisu_toggle remove mod1 = Alt_R
10/5 追記
PC立ち上げ時では実行されなかった。
もっとsleepしないとダメ?何か他にGUI系が立ち上がったトリガーがあれば良いんだが…。
10/7 追記
実行できるまで繰り返すことにした。
until /usr/bin/xmodmap /home/nishimura/.xmodmap; do sleep 3 done
それはそうと、ゾンビプロセスがずっと残ってる。何か起動の仕方を間違っている気がしないでもない。
「わかる」と「読める」と理解する
圏論の本を読んでいてよく詰まるのが、数学記号が読めないということ。
数学記号の表 - Wikipedia
色々あるけど、どうやって読むんだろうか。
それとも数学の人は読んでないのかな?
例えば「192.168」と書いてあれば「イチキューニーイチロクハチ」と読む。「ヒャクキュージューニーテンヒャクロクジューハチ」とは読まない。
「192.168.0.0/24」と書いてあれば…これは読めない。192.168.0 のネットワークね、と頭の中で考える。「スラッシュニーヨン」とは読まない。読むとしたらどちらかというと「ニーヨン」じゃなくて「ニジューヨン」だ。
「192.168.0.0/28」と書いていれば…IP 16個ね、と考える。読まない。「192.168.0.0/27」と書いていれば…ちょっと考えたり数えたりする。/27 には慣れていない。
$item->name と書いていれば、「アイテム、ネーム」と(頭の中で)読む。「アロー演算子」という呼び方は知っているけれど、「アロー」は読まない。
heightは誰かに喋るときは「ハイト」だけれど、頭の中では「ヘイト」と読んでるっぽい。width は読んでない。喋る必要があるときは「幅」って言ってる。
column は明らかに「カラム」だけど、頭の中では「コラムン」と言ってる気がする。
音として読めなくても、理解できるし使えるし、日常的に使っているのに読みづらいということが起こっている。
数学の式なんかの場合はどうなっているんだろうか?
例えば
写像の合成 - Wikipedia
ここにある式が読めなくて、読めないからそこで文章を読む流れが詰まる。
・とか○とか矢印とか色々あるし、xもXもある。筆記体とかギリシャ文字とかもある。
でも、もしかして読む必要はないのかな?
どういう手順で音として読まずに理解するのか、上の192.168/24とかの例は自分のことなのにあまり分かってないな。
「192.168.0.0/27」は理解していると言えるけれども、見て「わかる」という感覚までにはなっていない。
「192.168.0.0/24」は感覚的にわかるレベルになっている。「下位8ビットのアドレス空間」「クラスC」「255.255.255.0」などがぼんやり思い浮かぶ。
もし「192.168.0.0/13」とか書かれていたら何も想像できないので、紙に書くようなことをしないと頭に入ってこないし、そのときは覚えてもたぶんすぐ忘れる。
つまり…どうすれば良いかというと、結局数をこなして慣れるしか無いということかな。
他には、ギターを習っていたけれどピアノは習っていないので、ト音記号は読めるけれどもヘ音記号は読めない。
しかも、読むより指で押さえる方が簡単ということが起こる。
たぶん読んでない。眺めているという感じかもしれない。
そういえばアルファベットの綴りが分からないときは、エアータイピングでキーボードを打つようにして綴りを思い出すことがある。「application」「transaction」「conversion」「extension」などは、指でタイプする方が早くて正確に思い出せる。手書きだとちょっと不安がある。
これもアルファベットの文字としては読んでないし書くことも無いけれど、タイピングは何度もしているからだ。
これをふまえて、数学記号に当てはめるとどうなんだろう?
やっぱりノートに書くような何らかの出力が必要な気がする。
練習問題的な、数をこなさないといけないのかもしれない。
ちなみに、昔はピアノで5曲ぐらい弾けたんだけど、今は弾けなくなったし楽譜を見ても弾けなくなってしまった。
たぶん基礎練をせずに曲だけ練習したからだ。
ヘ音記号を数えて読んだり、一音一音確かめながら弾いたら一応少しずつは進むんだけれど、わかるレベルまでいってない。
理解はしているからゆっくりやれば出来るけれども、音楽の場合はゆっくり理解していては曲にならない。
コンピューターに関しても、もし大学に行ってなかったらプログラムだけ書いて基礎的でCS的なことはやらなかったに違いない。
なかなか難しいものだね。
数の話だと、7 + 6 は 13 だけれども、これはどうやって導き出しているのか。
たぶん暗記している。数で暗記してるんじゃなくて、イメージで暗記してる。なんか6が7に引っかかってぽろっと3と3に分かれるイメージ。7は分かれない。10から引いたりもしていない。かけ算の九九のように覚えているわけでもない。
そういうこと?(どういうこと?)
圏論入門 Haskellで計算する具体例から 読んでる
やっと15ページまで読んだ。
1ヶ月前に買ったのに全然進んでいない。
267ページまである。
先は長い。
Amazonのレビューは良くないみたい。
でも数学の基礎が無い自分は読みやすい。今のところ、と言ってもたった15ページだけど、暗黙の了解が少ないように見える。
(これがオブジェクト指向が分からない人が読みやすい「オブジェクト指向入門」とかだったら、レビューが低いのは分かる気がする)
こういう初心者向けの本じゃなくて数学書籍の棚にある教科書っぽい本だと、最初の1ページに書いてあることが本当に分からない。分からなさすぎて新鮮で笑ってしまうくらい分からない。単語が100個でてきたら90個は分からないんじゃないだろうか、ってぐらい。
圏論入門 Haskellで計算する具体例から は、まだなんとなく読めそうな感じがある。
この本の前は圏論の歩き方を読んでた。
今回は、ノートに分からないことをメモしつつ調べながら読んでみてる。
まったく知らない分野の文章を読んでいると、知らない単語を調べて、その説明に出てくる知らない単語を調べて、ということの繰り返しで、本文がまったく進まないことが起こる。
「群」って何?って調べて、説明に出てくる「自己同型」って何?って調べて、その説明に出てくる「同型写像」って何?って調べて、その説明に出てくる「自己同型写像」とか「始域」とか出てきて、なんかトートロジーしている。
基礎をやらずに進んでるのが問題なんだけど、まあ基礎にはあまり興味が出ないので仕方が無い。
しりとりの圏とかアミダの圏(画像が出てない)とかの例示ができるのなら、別に数学の基礎を知らなくても圏論は理解できるはずだよね、と思って読んでる。
それで、調べた単語や概念の意味を書いて単語帳みたいなものを作りながら読んでいったら、調べ物がループせずにすむかなと思ってノート書いてる。
全然進まなくて続くか分からないけど、今はそんな感じ。
Debian の Let's Encrypt (certbot) を --preferred-chain オプション対応済みのバージョンにしてDST Root CA X3を指定する
2020年9月末でAndroid 7.1以下でSSLが使えなくなるらしいので。
以下はDebian 10 Busterの環境だけれども、stretchでもCentOSでも内容はほとんど同じはず。
songmu.jp
community.letsencrypt.org
バージョン 1.6.0から --preferred-chain オプションで有効期限を一年延ばせる。
# certbot --version certbot 0.31.0
ただしパッケージで入れているとかなり古いバージョンのはず。
Satoshi Kojima: "そしてsudo certbot --preferred-chain "DST Root CA X3…" - sandbox : skoji
ソースから入れてもいいけど、依存関係で詰まったら嫌なのでsnapdというパッケージ管理ツールを使って最新版をインストールする。
念のため /etc/letsencrypt をコピー退避。
apt install snapd apt remove certbot python3-certbot-dns-sakuracloud apt autoremove
python3-certbot-dns-sakuracloud の箇所は、関連パッケージを入れているものに合わせてremove。
systemctl list-timers は消えたけど /etc/cron.d/certbot は残っている模様。
remove --purge していないので /etc/letsencrypt も残っている。
本家certbotマニュアルにしたがってsnapでcertbotをインストールする。
snap install --classic certbot
/etc/profile.d/apps-bin-path.sh にPATHが設定されているので、ログインし直す。
# certbot --version jq: error (at <stdin>:0): Cannot iterate over null (null)
うーん。。。
snapのcoreを入れる必要があるみたい。
Issues running certbot command - Help - Let's Encrypt Community Support
snap install core && snap refresh core
# certbot --version certbot 1.8.0
OK。core20とcoreは別物なのね。
古い設定が生きているか確認する。
certbot certificates
新しい設定 --preferred-chain を試したいところだけど、いくつかあるドメインのうち、更新が間近でないものは設定ファイルだけ変更したい。
community.letsencrypt.org
でも無理なようだ。ミスった場合に気付かないからだとか。
実行したらdnsパッケージを入れるのを忘れていたことに気付いた。
snap search certbot snap info certbot-dns-sakuracloud snap install --beta certbot-dns-sakuracloud
エラーが出た。
error: cannot perform the following tasks: - Run hook prepare-plug-plugin of snap "certbot" (run hook "prepare-plug-plugin": ----- Only connect this interface if you trust the plugin author to have root on the system Run `snap set certbot trust-plugin-with-root=ok` to acknowledge this and then run this command again to perform the connection -----)
snap set certbot trust-plugin-with-root=ok snap install --beta certbot-dns-sakuracloud
classicは要らない?snapの仕組みが分からないな…。
certbot renew --dry-run --force-renew --cert-name ドメイン名 --preferred-chain "DST Root CA X3"
dry-runで確認した後に実行。--cert-name でドメインの設定ファイルを指定する。
certbot renew --force-renew --cert-name ドメイン名 --preferred-chain "DST Root CA X3"
証明書は作り直さなくてもforce-renewalでOKぽい。
あくあーら@デブ鯖缶 (@aquarla@gochisou.dev) - ごちそうデブ
設定ファイルを見ると
preferred_chain = DST Root CA X3
が追記されていた。
設定を間違った場合の動作がまだ確認できないけれど、今はこれで良しとする。
crontabの設定は /usr/bin/certbot が存在しない(/snap/bin/certbot にある)し、systemdのタイマーには新しい版が登録されているのでcronは実行されないはず。ひとまず放置で。
テンプレートエンジンを使うのをやめたい
BladeOneをアップデートしたら、include時の変数割り当てのフローが変わったのか、既存変数が上書きされてエラーが出るようになってしまった。
本家Bladeではこういったことは起きない?
仕方がないのでバージョン固定した。
ソースを追っても何となく不毛なことになりそうなので、少しずつ外していくことを目指したい。
PHPの型が強化されてきたことだし、そろそろデータの受け渡しに配列や動的変数を使うことをやめたい。かなり減らしたけど、まだ@param mixedと書いている部分も多い。
素のPHPを使って、かつnamespaceを使って、型チェックもして、ビューからロジックはなるべく呼ばないようにして、などという設計に関する蓄積がない。
テンプレートエンジン無しっていうのは手を抜くためとか余計なものを入れないとかの理由が多かったように思う。
と思っていたのだけど
teratail.com
同じような人も居るには居るのか。