Monthly Archives: 8月 2015

[FreeBSD] jailのetcを更新する(qjail)

Pocket

qjailだと、ここで示したようにqjail update -bでjailのバイナリアップグレードをしてくれる。

アップグレードといっても、ホストのバイナリをjailのsharedfsにまるまるコピーしているだけである。
ということは、通常のアップグレードで更新されるはずの/etc下ファイルには一切、手を付けないということ。

jailのetc更新にはmergemaster

実はmergemasterは更新するフォルダを-Dオプションで選ぶことができる。
つまり、ホストのsrcをベースにjailのetcを更新できる。

jailの/etcを更新するには

jail ex01を更新する場合は、以下の通り。-D以外のオプションはUPiF。

新しくjailを作る際のテンプレートも更新しておく。

以上

[FreeBSD][メモ] PlexConnectに関する情報

Pocket

PlexConnect

https://github.com/iBaa/PlexConnect

最低限入れておくべきもの(jailを想定)

  • plexmediaserver(これは当然)
  • ca_root_nss
  • python2.*

スタートアップスクリプト

/usr/local/etc/rc.dに設置。
/etc/rc.confにplexconnect_enable=”YES”

[FreeBSD] pkg quarterlyとlatestレポジトリの共存

Pocket

ここでも触れたが、10.2-RELEASEから、pkgレポジトリのデフォルト参照先がlatestからquarterlyになった。
具体的には/etc/pkg/FreeBSD.confの内容が変わった。

だからして、引き続きlatestを参照したい場合には、/etc/pkg/FreeBSD.confを書き換えればいいや、と思っていたものの、どうもこのファイルは「なるべく触るな」ということのようである。

つまり、もしもの時にlatestを参照する場合には、quarterly(すなわちデフォルト)の他に、latest向けのレポジトリ設定ファイルを作る必要がある。

それぞれを、いちいちenable/disableするのも面倒なので、latest、quarterlyの双方を参照するよう、Multi-repositoryの設定をした。

本記事ではMulti-repositoryの設定方法について示す。
と同時に、普段はquarterlyを使い、特定のときだけlatestを使うための方法を示す。

まずデフォルトの/etc/pkg/FreeBSD.confについて

/etc/pkg/FreeBSD.confは触るな

/etc/pkg/FreeBSD.confの中身を見てみると、以下のような記載がある。

すなわち、この設定を無効化したい場合には、/etc/pkg/FreeBSD.confは触らずに、/usr/local/etc/pkg/repos/FreeBSD.confを作ったうえで、無効化の宣言をしろ、ということである。

/etc/pkg/FreeBSD.confはデフォルト設定として扱いたい雰囲気丸出しであるが、そうならrc.confのデフォルト設定が/etc/defaultsの下にあるように、/etc/pkg/defaults/FreeBSD.conf的なものを作ってくれても良いのではないかと思った。

しかしそもそも、レポジトリの設定ファイルはどのように読み込まれるのであろうか。

レポジトリ設定ファイルの読み込まれる順番

/usr/local/etc/pkg.confで指定する。
上記ファイルの中に、REPOS_DIRがある。
pkgは、ここに記載された順番通りにレポジトリ設定ファイルを読み込む。
特に変更していないのであれば、内容は下記の通り。

仮に複数のディレクトリに、同じレポジトリに対する設定ファイルがあったならば、後から読み込まれたもので上書きされる。
同じディレクトリに複数のファイルがあったならば、ファイルはアルファベット順に読み込まれる。

以下、マニュアルからの引用

Repositories are processed in the order they are found on the REPOS_DIR search path, with individual repository configuration files in the same directory processed in alphabetical order. Settings from files later in the search path will override those from earlier ones.

だから、/etc/pkg/FreeBSD.confのコメントに書いてある通り、/usr/local/etc/pkg/repos/FreeBSD.confでFreeBSDレポジトリを無効にする宣言をすると、設定が上書きされ、めでたくFreeBSDレポジトリは無効になる。

ところで、同じディレクトリ内の読み込み順序はアルファベット順、というのがキモで、実はレポジトリの名前と設定ファイルの名前は別々でも構わない。
だから、読み込ませたい順番に応じて、ファイル名の頭に数字を入れてもよい。

latestレポジトリ向けの設定はどこに?またどうやって?

さて。
仕組みはわかった。
どうも/etc/pkg/は触ってほしくないようだから、/usr/local/etc/pkg/reposにlatest向けの設定ファイルを置けばよいのだろう。
しかしちょっと待て。
latestとquarterlyを両立させるにはどのようにしたら良いのであろうか。

レポジトリの優先度について

複数のレポジトリを参照する場合、どちらをどの程度優先するか。
レポジトリ設定ファイルにpriorityという設定項目があるので、それを使えば優先度の設定ができる、ようだが。

以下はマニュアル。

レポジトリ設定ファイルにPRIORITYで優先度を指定すればよい。
数値が高ければ高いほど、優先度が高い。

ふむふむ。
では、動作は?

