Ubuntuでハマったらここにネタを書いていこう
samba
Ubuntu = Server Windows = Client
Ubuntu側の設定が全て。
- sambaをインストール
- sudo apt install samba wsdd
- 公開するディレクトリと権限を設定
- sudo /etc/samba/smb.conf
- sudo testparm
- sudo systemctl stop smbd
- sudo systemctl start smbd
- sambaを使うユーザーを登録
- sudo pdbedit -a ユーザー名 ・・・sambaを使うユーザーを登録
- sudo pdbedit -L ・・・ユーザーが追加されていることを確認
- sudo pdbedit -a -u ユーザー名 ・・・既に設定済みのユーザーのパスワード変更
- ufw(ファイアーウォール)の穴あけ
- ufw allow from xxxxx (WindowsのIP)
SnapでインストールしたFirefoxをアンインストール/再インストールできない
症状
$ sudo snap remove firefox
でアンインストールしようとしても
Cannot remove common data directories for "firefox": unlinkat /var/snap/firefox/common/host-hunspell/en_AU.aff: read-only file system
tool_linux.go:82: cannot open snapd info file “/snap/snapd/current/usr/lib/snapd/info”: open /snap/snapd/current/usr/lib/snapd/info: permission denied
といったエラーが出てアンインストールできなくなることが有る
原因
AppArmorというプロセスごとに操作できるファイルを制限する機能がUbuntuに標準でついていてsnapの邪魔をしている。
firefoxが削除を要求しているファイルがsnapがAppArmorから許可されているディレクトリの外に有るためPermission dinedされる。
対策
一時的にAppArmorの機能をOS上で停止してfirefoxをアンインストールする。その後、AppArmorの機能を再度有効にする。
本エラーが出ている時点でsnapも破壊されているのでsnapの再インストールも行う。
操作
まずはfirefoxやSnapを削除
$ sudo vi /etc/default/grub ← 再起動時にカーネルのapparmorを無効にする
11行目辺りのCMDLINE_LINUX_DEFAULTを
CMDLINE_LINUX_DEFAULT="apparmor=0"
にする
$ sudo systemctl disable apparmor ← 再起動時にユーザーのapparmorを無効にする
(再起動)
$ sudo umnount /var/snap/firefox/common/host-hunspell
$ sudo snap remove firefox ← firefoxを削除
あちこちに消したいファイルが残っていて失敗するので、根気よくファイルを消しながら何度もトライする
$ sudo snap list ←snapでインストールされているソフトを調べる
$ sudo snap remove xxx ← すべてのsnapソフトを削除する
$ sudo apt remove snap snapd ← snapをきれいに削除する
$ sudo vi /etc/default/grub ←再起動時にカーネルのapparmorを有効にする
CMDLINE_LINUX_DEFAULT="apparmor=0"を
CMDLINE_LINUX_DEFAULT=""に編集
$ sudo systemctl enable apparmor ← 保存した設定を読み込み
(再起動)
次にsnapの再インストール
$ sudo apt install snap snapd
これでsnapがきれいに再インストールされるが、相変わらずAppArmorがsnapの邪魔をする環境であることには違いない。
本来はAppArmorがsnapの邪魔をしないように設定を変更するのが正しいやり方なのだが、AppArmorの設定は本職のSEでも嫌がるほど複雑かつ膨大。なのでsnapの動作をスキャンしてエラーになる部分に絞り込んで設定を行う。
ありがたいことにAppArmorはスキャン用のツールを用意してくれいてるのでこれを使わせていただく。
$ sudo apt install apparmor-utils ←ツールをインストール
あとはfirefoxのインストールをしてスキャンを実行し、設定ファイルを更新する。この繰り返し。2つのターミナルを開くと作業がしやすい。
<ターミナル1>
$ sudo aa-genprof /usr/bin/snap
スキャン画面が開く
<ターミナル2>
$ sudo snap install firefox
⇛エラーで終了する
<ターミナル1>
「s」を入力する。(syslogをスキャンして必要な設定を探してくれる)
エラーになったフォルダやファイルについてsnapからの利用を許すか否か聞いてくるので、基本的に[A]llowで応答する。
最後まで選択し終わったら[S]aveで設定を保存する
<ターミナル2>
$ sudo systemctl reload apparmor
これを何度も繰り返すとそのうちfirefoxのインストールが完了する。
しかしこれでインストールしたfirefoxを起動しようとすると失敗する。
なぜなら、Snapでインストールしたアプリはsnap→snap-confine→アプリの順に起動されるため、firefoxが使用するリソースをsnapも使用できるようにしなければいけない。
このためfirefoxの起動時にもsnapのAppArmorの設定をしなければいけない。
$ sudo aa-genprof /usr/bin/snap
(firefoxを起動→失敗)
ターミナルで[s]を押して権限を追加(繰り返し)
$ sudo systemctl reload apparmor
この繰り返しでsnap版のfirefoxを使用できるようになる。
Snapでインストールしたアプリが起動できない
原因
複数の原因が考えられるがアプリの起動をAppArmorが邪魔している場合が多い。
対策
/var/log/syslogに出るメッセージを参照して対処する。
FreeCADの起動をAppArmerが邪魔している例を操作で説明する
操作
ターミナル1(T1)でsyslogをリアルタイム表示しつつターミナル2(T2)で設定ファイルを編集し、ターミナル3(T3)で設定を反映させる。
例えばsyslogに
apparmor="DENIED" operation="open" class="file" profile="snap-update-ns.freecad" name="/proc/30447/maps" denied_mask="c"
と表示される場合は/var/liv/snapd/apparmor/profilesにあるsnap-update-ns.freecadを編集して/proc/*/mapsにcの権限を付与する。
$ sudo vi apparmor_parser -r /var/lib/snapd/apparmor/profiles/snap-update-ns.freecad
最後に以下を追加
/proc/*/maps rwkl, ← cの場合や判断がつかない場合はrwklすべてをつける
} ←このカッコより前に追加
$ sudo apparmor_parser -r /var/lib/snapd/apparmor/profiles/snap-update-ns.freecad ←設定を反映
具体的な手順は以下のようになる
T1 $ tail -f /var/log/syslog &
T2 $ cd /var/liv/snapd/apparmor/profiles ← Snapが起動するアプリのapparmorディレクトリ
FreeCADを起動する
T1のsyslogを観て設定ファイルを編集。
/usr/bin/snapが拒否されている場合は前述の通りaa-genprof /usr/bin/snapでスキャンした方が良い。