FreeBSD 11.2-RELEASE に向けて releng/11.2 が切られた2018年06月04日 13時49分14秒

FreeBSD 11.2 Release の準備ほぼ予定通りに進んでいる様子。BETA のリリースも BETA3 が過ぎ、releng/11.2 のブランチも切られた。

Phabricator を使って FreeBSD にパッチを投降2018年02月05日 12時41分03秒

今でも Bugzilla を通して、バグの報告やパッチを受け付けてはいるが、こちらだと関係している人の目にはなかなか付かないようだ。

Phabricator を設定して、機能的な変更はリビューを行いそれから head にコミットされている。簡単な改善でもこちらを使って投降し、よく変更している人の名前を見付けてリビューを頼んだ方が現実的なようだ。

変更点は CURRENT へのパッチで受け付けている。svn diff -x -U999999 を使って、ファイルの全てが入るようにする。そして、新規作成を使って、差分をアップロードし、変更点やテストの方法を書く。

git fetch&& git svn rebase で継続的に svn の変更を git に反映2018年01月19日 12時51分35秒

git は svn の変更履歴を git 形式に変換できる。
% git clone 
で最初の変換が出来る。

その後は、そのディレクトリの中で

% git fetch
% git rebase
とやると、前回の続きから svn の履歴から最新までを変換できる。

fetch は svn から履歴を取ってくるだけでなので、rebase を行わないと取ってきた履歴は反映されない。

svn で間違って add されたファイルを svn delete する2017年11月24日 13時48分39秒

ふと、間違えてコミットするつもりの無いファイルが svn の管理下に入ってしまうことがある。commit をする前だったら、ファイルは消さずに svn の管理下から外すか、svn の管理から消して、ファイルも消す選択肢がある。

ファイルは消さずに svn の管理下から外す、

% svn delete --keep-local <file>

svn の管理から消して、ファイルも消す。

% svn delete --force <file>

手元のファイルが変更されている事になっているので、どちらかのオプションを付けないと、エラーになる。

SVN の pristine は svn cleanup で削除される2017年07月27日 17時06分29秒

FreeBSD の src は大量のファイルがあるので、pristine ファイルが大量に積もってくる。以前に調べたときはうまくやり方を見付けられなかったので力技で対応した。それから、ほぼ二年経ち、/usr/src だけで 4GB を占めている。

調べ直すと、svn cleanup で必要のなり pristine ファイルが削除されるのを見付けた。cleanup はロックが残ってしまった時だけだと思っていた。

/usr/obj は別にしてあり、/usr/local も別れている。インストールされているファイルは 1.5GB あり、残りの 3.5GB から 4GB が /usr/src にあるようだ。

% df /usr
Filesystem   1K-blocks    Used   Avail Capacity  Mounted on
/dev/ada0s3d   7103150 5126298 1408600    78%    /usr
% cd /usr/src
% svn cleanup
% df /usr
Filesystem   1K-blocks    Used   Avail Capacity  Mounted on
/dev/ada0s3d   7103150 3936964 2597934    60%    /usr
cleanup で 1GB 程のファイルが消されたようだ。結構この処理には時間が掛かった。

FreeBSD のコードを svn switch すると時間が掛かる2016年08月22日 12時47分21秒

FreeBSD 11.0 RELEASE に向けて releng/11.0 が作られたのがほぼ一週間前。最近はリリース前なのでコミットの量が減っているので、ソースの更新は控え目。

前回にやったときもそうだったが、svn switch に随分と時間が掛かる。こんなに時間が掛かるとは思っていなかった、覚えていなかったので、時間は計っていないが、三十分ぐらいは掛かっただろう。一度、電源を落すのを諦めて少し放置して待っていたぐらいだった。

systat で観察すると、コードの更新は早かったが、メタデータの更新に時間が掛かるようだ。svn switch は時間に余裕があるときに行う必要がある。

SVN pristine の実験2015年09月18日 12時17分42秒

FreeBSD の更新を続けていると、次第に /usr/src が膨らんでいった。調べてみると、/usr/src/.svn/pristine が大きくなってきているようだ。

そこで、/usr/src を最新にし、それと同じリビジョンを新しくチェックアウトしてみる。

% svn up /usr/src
...
Updated to revision 287945.
% du -sh /usr/src/.svn
1.5G    /usr/src/.svn
% svn co https://svn0.us-east.freebsd.org/base/head /tmp/src
% du -sh /tmp/src/.svn
1.0G    /tmp/src/.svn
見ての通り、一年以上あれこれと保持してきた .svn ディレクトリは、五割増しになっている。

次はどのくらい違うか調べてみる。

% diff -urp /usr/src/.svn /tmp/src/.svn | tee /tmp/diff.out
Only in /usr/src/.svn/pristine/00: 0001d6a6dcc4d283267971aa4fc0de0c2e7d7200.svn-base
Only in /usr/src/.svn/pristine/00: 0003fd1242ddbbb6b5814d64e9525da4bb35844d.svn-base
Only in /usr/src/.svn/pristine/00: 00041fbcc5f74d9069baa0cb4db0b815299be901.svn-base
Only in /usr/src/.svn/pristine/00: 0006a98938688bca351aa84c389fd9576888d438.svn-base
% find /usr/src/.svn -type f | wc
   89305   89305 6787015