優先度設定されたときの動作

「複数のレポジトリが与えられた場合、pkgは、-rで参照先レポジトリを明示されない限り、PRIORITYの順番で検索を行う。」

ほほう。なるほど。
続けて読む。

「異なるバージョンのpackageが見つかった場合、最も高いバージョンが選ばれる。」

アレ!? 話が思わぬ方向に向かってきたよ!
優先度の高いレポジトリからインストールしてくれるんじゃないの!?

「低いバージョンが優先度の高いレポジトリにあったとしてもこの動作は変わらない。」

Oh…。

「さらにさらに、仮にバージョンを指定してインストールを実行しても、
動作は変わらない。
高いバージョンが見つかったら問答無用で新しい方をインストールする。」

ぐぬぬ。

基本、quarterlyを使い、特定のときだけlatestを使うためには

上記の動作を踏まえ、基本、quarterlyを使い、特定のときだけlatestを使うためには、以下の方法がある。

A. 都度、レポジトリ設定ファイルを使い分ける。
B. マルチレポジトリにしつつ、インストール時に考慮をする。

ここでA.を選ぶと芸がないので、B.の方法を示す。
B.の方法と言っても、以下の通りでOK。

最初にquarterlyレポジトリからインストールする。
-rオプションで参照先レポジトリを明示すること。

pkgは、そのpackageをどこからインストールしたかを覚えている。
後に示す設定を変えない限り、アップグレードの際には同じレポジトリを参照してくれる。
だから、最初のインストールでquarterlyを選んでおけば、次回アップグレードのときにも、原則としてquarterlyが選ばれるというわけ。

これをコンサバティブアップグレード(conservative upgrade)といい、pkg.confでデフォルト有効になっている。

説明を読むと;

「(常に高いバージョンを選ぶ)この動作を変更するには、最初のインストールで
-rオプションによりレポジトリを選ぶ。
その後のアップグレードで同じレポジトリを使うには、pkg.confの
CONSERVATIVE_UPGRADEでtrueを選べばよい。」

以上

[メモ] 写真、ホームビデオ等をため込んだFreeBSDホストのjailにPlex Media Serverをインストール

Pocket

件名の通り。
FreeBSDホストに格納してある写真、動画を各種メディアプレイヤー向けに公開したいが、オリジナルのホストを直接は公開したくないな、というときのため。
jailなら物理的に同じマシンを使いつつ、論理的には別マシンとして振る舞えるので適任である。

jailの作成

jailとくればezjailが定番だが、私はqjailが好き。
qjailについてはこちらを。

以下、qjail installまで終わっている前提で勧める。

flavorにssh-defaultを選んでplexという名前で作成。

jail plexをスタートし、pkgをインストール
インストールはとにかくpkgコマンドを叩けばOK。

plexmediaserverインストール

そのままplexmediaserverをインストール。
もちろん、マシンは64bitです。

plexmediaserver起動

rc.confに一行加えてさっさと起動。

ブラウザからhttp://<IPアドレス>:32400/webに繋ぐ。
もし「このサーバに権限(permission)がない」というようなことを言われたなら、以下のファイルを変更するといいかもしれない。
「かもしれない」というのは、以下の通り変更したら症状が改善したので、確認のために戻してみたら、二度と症状が再現しないから。
うーん…。

いったんそのままにしておく。

plexmediaserver向けにディレクトリをマウント

jailから抜けてホスト側で作業
jailであるplexのファイルシステムは、ホスト側では/usr/jails/plexにある。
/usr/jails/plex/がjail plexのルートディレクトリ。
だからホストの/warehouseにデータがあるとして、/usr/jails/plex/mediaにマウントすれば、jail plexでは/mediaとして見える。

せっかくだからread onlyでね。

jail plexから見えるのを確認したら、ホスト側のfstabに書き込み。

あとはブラウザからplex media serverにつないで、メディアの追加で/mediaを選ぶだけ

以上

atomのpackageをproxyの背後からインストールするには(Windows 7)

Pocket

atomのpackage管理をproxy越えで行う方法を示す。
atomは1.01、Windows 7である。

atomのpackage管理について

atomのpackageはapm(atom package manager)で管理される。
proxyの背後からapmを使うには、ちょっと面倒な作業が必要だ。

apmはそれ自体で独立しているCUIプログラムである。atomの中の機能ではない。
だから、proxyの設定をしようとしたら、atomの設定を変更するのではなく、apmの設定を変更しないといけない。
つまり、atomのシャレオツなインタフェース経由ではなく、apmをコマンド操作したり、テキストファイルを修正することが必要だ。

なお、apmも実はwrapperなのだが、proxyの設定に限れば無視して構わない。

 

apmはどこにある?

apmは以下の場所にインストールされている。

拡張子が.cmdで、中身を見ると、実体は同ディレクトリにあるnode.exeであることが分かるが、ここでは関係ない。

コマンド操作をするならパスを通さないといけないところだが、面倒くさい。
どうせ滅多に使わないので、<インストールディレクトリ>\Atom\resources\app\apm\bin\ で作業をする。

