Ubuntuでハマったら

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でスキャンした方が良い。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です