Category Archives: FreeBSD

[FreeBSD][メモ] portsでmake cleanを依存portsも含めて実行するには

Pocket

さきにメモ。

portsにおいて、依存も含めた全部のportsでmake cleanをするには以下のようにする。

ネタ元はfreebsd forumから。

 

久しぶりにportsを使うと、なんでこんな面倒なものに我慢できていたんだろう?と思う。
それは単なる愚痴として。

Vagrantやjailなどの仮想技術がとても便利になってきて、実現したい機能ごとに環境を分けるようになる。
すると、環境ごとにフレッシュな状態から機能を構築することが多くなり、自然とportsのコンパイル時間の長さが目につくようになったのだと思う。

たとえばredmineを使いたいとして、pkgでインストールしようとしても、コンパイルオプションが期待通りではないので、やむなくportsでインストールしようとする。
ところが、インストールされたものがない、フレッシュな状態でredmineをportsから入れようとすると、依存の端から端までportsで入れようとするので、とんでもない時間がかかるのである。
特定のもの以外は全部pkgで入れられるようにならないものか。

No tags for this post.

[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] 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] 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

[FreeBSD][メモ] ACL(Access Control Lists)を有効にする

Pocket

ACLとは、一般的なUNIXのパーミッション制御をさらに拡張したものである。
FreeBSDのハンドブックは以下の通りであるが、どうも実動作とハンドブックの内容に食い違いがあるようなのでメモ。

https://www.freebsd.org/doc/ja_JP.eucJP/books/handbook/fs-acl.html
https://www.freebsd.org/doc/en/books/handbook/fs-acl.html

ACLはファイルシステムごとに有効/無効を設定できる。
設定変更は、そのファイルシステムをumountするか、リードオンリーの状態でしかできない。
したがって、ルートファイルシステムの設定変更は、通常起動した後ではできない。

 

ACLの有効/無効化

GENERICカーネルであればACLが使える。

ACLを有効にするには、/etc/fstabの当該ファイルシステムオプションにaclsを追加し、再起動すればよい。
もちろん、ルートファイルシステム以外なら、再起動しないまでも、いったんumount、mountすればよい。
mount -uによる再マウントでは有効にならないので注意
fstab設定例は後述

 

ACLの有効/無効化のしくみ

ファイルシステムヘッダのスーパーブロックにACLの有効/無効フラグがある。tunefsコマンドでフラグを変更できる。
fstabでaclsが指定されていると、マシン起動時に、tunefsでスーパーブロックを書き換えののち、マウントされる。

 

注意点(一度ACLを有効にしたら永続…?)

ハンドブックによれば、一度ACLを有効にしたらその設定が永続する、という。
「スーパブロックフラグを設定すると、fstab に記述されていなかったり、デバイスの順番が変わってしまっても、常に ACLs が有効な状態でマウントされます」
※英語版も同じ。

 

ハンドブックとの違い?

ところが手元のマシンの動作を見ると、tunefsによる設定に関わらず、fstabのオプションしか参照していないようだ。
つまり、fstabでaclsを削ると、ACL無効でマウントされるようだ。
(fstabにaclsが無い場合、tunefs -a disableが実行される?)

それはともかく、上記を踏まえた設定例を示す。

 

fstabの設定変更

fstabのOptionsのところ、カンマに続けて「acls」と記載。
ルートファイルシステムなら、再起動。
ルートファイルシステム以外なら、umount,mountでよい。
ACLの設定はハンドブック参照。

設定前

設定後

以上。tunefsは考えなくてよし。

以下は記録。

 

tunefsのうごき

tunefs -pでACLの状態を確認できる。

tunefs -a enable/disableでACLの有効、無効を設定できる

/dev/ada0p2 は、ルートファイルシステムなのだが、そのまま起動すると、あるいは再起動するとtunefs -pの結果がdisabledに戻ってしまう。
さらに分からないのは、fstabにaclsの記載あるなしに関わらずdisabledになること。

 

実験(fstabしか見ていない…?)

fstabにaclsを記載し、あるファイルにsetfaclでACLを設定する。
ls -laで確認すると以下のように+が付く。

その後、fstabからaclsを削除し、再起動したのち、ls -laで確認すると+がない。

なお、上記の再起動前後を通してtunefs -pの結果はdisabled.

[FreeBSD] Samba 3.xからSamba 4.xへの移行

Pocket

Sambaの4.2.0リリースに伴い、3系列サポートが終了する、とのことなので、4.xに移行した。
顛末を記す。

Samba 3系列のサポート終了について

一応はソースを。
4.2.0のリリースノートに記載されている。

https://www.samba.org/samba/history/samba-4.2.0.html

