それマグで!

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

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

lxc のコンテナ内部でパーミッションエラーでapt updateができなくなった。

lxc 内で パーミッションエラー

lxc のapt を最新版にしようとしたらエラーになった。

lxc exec myhost apt update 
chown to _apt:root of directory /var/lib/apt/lists/partial failed - SetupAPTPartialDirectory (1: Operation not permitted)
W: chown to _apt:root of directory /var/lib/apt/lists/auxfiles failed - SetupAPTPartialDirectory (1: Operation not permitted)

/var/lib/apt/lists の中がおかしい

nobody になってる。。。

lxc exec myhost  ls -l /var/lib/apt/lists/partial/ -ld
drwx------ 1 nobody nogroup 0 Aug 18 19:05 /var/lib/apt/lists/partial/

ただしくはこうなるはず

ssh root@sample ls  /var/lib/apt/lists/partial/ -ld
drwx------ 2 _apt root 6  8月 18 11:48 /var/lib/apt/lists/partial/

lxc のストレージをマウントして修正を試みる

lxc storage list
+-----------+--------+----------------------------------------------+-------------+---------+---------+
|   NAME    | DRIVER |                    SOURCE                    | DESCRIPTION | USED BY |  STATE  |
+-----------+--------+----------------------------------------------+-------------+---------+---------+
| bt01      | btrfs  | /var/snap/lxd/common/lxd/disks/bt01.img      |             | 4       | CREATED |
+-----------+--------+----------------------------------------------+-------------+---------+---------+
| default   | zfs    | /var/snap/lxd/common/lxd/disks/default.img   |             | 2       | CREATED |
+-----------+--------+----------------------------------------------+-------------+---------+---------+

ストレージを利用しているコンテナを確認し、念のため一時的に停止しておく

$ lxc storage info bt01
info:
  description: ""
  driver: btrfs
  name: bt01
  space used: 19.04GiB
  total space: 49.94GiB
used by:
  instances:
  - jitsi
  - nextcloud
  - rails
  - rclone-web
$ lxc stop  jitsi nextcloud rails rclone-web

ストレージをマウントして様子を見る

$ losetup  | grep bt01
/dev/loop7          0      0         1  0 /var/snap/lxd/common/lxd/disks/bt01.img           1     512
$ losetup  | grep bt01 | awk '{print $1}'
/dev/loop7          
$ sudo mount $(losetup  | grep bt01 | awk '{print $1}')  /mnt 
$ ls /mnt
$ sudo ls /mnt/containers/nextcloud/rootfs
$ sudo ls /mnt/containers/nextcloud/rootfs/var/lib/apt

様子を見ると、

$ sudo ls /mnt/containers/nextcloud/rootfs/var/lib/apt
$ sudo ls /mnt/containers/nextcloud/rootfs/var/lib/apt/lists -l
total 145820
drwxr-xr-x 1 root root 0 Aug 18 19:05 auxfiles
-rw-r--r-- 1 1000000 1000000   115942 Jul  9 19:14 debian-mirror.s
-rw-r--r-- 1 1000000 1000000 45506443 Jul  9 18:12 debian-mirror.s
-rw-r--r-- 1 1000000 1000000 52296931 Jul  9 18:14 debian-mirror.s
-rw-r--r-- 1 1000000 1000000 17446169 Jul  9 18:13 debian-mirror.s
-rw-r--r-- 1 1000000 1000000 30235019 Jul  9 18:12 debian-mirror.s
-rw-r--r-- 1 1000000 1000000    44066 Aug 18 17:20 debian-mirror.s
-rw-r--r-- 1 1000000 1000000     9833 Jun 12 04:58 debian-mirror.s
drwx------ 2 _apt root 6  8月 18 11:48 /mnt/containers/nextcloud/rootfs/var/lib/apt/lists/partial/

なんかおかしいので、 全部消して、作り直した。

sudo rm -rf /mnt/containers/nextcloud/rootfs/var/lib/apt/lists 
sudo mkdir /mnt/containers/nextcloud/rootfs/var/lib/apt/lists 
sudo chown 1000000 :1000000  /mnt/containers/nextcloud/rootfs/var/lib/apt/lists 

パーミッションエラーは出なくなった。

なぜ、パーミッションがおかしくなったのかは謎だけど。バックアップとか書き戻しでミスしてたかもしれない。

まとめ

lxc のストレージは直接サワれるっていうことをメモとして残しておく。

パーミッションエラーでもなんとかなるんだなというのが学び。