Proxmox VEのLXCコンテナにavahi-daemonを入れようとしてハマった話
Proxmox VEが4.0にバージョンアップしてLXCベースのコンテナが使えるようになったので、コンテナをぽこぽこ作っててハマったメモです。
コンテナのテンプレートはみんな大好きUbuntu Serverの15.04(ubuntu-15.04-standard_15.04-1.amd64.tar.gz)です。
2コンテナ目からavahi-daemonのインストールがコケる
IPアドレスお手軽解決のavahi-daemonを各コンテナにインストールしていたところ、2つ目のコンテナでapt-getが失敗する怪現象が発生しました。
root@FileServer:~# apt-get install avahi-daemon ・・・ Setting up avahi-daemon (0.6.31-4ubuntu4) ... update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults Job for avahi-daemon.service failed. See "systemctl status avahi-daemon.service" and "journalctl -xe" for details. invoke-rc.d: initscript avahi-daemon, action "start" failed. dpkg: error processing package avahi-daemon (--configure): subprocess installed post-installation script returned error exit status 1 dpkg: dependency problems prevent configuration of libnss-mdns:amd64: libnss-mdns:amd64 depends on avahi-daemon (>= 0.6.16-1); however: Package avahi-daemon is not configured yet. dpkg: error processing package libnss-mdns:amd64 (--configure): dependency problems - leaving unconfigured Processing triggers for dbus (1.8.12-1ubuntu5) ... Processing triggers for ureadahead (0.100.0-19) ... Processing triggers for systemd (219-7ubuntu6) ... Errors were encountered while processing: avahi-daemon libnss-mdns:amd64 E: Sub-process /usr/bin/dpkg returned an error code (1)
インストール後の自動起動がコケた結果、パッケージのインストールに失敗しているようです。
ファイルのインストール自体は済んでるみたいなので、試しに手動で起動してみます。
root@FileServer:~# avahi-daemon Found user 'avahi' (UID 109) and group 'avahi' (GID 119). Successfully dropped root privileges. chroot.c: fork() failed: Resource temporarily unavailable failed to start chroot() helper daemon.
なんでかふわっとした理由でfork()が失敗してますね。
ここまでの情報を使ってググると、ズバリの英語ページが見つかりました。
Avahi, setrlimit NPROC and lxc | Playing on the frontier
どうやら、avahi-daemonの中で作れるプロセス数の条件が制限されている模様です。
その制限がなぜかコンテナ間で共有されていて、複数コンテナの合計でこの制限に引っかかるっぽいですね。実際、1つめのコンテナを落とすと起動に成功しました。
# Linuxのネームスペースのサポートが未だ完璧でないんでしょうか。
# 応用したら別のコンテナをDoS出来そうでヤバいすね。
対策
avahi-daemonのインストール失敗後、/etc/avahi/avahi-daemon.confのプロセス数制限を無効にします。
61 [rlimits] 62 #rlimit-as= 63 rlimit-core=0 64 rlimit-data=4194304 65 rlimit-fsize=0 66 rlimit-nofile=768 67 rlimit-stack=4194304 68 #rlimit-nproc=3 ←コメントアウト。
avahi-daemon.conf編集後、再度apt-get install avahi-daemonしてインストールを成功させればOKです。
既にインストール済みのコンテナのavahi-daemon.confも同様に修正しておきましょう。
mikutter on Mac OS XのためにCairoとPangoのオレオレPortfileを作った話
OS X El Capitanへのアップグレードに伴いMacPortsをアップデートしたところ、cairoのQuartzサポートが悪さをする事象が再発しました。
MacPortsのアップデートでactivateしていた古いパッケージが破棄された模様。
今使ってるsvnから古いPortfileを持ってくる技も今後使えなくなる可能性があるので、いい感じのPortfileを書いて、オレオレで抱え込むようにします。
方針
variantの+quartzが悪さをしているのは確実なのだけれど、+quartzがデフォルトで無効化出来ないようになっているので、その辺りをハックしたPortfileを作ります。
MacPortsにオレオレツリーを追加する。
ここでは、自分のホームディレクトリにmacportディレクトリを作ってそれをオレオレツリーにします。
mkdir ~/macports vi /opt/local/etc/macports/sources.conf
・sources.conf
8 # To add a local source, add a "file://" entry. 9 # 10 # Example: file:///Users/landonf/misc/MacPorts/ports 11 # 12 # To prevent a source from synchronizing when `port sync` is used, 13 # append "[nosync]" at the end. 14 # 15 # Example: file:///Users/landonf/misc/MacPorts/ports [nosync] 16 # 17 # Note that MacPorts parses source URLs in order; when a port appears in 18 # multiple sources, it installs the first occurrence. For local sources 19 # to shadow remote ones, "file://" URLs must come before other URLs. 20 file:///Users/moguno/macports ←オレオレツリーのパスを追加
ハックするPortfileをもらってくる。
CairoとPangoを本家ツリーから頂いてきます。
cd /opt/local/var/macports/sources/rsync.macports.org/release/tarballs/ports/ tar cf - graphics/cairo | tar xf - -C ~/macports/ tar cf - x11/pango | tar xf - -C ~/macports/
Portfileの編集
デフォルトで有効になる+quartzをぶっ潰します。
cairo
118 #default_variants +quartz ←コメントアウト 119 # Don't allow Quartz support to be disabled. Keep the variant for awhile in 120 # case any dependents are using the active_variants portgroup to check for it. 121 #variant_set quartz ←コメントアウト
pango
62 #default_variants +quartz ←コメントアウト 63 # Don't allow Quartz support to be disabled. Keep the variant for awhile in 64 # case any dependents are using the active_variants portgroup to check for it. 65 #variant_set quartz ←コメントアウト
最後にPortIndexファイルを作って完成です。
cd /Users/moguno/macports portindex
インストール
通常通りインストールすると、オレオレツリーを優先して使ってくれます。
sudo port install cairo sudo port install pango
こんな感じで、x11にのみ+がついていればOKです。
sudo port info cairo pango cairo @1.14.2_1 (graphics) Variants: opengl, quartz, universal, [+]x11 ←これ Description: Cairo is a vector graphics library with cross-device output support. It is designed to produce identical output on all output media while taking advantage of display hardware acceleration when available (e.g. through the X Render Extension). Homepage: http://cairographics.org/ Extract Dependencies: xz Build Dependencies: pkgconfig Library Dependencies: libpixman, glib2, fontconfig, freetype, libpng, zlib, expat, xrender, xorg-libXext, xorg-xcb-util Conflicts with: cairo-devel Platforms: darwin, macosx License: LGPL-2.1 MPL-1.1 Maintainers: ryandesign@macports.org -- pango @1.38.0 (x11) Variants: quartz, universal, [+]x11 ←これ Description: The goal of the Pango project is to provide an open-source framework for the layout and rendering of internationalized text. Homepage: http://www.pango.org/ Extract Dependencies: xz Build Dependencies: pkgconfig Library Dependencies: glib2, cairo, harfbuzz, gobject-introspection, Xft2 Conflicts with: pango-devel Platforms: darwin License: LGPL-2 Maintainers: ryandesign@macports.org, openmaintainer@macports.org
これで安定してMacでmikutter出来ますね。
Bonjour for Windows不要!Windows10マシンに".local"でアクセスしよう!
2017年10月24日追記
Fall Creator UpdateではmDNSのサポートが外されているっぽいです。
はじめに
家庭内LANのIPアドレスの管理って面倒ですよね。
一般のご家庭はDHCPから払い出されたのを空気の様に使ってればいいですが「家庭内サーバを立てよう!」とか変な気を起こすと、固定IPアドレスの管理を未来永劫しいられる事になります。
仮想マシンがぽこぽこ増えたり減ったりするこのご時世。めんどいですね!!
そんなあなたに朗報です。
Windows10でサーバレス&オープンなホスト名解決の仕組みであるmDNSがサポートされました。
情報ソースはこちらです。
仮想化雑記帳: Windows 10 and Bonjour
Macで言う所のBonjour。*NIXで言う所のavahiですね。
Windows8まではmDNSを使うためにiTunesもしくはBonjour Print Services for Windowsに含まれるBonjour for Windowsをインストールする必要があったので、今回の標準搭載はかなり嬉しいです。
情報ソースはプレビュー版での検証ですが、製品版でもちゃんと実装されています。
しかしながらプレビュー版と同じく、デフォルトではファイアウォールがmDNSのパケットを捨てています。(意味なくね?)
Windowsファイアウォールの設定
コントロールパネルを起動する
Windows10ではアクションセンターの「すべての設定」が公式の設定画面になっていますが、できる事が異様に少ないので昔ながらのコントロールパネルも現役です。
左下のWindowsボタンを右クリックして「コントロールパネル」を起動して下さい。
テスト
上記情報ソースに書かれている様に、別の端末から"ホスト名.local"にpingを打ってIPアドレスが引けているか確認して下さい。
$ ping venue8.local PING venue8.local (192.168.11.12): 56 data bytes
Mac OSXをお使いの方は、dns-sdコマンドでも確認できます。
$ dns-sd -G v4 venue8.local DATE: ---Sat 12 Sep 2015--- 9:28:57.904 ...STARTING... Timestamp A/R Flags if Hostname Address TTL 9:28:58.218 Add 2 4 venue8.local. 192.168.11.12 60
最後に
Windows10のmDNSサポートのおかげで、Mac、*NIX、Windowsを横断したホスト名解決がスマートに実現可能になりました。
家庭内サーバであればIPアドレスを固定することなく運用が可能です。
後はAndroidとルータがmDNSを喋れれば、本当にIPアドレスを意識しない家庭内LANになるんですけどね。
THE QUEEN OF HEART '99 with Second Edition 対戦格闘ゲーム PC 渡辺製作所
- 出版社/メーカー: 渡辺製作所
- メディア: CD-ROM
- この商品を含むブログを見る