With the final release of Samba 4.2, the last series of Samba 3 has been discontinued! People still running 3.6.x or earlier,should consider moving to a more recent and maintained version (4.0 – 4.2).

 

Samba 4について(Active DirectoryにしなくてもOK)

Samba 4はActive Directoryに対応しているが、従来のドメイン管理(NT4-style)もできる。
Active Directory対応の追加により、従来機能が差し替わることはないし、テストも続けられる。

なお、3から4へのアップデートで、自動的にActive Directoryへ変更されることはない。

 

移行先の選定(4.1にした)

どうせ移行するなら4.2がいいなと思ったんだけど、2015/4/28現在、4.2のports/packageはない。
しかたなく4.1にした。

 

移行にあたっての注意

4へのアップグレードにあたり注意すべきことは以下の三点である。
うっかりすると、マシン起動時にsambaが起動しなかったり、共有が消えたり、ユーザがアクセスできなくなったりする。あな恐ろし。

  1. rc.conf(マシン起動時のsamba起動設定)の書き換え
  2. samba設定ファイルの移行
  3. sambaユーザデータベースの移行

 

インストール(アップグレード)の流れ

全体の流れを示す。

  1. samba3を停める。
  2. samba3の削除
  3. samba4のインストール
  4. rc.confの書き換え
  5. 設定ファイルの移管
  6. ユーザーデータベースの移管
  7. 起動

 

Samba3の停止

アンインストールの前に。
なお、serviceコマンドで使うSambaの識別子は、3の”samba”が4では”samba_server”に変わる(後述)。

 

Samba3の削除とSamba4のインストール

pkgならsamba4のインストール時にsamba3を削除してくれる。
samba4インストール後のメッセージは超重要。

 

rc.confの書き換え

本記事の手順上、rc.confの書き換えをここに記載しているが、本来は設定ファイルの正常性確認や検証を済ませてからのほうがよい。

sambaの3と4では、rc.confの書式が違う。
ここを忘れたままだと、serviceコマンドでのsambaサーバの操作ができないし、次回のマシン再起動時にsambaが自動起動しない。

samba3だと;
samba_enable=”YES”
samba4だと;
samba_server_enable=”YES”

したがって、rc.confは以下のようになる。
もちろん、samba3の方は、不要なら削除して構わない。

 

設定ファイルの移管

sambaの3と4では、設定ファイルの場所は/usr/local/etc/の下で変更ないのだが、ファイル名が異なる。
気づかずにsamba4を起動すると共有フォルダが消える。

samba3だと;
smb.conf
samba4だと;
smb4.conf

samba3の書式はsamba4でも有効なので、コピーするかリンクを張る。
私はリンクにしておいた。

ユーザーデータベースの移管

samba向けのユーザデータベースも移管が必要である。
これをしないとユーザごとの認証ができない。
これには、ほとほと困らされた。

ユーザデータベースの置き場所は以下の通り。

samba3だと;
/usr/local/etc/samba/
samba4だと;
/var/db/samba4/private/

したがって、/var/db/samba4/privateとディレクトリを作成し、/usr/local/etc/samba/の下にあるファイルをコピーすればよい。

なお、samba4のユーザデータベース置き場をどう調べたかというと、ビルドオプションを表示させてPRIVATE_DIRを見た。
(こんなのすぐ分かるかよ!)

 

起動

起動前にtestparmでsmb4.confのチェックをするのはいい習慣であります。

では起動。
rc.confでsamba_server_enable=”YES”と記載しているなら、以下の通り。

していないなら、以下のように「onestart」にする。

以上。

[FreeBSD][メモ] pkgngで複数レポジトリ使ってる奴は1.4.3に上げておけ

Pocket

pkgngが1.4.3に上がった。
これより前のpkgngでは、複数レポジトリをうまく扱えない。
したがって、レポジトリ参照先にpourdriere等による自前レポジトリと公式レポジトリを設定している諸氏は1.4.3に上げるのが得策。

具体的には以下。
ports-mgmt/pkg: pkg install uses the wrong repository for some packages
要するに、追加したレポジトリからpkgをインストールしても、pkgngが公式レポジトリからpkgをダウンロードしようとする。

1.4.3では複数レポジトリを扱うための仕組みが追加された。
端的に言えば、複数レポジトリに優先度設定ができる。
まずpkg.confでCONSERVATIVE_UPGRADEを有効にし、各レポジトリの設定でPRIORITYを整数値で指定すれば、複数レポジトリの優先度を決められる。

詳細はman pkg.confせよ。
CONSERVATIVE_UPGRADEはこちら。

PRIORITYはこちら。

