それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

debian 11 -> 12 のアップデートした。pt1_drv が死んだgem が死んだ。openssh-server が死んだ、mysqldumpが死んだ

debian 11 -> 12 にアプグレ

そろそろアップデートしようかなと思った。

nodesource や gitlab や php など apt でインストールしているパッケージ関連も debian 12 に対応したっぽいので特に問題なくアップグレード出来るはず。

準備。

事前に最新版にする

sudo apt update 
sudo apt upgrade 

apt source を書き換える。

sed -i '/bullseye/bookworm/g' /etc/apt/sources.list
sed -i '/bullseye/bookworm/g' /etc/apt/sources.list.d/*

debian 11 から non-free が分割されて、 non-free , non-free-firmware になった。参考資料

sed -i '/non-free/non-free non-free-firmware/' /etc/apt/sources.list

更新する

screen 
sudo apt update
sudo apt upgrade --without-new-pkgs
sudo apt full-upgrade
sudo apt update 
sudo apt upgrade

screen で切断時に再接続するようにしておく。

一部がエラーになった。

終わったら再起動

sudo reboot

更新された。

$ cat /etc/debian_version
12.1
$ uname -a 
Linux mine 6.1.0-11-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.38-4 (2023-08-08) x86_64 GNU/Linux

一部エラーになったもの

libapache2-mod-dnssd がエラーになったのですべてが止まってしまった。

sudo apt purge gnome-user-share libapache2-mod-dnssd

一旦削除して再開した。

中途で停止したため、エラーになったのがgitlab-ce。gitlabは本当によくインストール失敗する。

sed -i '/^/#/' etc/apt/sources.list.d/gitlab_gitlab-ce.list

libapache2-mod-dnssdでアップグレードが中途半端になり、glibcのバージョンが合わずにエラーになった。 エラーになったgitlab-ce は一旦アップグレードから除外してあとまわしにした。

pt1_drv dkms がエラーになった

pt1_drv がエラーになった。どうやら根本的に動かなくなった模様

revh=`hg parents --template '#define DRV_VERSION "r{rev}:{node|short}"\n#define DRV_RELDATE "{date|shortdate}"\n' 2>/dev/null`; \
if [ -n "$revh" ] ; then \
        echo "$revh" > version.h; \
else \
        printf "#define DRV_VERSION \""1.1.0"\"\n#define DRV_RELDATE \""2010-01-27"\"\n" > version.h; \
fi
make -C /lib/modules/`uname -r`/build M=`pwd` V=0 modules
make[1]: ディレクトリ '/usr/src/linux-headers-6.1.0-11-amd64' に入ります
  CC [M]  /home/takuya/pt1-dkms/pt1/driver/pt1_pci.o
/home/takuya/pt1-dkms/pt1/driver/pt1_pci.c: In function ‘pt1_release’:
/home/takuya/pt1-dkms/pt1/driver/pt1_pci.c:407:12: warning: "/*" within comment [-Wcomment]
  407 |         /* /* /* /* mutex_unlock(&channel->ptr->lock); */ */ */ */
      |
/home/takuya/pt1-dkms/pt1/driver/pt1_pci.c:407:15: warning: "/*" within comment [-Wcomment]
/home/takuya/pt1-dkms/pt1/driver/pt1_pci.c:407:18: warning: "/*" within comment [-Wcomment]
/home/takuya/pt1-dkms/pt1/driver/pt1_pci.c:407:60: error: expected expression before ‘/’ token
  407 |         /* /* /* /* mutex_unlock(&channel->ptr->lock); */ */ */ */
      |                                                            ^
/home/takuya/pt1-dkms/pt1/driver/pt1_pci.c:414:12: warning: "/*" within comment [-Wcomment]
  414 |         /* /* /* mutex_unlock(&channel->ptr->lock); */ */ */
      |
/home/takuya/pt1-dkms/pt1/driver/pt1_pci.c:414:15: warning: "/*" within comment [-Wcomment]
/home/takuya/pt1-dkms/pt1/driver/pt1_pci.c:414:57: error: expected expression before ‘/’ token
  414 |         /* /* /* mutex_unlock(&channel->ptr->lock); */ */ */
      |                                                         ^
/home/takuya/pt1-dkms/pt1/driver/pt1_pci.c:416:12: warning: "/*" within comment [-Wcomment]
  416 |         /* /* mutex_unlock(&channel->ptr->lock); */ */
      |
/home/takuya/pt1-dkms/pt1/driver/pt1_pci.c: In function ‘pt1_makering’:
/home/takuya/pt1-dkms/pt1/driver/pt1_pci.c:666:34: error: implicit declaration of function ‘pci_alloc_consistent’ [-Werror=implicit-function-declaration]
  666 |                         dmaptr = pci_alloc_consistent(pdev, DMA_SIZE, &dmactl->ring_dma[lp2]);
      |                                  ^~~~~~~~~~~~~~~~~~~~
/home/takuya/pt1-dkms/pt1/driver/pt1_pci.c:666:32: warning: assignment to ‘__u32 *’ {aka ‘unsigned int *’} from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
  666 |                         dmaptr = pci_alloc_consistent(pdev, DMA_SIZE, &dmactl->ring_dma[lp2]);
      |                                ^
