Ubuntuのインストール時に作成される初期ユーザに関するメモ。
初期ユーザは、以下のsetup-user
というパッケージに含まれるスクリプトで作成される模様。
setup-user
インストール後のUbuntuには含まれていないパッケージっぽい。
確認していないが、インストールメディアには含まれていると思われる。
フォワードプロキシを利用する環境での、Snapのプロキシサーバの設定方法をメモしておく。
$ cat /etc/os-release | grep PRETTY_NAME PRETTY_NAME="Ubuntu 20.04.1 LTS" $ snap --version snap 2.45.2 snapd 2.45.2 series 16 ubuntu 20.04 kernel 5.4.0-42-generic
プロキシサーバを設定するには、以下のコマンドを実行する。
$ sudo snap set system proxy.http=http://[proxserver]:[port] $ sudo snap set system proxy.https=http://[proxserver]:[port]
また、プロキシサーバの設定ができたかどうかを確認するには、以下のコマンドを実行する。
$ sudo snap get system proxy.http http://[proxserver]:[port] $ sudo snap get system proxy.https http://[proxserver]:[port]
$ cat /etc/os-release | grep PRETTY_NAME PRETTY_NAME="Ubuntu 20.04 LTS"
以下を実行する。
$ for s in $(gsettings list-schemas); do gsettings list-recursively $s; done
フォワードプロキシのあるテスト環境を簡単に作りたかったので、コンテナイメージsameersbn/squid
を利用して、DockerコンテナでSquidを立ててみた。
ただ、設定ファイルsquid.conf
の編集が必要になり、sameersbn/squid
をベースに独自のコンテナイメージを作成することで対処したので、そのメモを残しておく。
方針としては、ホスト側への依存を排除したかったので、設定ファイルsquid.conf
をホスト側に持たせないようにした。
$ cat /etc/os-release | grep PRETTY_NAME PRETTY_NAME="Ubuntu 20.04 LTS" $ docker --version Docker version 19.03.11, build 42e35e61f3
コンテナイメージsameersbn/squid
に入っているデフォルトのsquid.conf
は、ローカルホストからしかアクセスを受け付けない状態になっている。
そのため、以下のDockerfileを作成して、編集したsquid.conf
をコンテナイメージに配置することにした。
FROM sameersbn/squid:3.5.27-2 RUN perl -pi.bak -e 's/#(acl localnet|http_access allow localnet)/$1/' /etc/squid/squid.conf
squid.conf
の編集内容については、後ほど説明する。
このDockerfileをビルドして、redj/squid:3.5.27-2
というタグをつける。
バージョン番号はsameersbn/squid
に合わせた。
$ docker build --tag redj/squid:3.5.27-2 build
動作確認のために、docker run
する。
$ docker run --name squid --publish 3128:3128 redj/squid:3.5.27-2
以下のようにcurl
を実行して、コンテンツが表示されればOK。
$ export https_proxy=http://localhost:3128 $ curl https://www.example.com (コンテンツが表示される)
sameersbn/squid
の挙動DockerHubのsameersbn/squid
のQuick Startを参考に、以下のようにコンテナを立ち上げたが、
$ docker run --name squid --publish 3128:3128 sameersbn/squid
以下のように、プロキシを利用したcurl
の実行がエラーになった。
$ export https_proxy=http://localhost:3128 $ curl https://www.example.com curl: (56) Received HTTP code 403 from proxy after CONNECT
Squidを経由してHTTPエラー403が出る場合は、Squidの設定ファイルに記載したACL (Access Controll List)に問題があるらしい。
squid.conf
の見直しコンテナイメージsameersbn/squid
に含まれている、オリジナルのsquid.conf
を以下に抜粋する。
(前略) # Example rule allowing access from your local networks. # Adapt to list your (internal) IP networks from where browsing # should be allowed #acl localnet src 10.0.0.0/8 # RFC1918 possible internal network #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network #acl localnet src 192.168.0.0/16 # RFC1918 possible internal network #acl localnet src fc00::/7 # RFC 4193 local private network range #acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines (中略) # Example rule allowing access from your local networks. # Adapt localnet in the ACL section to list your (internal) IP networks # from where browsing should be allowed #http_access allow localnet http_access allow localhost (後略)
上記だと、許可されている(http_access allow
)のはlocalhost
というデフォルトのACLだけ。
以下のようにローカルネットワークのACLについてのコメントアウトを外すことで、うまく許可することができた。
(前略) # Example rule allowing access from your local networks. # Adapt to list your (internal) IP networks from where browsing # should be allowed acl localnet src 10.0.0.0/8 # RFC1918 possible internal network acl localnet src 172.16.0.0/12 # RFC1918 possible internal network acl localnet src 192.168.0.0/16 # RFC1918 possible internal network acl localnet src fc00::/7 # RFC 4193 local private network range acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines (中略) # Example rule allowing access from your local networks. # Adapt localnet in the ACL section to list your (internal) IP networks # from where browsing should be allowed http_access allow localnet http_access allow localhost (後略)
ただし、これだと許可し過ぎなので、本来はACLをもう少し絞るべきだと思われる。
squid.conf
のコメントを外すDockerfile内でsquid.conf
のコメントを外すために、ワンライナーを組み立てておく。
sed
でもよいが、個人的にはPerlの正規表現ほうが可読性が高く、メンテが楽に感じる。
$ perl -pi.bak -e 's/#(acl localnet|http_access allow localnet)/$1/' /etc/squid/squid.conf
オプションi.bak
で、squid.conf
を上書きしつつバックアップsquid.conf.bak
もとっておく。
以下は、ワンライナーの動作確認として、コンテナの中に入ってdiffをとった結果。
# diff /etc/squid/squid.conf.bak /etc/squid/squid.conf 975,979c975,979 < #acl localnet src 10.0.0.0/8 # RFC1918 possible internal network < #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network < #acl localnet src 192.168.0.0/16 # RFC1918 possible internal network < #acl localnet src fc00::/7 # RFC 4193 local private network range < #acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines --- > acl localnet src 10.0.0.0/8 # RFC1918 possible internal network > acl localnet src 172.16.0.0/12 # RFC1918 possible internal network > acl localnet src 192.168.0.0/16 # RFC1918 possible internal network > acl localnet src fc00::/7 # RFC 4193 local private network range > acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines 1190c1190 < #http_access allow localnet --- > http_access allow localnet
以下のように、コンテナの中の/etc/squid/squid.conf
を直接編集する同様のことができるが、長い目で見ればコンテナイメージを作成して管理したほうが楽だと思う。
$ docker create --name squid --publish 3128:3128 sameersbn/squid $ docker cp squid:/etc/squid/squid.conf squid.conf $ perl -pi.bak -e 's/#(acl localnet|http_access allow localnet)/$1/' squid.conf $ docker cp squid.conf squid:/etc/squid/squid.conf $ docker start squid
$ cat /etc/os-release | grep PRETTY_NAME PRETTY_NAME="Ubuntu 20.04 LTS"
dockerをsudoしなくても実行できるようにしたかったので、ユーザredj
に対してセカンダリグループdocker
を追加した。
しかしながら、ログアウトしてログインし直しても、ユーザredj
にセカンダリグループdocker
が反映されなかった。
本来は以下のように998(docker)
が反映されていてほしかったが、
$ id uid=1000(redj) (中略),132(sambashare),998(docker)
実際には以下のように反映されていなかった。
$ id uid=1000(redj) (中略),132(sambashare)
Ubuntu 20.04のディスプレイマネージャであるGDM3について、ユーザのログアウトの後、暫く関連するプロセスを終了しないことが原因らしい。 rootで直接ログインしてプロセスを確認すると、以下のプロセスが暫く残っていた。
# ps -ef | grep -E '^redj' redj 22751 1 0 23:31 ? 00:00:00 /lib/systemd/systemd --user redj 22753 22751 0 23:31 ? 00:00:00 (sd-pam) redj 24148 22751 4 23:33 ? 00:00:00 /usr/bin/pulseaudio --daemonize=no --log-target=journal redj 24176 22751 0 23:33 ? 00:00:00 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
どうもログアウトとログインを素早く行うと、その関連するプロセスが再利用されて(?)、ユーザ情報のリフレッシュがされないらしい。 ログアウト後、20秒ほど(?)待つと関連プロセスが終了するので、その後にログインすると解決する。
Manage Docker as a non-root user
After adding a group, logout+login is not enough in 18.04?
$ cat /etc/os-release | grep PRETTY_NAME PRETTY_NAME="Ubuntu 20.04 LTS"
CPUがハードウェア仮想化をサポートしているかを検査する。 以下のコマンドを実行した結果、1以上が表示されればOK。
$ egrep -c '(vmx|svm)' /proc/cpuinfo
$ sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
$ sudo apt install virt-manager