apm helpで使い方の説明が表示される。

 

apmの設定方法は二通り

apmの設定方法には二つの方法がある。
一つは、apmをコマンド操作する方法
もう一つは、設定ファイルを直接書き換える方法

一つ目の、コマンド操作での設定方法だが、結局のところ言われた通りに設定ファイルの書き換えをしている「だけ」なので、実施的な違いはない。
もう少し踏み込んでいうと、仮にコマンド操作で設定をしても、設定値の妥当性はいっさい、してくれない。
仮に間違った設定値を指定しても、言われた通りに設定ファイルに加えるだけなので注意。

 

【参考】apm設定ファイルのひな形作成

apmの設定は、ユーザごとのテキストファイル.apmrcで変更する。
ところが、インストール直後には、(ユーザごとの).apmrcは存在しない。
自分で作っても良いのだが、以下のようにするとひな形が作られる。

上記コマンドを実行すると、メモ帳が開き、.apmrcの内容が表示される。

何もしないで閉じてもよいし、後述するように、後で同じファイルを開くので、今ここで書き換えてしまってもよい。
書き換える場合は開きっぱなしにしておく。

なお、ひな形を作ったとしても、コマンド経由で書き換えた場合、コメント行はバッサリ削られてしまうようだ。

 

apm設定ファイル.apmrcの保存場所

前章の手順に沿うと、以下の場所に.apmrcが生成される。
いわゆるホームディレクトリである。

なお、以下にも同じようなファイルがある。
が、これはデフォルト設定(global config)なので触ってはいけない。

 

apm設定ファイルでproxy設定する場合

設定ファイルを直接書き換える場合には、上記のファイルを開き、以下の行を書き込むだけ。

httpsの接続で問題の出る場合には、以下も追加する。

 

コマンドで設定する場合

apmを実行できる状態で、以下のようにコマンドを叩く

apm config listで設定内容を確認できる。

もし設定変数を間違えてしまった場合には、以下のようにすれば削除できる。
(https-proxyとすべきところ、https-proproxyしてしまったと仮定)

 

設定変数名について(https-proxy、proxy)

設定変数名について、webを検索すると、proxyではなくhttp-proxyだったり、https-proxyではなくhttps_proxy(httpsとproxyの間がアンダースコア)になっている情報もある。
少なくとも1.0.3の時点では、それぞれproxy, https-proxyが正しい。
ソースから確認できる。

https://github.com/atom/apm

[FreeBSD] 10.2-RELEASEから適用されるpkg quarterlyてなんだ。

Pocket

10.2-RELEASEから、pkgのデフォルト参照先レポジトリが”quartely”のものになる。

◎pkg.confの変更

ご覧のとおり、いままでは”latest”。
これは言わばpkgのheadのようなもので、最新のpkgは手に入るものの、うっかりインストールすると地雷を踏むことがが多かった。

quarterlyは上記の問題を解決するために設けられる。
中の人によれば「意図的に更新速度を控えめにすることで、問題の発生を抑える一方、セキュリティ更新は受け取れるようにする」とのこと。
もちろん、望ならば今まで通りlatestを参照することもできる。

“In general, the quarterly package set is less prone to having build failures, since the changes in the branch are (by intent) less intrusive, while still receiving security updates. “

latestからquarterlyに変更してバージョンチェックしてみると、すでにインストール済みのpackageからバージョンの下がるケースも見られた。

詳細は待て10.2-RELEASEのアナウンス。

“(This will be noted in the final 10.2-RELEASE announcement, as well as
the release notes, and will also include instructions on how to switch
to the ‘latest’ branch if that is what is desired.)”

中の人の発言は以下から引用。
https://lists.freebsd.org/pipermail/freebsd-stable/2015-July/082905.html

[Python] wxPythonで、タイトルバーにアイコンを表示するには

Pocket

Pythonからpy2exeなどでWindowsアプリケーションを作成したときに、アイコンを設定することができる。
しかし、作成したアプリケーションがGUI版の場合、GUIタイトルバーのアイコンを設定するには、ちょっとしたテクニックが必要である。
py2exe等でアイコン設定済み、かつGUIはwxPythonで作成している前提で、その方法を示す。

サンプル

Frameクラスの初期化defの中で、上記のような記載を加える。
もちろんmyWxApp.exeは最終的なファイル名。

説明

py2exe等でiconファイルを設定するというのは、つまり実行ファイルに埋め込むということ。
上記のようにSetIconで自分自身の実行ファイルを参照すると、埋め込んでおいたアイコンファイルを読み取ることができる。

元ネタ
How to use py2exe icon_resources in wxPython application?

【参考】wxPython

http://ja.wikipedia.org/wiki/WxPython
wxPythonは、「wxPythonはPythonで記述されたクロスプラットフォームなウィジェット・ツールキットである。」
要するにPythonをGUIで動かすツールキット。OSをまたがって使用できる。