% grep -v 'Only in' /tmp/diff.out | wc; wc /tmp/diff.out
   26285  105140 2234225
   26369  105404 2237049 /tmp/diff.out
三割くらいファイルが多いようだ。

入れ換えられるか試してみる。無論バックアップを取ってから試すが、その部分は省略。

% svn stat /usr/src
M       /usr/src/contrib/top/display.c
M       /usr/src/etc/rc.subr
M       /usr/src/sbin/mount/mount.c
 M      /usr/src/sys
M       /usr/src/sys/i386/conf/GENERIC
M       /usr/src/sys/kern/subr_taskqueue.c
M       /usr/src/sys/vm/vm_glue.c
M       /usr/src/usr.bin/mkuzip/mkuzip.c
M       /usr/src/usr.bin/top/machine.c
あれこれ、いじってある。rsync で新しくチェックアウトした .svn に変更してみる。タイムスタンプを使うと同じファイルもコピーしそうなので、-c で。
% rsync -acl --delete /tmp/src/.svn/ /usr/src/.svn
% svn stat /usr/src
M       /usr/src/contrib/gdb/gdb/sparc64fbsd-tdep.c
M       /usr/src/contrib/top/display.c
M       /usr/src/etc/rc.subr
M       /usr/src/sbin/mount/mount.c
M       /usr/src/sys/i386/conf/GENERIC
M       /usr/src/sys/kern/subr_taskqueue.c
M       /usr/src/sys/vm/vm_glue.c
M       /usr/src/usr.bin/mkuzip/mkuzip.c
M       /usr/src/usr.bin/top/machine.c
一つのファイルが変更されたことになっている。これは、svn revert で処理をする。

取り敢えずのところは、問題は無いようだ。当面影響を見ることにする。

Subversion で実行ビットを立てる2014年05月09日 07時08分38秒

元々実行権限があったファイルを追加すると、そのままチェックアウト時に実行可能になる。後で追加するときは、プロパティをセットしなければいけない。

% svn propset svn:executable on <list of files>

しかし、時折おかしくなるみたいだ。


%svn propget svn:executable <list of files>

とやって「*」が表示されていないと正しく実行権限が設定されていない。

% svn propset svn:executable '*' <list of files>

そんな時は、明示的に「*」を指定する。

Subversion でレポジトリを変更2014年05月05日 12時59分21秒

CVS で FreeBSD を追いかけていた時に、CVS サーバが落ちていたりする事があった。そんな時は、CVS/Root ファイルを書き換えて、サーバの位置を変更していたものだった。

SVN も中央管理型なので、レポジトリを移動した時、プロトコルを変更した時、ミラーの交換したい時に、手元のコピーの情報を更新する必要がある。

SVN には svn switch --relocate があり、それを行う。svn relocate もあるみたいだ。


% svn help switch
...
 --relocate               : relocate via URL-rewriting
...
% svn help relocate
relocate: Relocate the working copy to point to a different repository root URL.
usage: 1. relocate FROM-PREFIX TO-PREFIX [PATH...]
       2. relocate TO-URL [PATH]
...

SVN は同じ動作が複数のコマンドから出来る事が多い気がする。

SVN サーバを構築して FreeBSD のソースをミラーした時等に使える。丁度、SVN サーバの URL が公開されているので、例には持ってこいだ。


% svn co https://svn0.us-west.FreeBSD.org/ports/head /usr/ports

でチェックアウトしてあるので

% cd /usr/ports
% svn switch --relocate https://svn0.us-west.FreeBSD.org/ports/head \
    http://svnweb.icmpv6.org/ports/head
%

で変更できる。

SVN で FreeBSD の安定版2014年05月02日 10時53分56秒

FreeBSD を SVN で取得する場合は release を取得すればいいかと思ったが、違ったようだ。

https://svn0.us-east.freebsd.org/base/release/10.0.0 といったリリースは、本当にリリースのみの、タグの位置付けの様だ。最近では openssl の SA などが出ていたが、それらの修正はこちらには反映されない。

CVS の時の様に、ブランチをチェックアウトして、セキュリティ修正が順次的追いされるのは、https://svn0.us-east.freebsd.org/base/releng/10.0 等の releng の方みたいだ。

svn switch で release から releng に移動できる。


% cd /usr/src
% svn info
Path: .
Working Copy Root Path: /usr/src
URL: https://svn0.us-east.freebsd.org/base/release/10.0.0
Relative URL: ^/release/10.0.0
Repository Root: https://svn0.us-east.freebsd.org/base
Repository UUID: ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
Revision: 262281
Node Kind: directory
Schedule: normal
Last Changed Author: gjb
Last Changed Rev: 260789
Last Changed Date: 2014-01-16 13:43:50 -0500 (Thu, 16 Jan 2014)
% svn switch https://svn0.us-east.freebsd.org/base/releng/10.0