/home/takuya/pt1-dkms/pt1/driver/pt1_pci.c: In function ‘pt1_dma_init’:
/home/takuya/pt1-dkms/pt1/driver/pt1_pci.c:688:21: warning: assignment to ‘void *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
  688 |                 ptr = pci_alloc_consistent(pdev, DMA_SIZE, &dev_conf->ring_dma[lp]);
      |                     ^
/home/takuya/pt1-dkms/pt1/driver/pt1_pci.c: In function ‘pt1_dma_free’:
/home/takuya/pt1-dkms/pt1/driver/pt1_pci.c:706:25: error: implicit declaration of function ‘pci_free_consistent’ [-Werror=implicit-function-declaration]
  706 |                         pci_free_consistent(pdev, DMA_SIZE,
      |                         ^~~~~~~~~~~~~~~~~~~
/home/takuya/pt1-dkms/pt1/driver/pt1_pci.c: In function ‘pt1_pci_init_one’:
/home/takuya/pt1-dkms/pt1/driver/pt1_pci.c:734:14: error: implicit declaration of function ‘pci_set_dma_mask’ [-Werror=implicit-function-declaration]
  734 |         rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
      |              ^~~~~~~~~~~~~~~~
      

コメントのあたりがおかしい

/home/takuya/pt1-dkms/pt1/driver/pt1_pci.c:414:57: error: expected expression before ‘/’ token
  414 |         /* /* /* mutex_unlock(&channel->ptr->lock); */ */ */

関数が見つからなくて、implicit declaration of function になってた

  666 |                         dmaptr = pci_alloc_consistent(pdev, DMA_SIZE, &dmactl->ring_dma[lp2]);
  688 |                 ptr = pci_alloc_consistent(pdev, DMA_SIZE, &dev_conf->ring_dma[lp]);
  706 |                         pci_free_consistent(pdev, DMA_SIZE,
  734 |         rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));

どうやら、pci関連の関数が大幅に変わった模様

pt1_drv は家族が録画を楽しみにしてて、生活の一部になってるので、なんとか方法を考える。

ソースコードを書き換えようかと思ったけど、github にレポジトリをみつけた、カーネル6(debian12)に対応できたソースを見つけたのでそれをつかうことに

既存のdkmsは捨てて新しく作り直した。

if [ ! -e ~/repos/stz2012-recpt1 ]; then 
  cd ~/repos/
  git clone https://github.com/stz2012/recpt1.git stz2012-recpt1       
fi 

cd ~/repos/stz2012-recpt1
git pull 
REVISION=`git rev-parse --short HEAD`
## 
sudo cp -r ./driver/ /usr/src/pt1_drv-$REVISION/
##
cat << EOT | sudo tee /usr/src/pt1_drv-$REVISION/dkms.conf
PACKAGE_NAME="pt1_drv"
PACKAGE_VERSION="$REVISION"
MAKE[0]="make KVER=\${kernelver}"
CLEAN[0]="make clean"
BUILT_MODULE_NAME[0]="pt1_drv"
DEST_MODULE_LOCATION[0]="/kernel/drivers/video"
AUTOINSTALL="YES"
EOT
## 
sudo dkms add -m pt1_drv -v $REVISION
sudo dkms build -m pt1_drv -v $REVISION
sudo dkms install -m pt1_drv -v $REVISION

これで、しばらくpt2/pt1 も動くはずである。良かったね。

rubygem が死んだ。

昔書いたスクリプトで自動化してる系がrubypythonphpがあるが、ruby は システム rubygems を使っていために、動作が止まってしまった。

bundler を使ってない系はgem 直接インストール。

bundler を使っている系は、rubygems をシステム全体にインストールして解決した。

ruby のバージョンを固定するのがめんどくさいですね・・・

pythonphpDebianアップデート後でも簡単に動くのに。

bundleを使ってる箇所を探すには

sudo updatedb
sudo locate Gemfile.lock

とでもやっておけば見つかると思う。

rootで入れたシステム全体のgem はもうやめて、apt で入れたほうが良いかもしれない。

bundle で入れたものはruby のバージョンで依存するので、rbenv をあわせたほうが良いかもしれない。

apt list ruby-*

でapt に登録されている gems を見る限り、ruby-mail ruby-sinatra ruby-zip ruby-pry-byebug ruby-parallel ruby-rspec-core ruby-rmagick ruby-sequel ruby-sqlite3 ruby-daemons とかよく使いそうなものはapt で入るっぽい。OSに任せてロードしたほうがアップデート追従出来て嬉しいかも。

スリープしてしまう。

以前も起きたのですが。アップデート後にスリープしてしまう事象が発生 https://takuya-1st.hatenablog.jp/entry/2021/11/26/172528

sshがdropbear になる。

dropbear は luks 解除のために入れているんですが、SSHDがopenssh-server ではなく、、dropbearになってしまった。

init.d のdropbear が openssh-server より先に起動するためである。

dropbear はモジュールだけがほしいのであるが、自動起動まで入ってしまう。無効にしたのに、また有効になっていた。systemd はマジ、F◯ck だわ。

mysqldumpがエラーを吐くようになった

debian12 に移行したら mysqldump が Events Schedulerでエラーになる。 - それマグで!