[FreeBSD] システムアップグレード時にはzpool(ZFS)のアップグレードも忘れずにNE!

Pocket

10.1-RELEASEにアップグレードしたけどzpool(ZFS)のアップグレードを忘れてたのでメモ。
アップグレードでfeaturesがいくつか追加されるから、まあやっておくのがおすすめ。
9.x系列からのアップグレードの場合は、以下を参照のこと。
[メモ]zpoolのupgrade
[メモ]zpoolのVersionについて(Versionナンバはもう使われない)

10.1-RELEASEで追加されるfeaturesは以下の通り。
詳細はman zpool-featuresせよ(手抜き)。
この中ではbookmarksがすごいと思うよ。

アップグレードが必要かどうかは、zpool statusで分かる。

前も書いたと思うけど、ZFSは「何をすべきか」まで教えてくれるのがとても助かる。
ファイルシステムなんてそんな頻繁にいじらないし、久しぶりだとコマンド忘れてしまうからね。
この場合はzpool upgradeせよと。

まず一般権限でzpool upgrade。

追加されるfeaturesを確認したらスーパーユーザでもう一度zpool upgrade。
すぐ終わる。
お約束だが、フルバックアップは取っておこうな!

[FreeBSD] 10.1-RELEASEのfreebsd-updateがご乱心した件(消えたlib32の怪)

Pocket

ここ最近にamd64のFreeBSD 10.1-RELEASEでfreebsd-updateを実行すると、①「/usr/lib32/をインストールしようとする」、②「ルートディレクトリを削除しようとする」なんて事が起こる。

いずれも大きな問題はない。

[FreeBSD-Announce] [HEADS UP] freebsd-update issues in 10.1

背景は以上のリンク先で示されるとおりである。

すなわち。
10.1アップグレード用のfreebsd-updateパッチを作る際に「lib32のことをうっかり対象外にしてしまいました!」「結果として10.1にfreebsd-udateでアップグレードした人はlib32が無くなってましたサーセン」ということである。
したがってfreebsd-updateが主張する通りインストールしても問題はない。

一方で、ルートディレクトリを削除しようとする件については中の人もよく分かってないのだが、実害はないとのこと。

以下は参考。
amd64の10.1-RELEASEでfreebsd-updateをすると、以下のように/usr/lib32がインストール対象になった。

また、実際にインストールするとこんなメッセージも出る。実害なし。

No tags for this post.

FreeBSD 10.1-RELEASEのvt(4)でconsoleをうつくしく

Pocket

10.1-RELEASEの目玉機能の一つにvt(4)がある。
有名すぎるけど改めてvtが何かというと、殺風景で絶望的にクソダサいFreeBSDのコンソールを美しくするドライバである。

LANGを日本語設定にしたままコンソールでログインし、メッセージが文字化けしまくる情けなさ。
そうでなくとも、コンソールで使われるフォントはカッコ悪いように思う。
そんなガッカリ感ともサヨナラである(ただし日本語表示にはひと手間かかる!)。
みんな。今日限りコンソールドライバはvtにしちまおうぜ。

vt(4)とは

使い方を示すまえにvtについてもう少しだけ詳しく。
もとはNewcons(NEW CONSoleですな)として進められていたプロジェクトで、コンソールでの2バイト文字を含むユニコードを使えるようにしたコンソールドライバ。
くわえて、Xを使ってる時でもバーチャルターミナルを使えるし、コンソールなのにマウスでコピー&ペーストができたり、ScrLockして画面をスクロールバックしたりできる。
(FreeBSDにおいて)これはすごい。

ただ、意外にもスクリーンセーバはできないようだ。
詳細はNewcons wikiをどうぞ。
https://wiki.freebsd.org/Newcons

なお、従来のドライバはsyscons。

vtの使い方

10.1-RELEASEではデフォルトで有効にはならない。
有効にするには、/boot/loader.confに以下の記述が必要。

私は以下のように追記している。

これで再起動。

見た目の変化

これがオリジナルのコンソール。
この、フォントが気に入らないんですよ。
vt03

こうなる。
なんだろう…。20世紀の8bitパソコンのような趣がありますな。
vt01

日本語フォント

よしじゃあ次は日本語フォント!と思ったのだが、冒頭のnewcons Wikiを見るとCJKフォントは「In progress」、つまり「まだ」である。(2014/11/23現在)
とはいえ全く表示できないか、というとそうではなく。このあたりを参考に進めてみた。
具体的には、ユニコードなビットマップフォントをダウンロードしてきてvidcontrolで指定してあげればよい。
vidcontrolでの操作はコンソールでやること。

さすればこのように。
vt02

以上