インストーラがDVDメディアだったりISOだったりするLinuxソフトウェアが存在する。そしてそのインストーラが自分以外のユーザ(aptとか)でメディア内のファイルを実行する場合、UbuntuのデフォルトACLに引っかかってインストールが失敗する。そのためACLを変更する必要があるのだが、なぜかたまにACLがバグっててsetfacl
で変更出来なくなる事象に遭遇した。
正常なパターンでは、基本的にメディアが自動マウントされるとユーザに合わせたディレクトリが作成され、ACLが設定される。メディアごとのディレクトリはこのディレクトリのACLを継承する。
$ getfacl /media/liqsuq/
getfacl: 絶対パス名から先頭の '/' を削除
# file: media/liqsuq/
# owner: root
# group: root
user::rwx
user:liqsuq:r-x
group::---
mask::r-x
other::---
これをグループもしくは他のユーザーでも実行可能にすれば良いので本来は以下のコマンドを実行すれば良い。
$ sudo setfacl -m g::5,o::5 /media/*
しかし何回もUbuntuを再インストールしていると稀に以下のような事象に出くわした。"user:liqsuq:r-x"行が複数存在しているせいでsetfaclコマンドが失敗している。
$ sudo setfacl -m g::5,o::5 /media/*
[sudo] liqsuq のパスワード:
setfacl: /media/liqsuq: Malformed access ACL 'user::rwx,user:liqsuq:r-x,user:liqsuq:r-x,group::r-x,mask::r-x,other::r-x': 重複エントリ at entry 3
$ getfacl /media/liqsuq/
getfacl: 絶対パス名から先頭の '/' を削除
# file: media/liqsuq/
# owner: root
# group: root
user::rwx
user:liqsuq:r-x
user:liqsuq:r-x
group::---
mask::r-x
other::---
これを修正するには以下を実行する
$ sudo setfacl -x user:liqsuq /media/liqsuq
$ getfacl /media/liqsuq/
getfacl: 絶対パス名から先頭の '/' を削除
# file: media/liqsuq/
# owner: root
# group: root
user::rwx
user:liqsuq:r-x
group::---
mask::r-x
other::---
$ sudo setfacl -m g::5,o::5 /media/*
$ getfacl /media/liqsuq/
getfacl: 絶対パス名から先頭の '/' を削除
# file: media/liqsuq/
# owner: root
# group: root
user::rwx
user:liqsuq:r-x
group::r-x
mask::r-x
other::r-x
対処法は分かるが原因は不明。トリガーとなる操作も分からず本当に不定期で発生するので都度対処する。