以前、iPadから印刷したいと言う記事を書いて、そのまま印刷を使うことはほとんどなかったのだけれど、駅探の検索結果をメールしたときに、iPhone/iPadで見た時とPCで見た時の見た目が違うことに気がついてしまい、iPhone/iPadの画面を印刷したくなって試してみたところ、プリンタが見つからない。
いろいろ調べまわった結果、当初の参考サイトを見たところ、iOS6では別の手順が必要と言うことで、AirPrint on Linux with iOS 6 | micromuxに辿り着く。
基本はここに書いてある通りなのだが、FreeBSDのcupsはpathが少し違ったりするので、手順を書いておく。
cupsdやavahi-daemonは前回の手順でインストール/動作済みとする。
  1. libharuをインストール
    # portupgrade -N print/libharu
    
  2. urftopdfを持ってくる
    % git clone https://github.com/superna9999/urftopdf.git
    % cd urftopdf
    
  3. FreeBSD用のpatchをあてる
    % fetch https://gist.github.com/false-git/5532513/raw/0157445c16542925a853f86c6eaa2e4acc682fbe/patch-urftopdf
    % patch < patch-urftopdf
    
  4. ビルド&インストール
    % make
    cc urftopdf.c -lhpdf -lcups -o urftopdf -lm -O2 -pipe -march=pentium-m -I/usr/local/include -L/usr/local/lib
    urftopdf.c: In function 'decode_raster':
    urftopdf.c:221: warning: comparison is always true due to limited range of data type
    % sudo ./install_pdf.sh
    
  5. avahiのプリンタのserviceファイルの書き換え(1) URF=noneの行を以下のように書き換え
    <txt-record>URF=W8,SRGB24,CP1,RS600</txt-record>
    
  6. avahiのプリンタのserviceファイルの書き換え(2) pdl=...の行を以下のように書き換え
    <txt-record>pdl=application/octet-stream,application/pdf,application/postscript,image/gif,image/jpeg,image/png,image/tiff,text/html,text/plain,application/openofficeps,application/vnd.cups-banner,application/vnd.cups-pdf,application/vnd.cups-postscript,image/urf</txt-record>
    
  7. cupsdとavahi-daemonの再起動
    # /usr/local/etc/rc.d/cupsd restart
    # /usr/local/etc/rc.d/avahi-daemon restart
    
これで、一応iPhoneからまたプリンタが見つかるようになって印刷できるようになったけど、なんか無理矢理iPhoneの画面をA4に引き伸ばしたような絵で、解像度も低く、いまいちと言うか今三な感じ。URF=のRS600とかを変えたら改善したりするのかもしれないけど、また暇ができたら試してみよう。
portaudit から、squid 2.7.9 に脆弱性があるよ(portaudit: squid -- denial of service)と言う指摘がずっと来ていたのだけれど、2.7系はもう修正する気がないようなので、しばらく放置していた。
FreeBSDのportsは、www/squid が 2.7系, www/squid31 が squid 3.1系、www/squid32 が squid 3.2系となっている。(squid の最新安定版は3.3系らしい)
そこで、とりあえず3.2系に移行してみることにする。
一度squid 2.7.9 をアンインストールして、新たにwww/squid32をインストール。そして、起動してみると、(エラーの行だけ抽出)
FATAL: Bungled squid.conf line 715: cache_dir coss /var/squid/cache/coss 10000 block-size=1024 max-size=500000
と言うエラーで起動しない。
/usr/local/etc/squid/squid.conf.default にデフォルトの設定が、/usr/local/etc/squid/squid.conf.documented に説明付きの設定ファイルがあるので、これを見てみると、
#       NP: COSS filesystem in Squid-3 has been deemed too unstable for
#           production use and has thus been removed from this release.
#           We hope that it can be made usable again soon.
とあるので、当面はCOSSは使えないらしい。 cache_dirの行をコメントアウトすると、
ERROR: Directive 'emulate_httpd_log' is obsolete.
emulate_httpd_log : Replace this with an access_log directive using the format 'common' or 'combined'.
FATAL ERROR: auth_param digest program /usr/local/libexec/squid/digest_pw_auth: (2) No such file or directory
ERROR: '0.0.0.0/0.0.0.0' needs to be replaced by the term 'all'.
SECURITY NOTICE: Overriding config setting. Using 'all' instead.
WARNING: (B) '::/0' is a subnetwork of (A) '::/0'
WARNING: because of this '::/0' is ignored to keep splay tree searching predictable
WARNING: You should probably remove '::/0' from the ACL named 'all'
aclParseAclLine: ACL 'manager' already exists with different type.
FATAL: Bungled squid.conf line 1856: acl manager proto cache_object
みたいな感じ。
  • emulate_http_log は、access_log の common か combined を使え
    →とりあえずコメントアウト。
  • digest_pw_auth なんて見つかりません。
    →digest_file_auth に置き換わったらしい
  • all を置き換えてます。
    →デフォルト(?)でallは定義済みのようなので、コメントアウト
  • ::0がどうこう。
    →IPv6の設定は書いてないんだけど?
  • acl manager は、既に別の形で存在します。
    →こちらもコメントアウト
で、再度通すと、
WARNING: Netmasks are deprecated. Please use CIDR masks instead.
WARNING: IPv4 netmasks are particularly nasty when used to compare IPv6 to IPv4 ranges.
WARNING: For now we will assume you meant to write /32
WARNING: (B) '127.0.0.1' is a subnetwork of (A) '127.0.0.1'
WARNING: because of this '127.0.0.1' is ignored to keep splay tree searching predictable
WARNING: You should probably remove '127.0.0.1' from the ACL named 'localhost'
WARNING: (B) '127.0.0.1' is a subnetwork of (A) '127.0.0.1'
WARNING: because of this '127.0.0.1' is ignored to keep splay tree searching predictable
WARNING: You should probably remove '127.0.0.1' from the ACL named 'localhost'
WARNING: Netmasks are deprecated. Please use CIDR masks instead.
WARNING: IPv4 netmasks are particularly nasty when used to compare IPv6 to IPv4 ranges.
WARNING: For now we will assume you meant to write /32
WARNING: (B) '127.0.0.0/8' is a subnetwork of (A) '127.0.0.0/8'
WARNING: because of this '127.0.0.0/8' is ignored to keep splay tree searching predictable
WARNING: You should probably remove '127.0.0.0/8' from the ACL named 'to_localhost'
  • Netmasksはdeprecatedなので、CIDR maskを使え。
    →/255.255.255.255 の代わりに、/32 とか書く。
  • 127.0.0.1とlocalhostがどうしたこうした。
    →とりあえず、acl localhost の行をコメントアウト
  • to_localhost がどうしたこうした。
    →そもそも、to_localhostって言うaclを使っていなかったので削除
これで、なんとか起動した感じ。
後は、コメントアウトしたcache_dir を ufs で復活させて、squid -z でキャッシュディレクトリを初期化して、squidを再起動したら動いているように見える。
macの(HFS+の)日本語ファイル名はNFD正規化された形で保存されているので、たとえば「ほげ」って言うファイルがあるところで、「ほ」と入力してTABを押して補完すると、
% echo ほけ<3099>
のように表示される。
ずっと、なんとかならないのかな〜と思っていたのだけれど、mac の zsh で日本語の濁点・半濁点付き仮名を正常に補完できる様にする : アシアルブログと言うページを発見。zshのパッチを公開されている。
ここには、ソースから入れる方法と、Homebrewを使った場合の方法が書いてある。
会社マシンはHomebrewを使っているので、一発でinstallできて無事に動いた(brew tapってのを初めて知ったんだけど、個人が独自の Formula を公開するのに素晴らしい仕組みだね)。

しかし、自宅マシンでは MacPorts を使っているので、MacPorts の zsh の Portsfile をちょこちょこっといじって上記パッチを取り込むことにする。
昔 unzip の自家 Ports を作った時のファイルを参考に、適当にやったらなんとかうまく行ったようだ。
以下、覚え書き。
  • brewの方でconfigureオプションとして指定していた、--enable-fndir から --enable-site-scriptdir までは Portfileの方には書かなかった。
  • オリジナルの Portfile では --enable-libs="-lncurses" となっているところは、brewに合わせて --with-term-lib=ncursesw とした。
  • brewにあった --disable-etcdir は取り込まなかった。
  • brewの方は、依存関係で waltarix/customs/ncurses を指定していた。こちらの Formula を見たところ、--enable-widec くらいしか関係しそうなオプションがなかったのと、MacPorts の ncurses は --enable-widec が指定されていたので、そのまま MacPorts の ncurses を使うことにした。
  • 不思議なことに、--with-term-lib=ncursesw と指定しているにもかかわらず、otool -L zsh すると、libncurses.5.dylib が出てくる。(brew版は ncurseswになっている)
    ただ、MacPortsの環境では、libncursesw.5.dylib は libncurses.5.dylib へのシンボリックリンクなので、実害はない。実際正しく動いているように見える。
  • 前に書いたのは、sha1とmd5でチェックサムが書いてあったので、md5sumコマンドとshasumコマンドでチェックサムを生成したんだけど、今回のzshのPortfileはrmd160と言う聞いたことがないものが書いてあった。
    rmdsumコマンドが存在しないので調べてみたところ、md5、sha1、rmd160 ハッシュ値を得る方法 - 富士山は世界遺産と言うページを発見したので、opensslコマンドで生成した。(別にrmd160以外のを書いておけば通るんだけど)
いじった Portfile は github に上げてある。
google goと言う言語がある。
出だしの頃に、FreeBSDで動かそうとしてすぐに挫折して、直後に本家がFreeBSDにも対応してportsに入ったりしていたのだけれど、ずっと触っていなかったうちにだいぶ進化していた。
このblogを書いている時点での最新は1.0.3で、8gとか8lとか言うわかりにくいコマンドの代わりに、goと言うコマンドでビルドや実行ができるようになっていた。
% go run hoge.go
でいきなり実行ができるし、
% go build hoge.go
でコンパイルされてhogeと言う実行ファイルができる。
で、zshを使っているとコマンド毎にオプションの補完ができたりするんだけど、zshの標準だとgoコマンドには対応していないので、
% go r[TAB]
とか go rの後でTABを押しても補完してくれない。
% go env
でgoの環境変数(?)が見られるんだけど、そこに出てくる GOROOT の下に go の関連ファイルがある。(8gとか8lに該当するコマンドは、$GOROOT/pkg/tool/$GOOS_$GOHOSTARCH にある)
で、Macの場合、homebrewでinstallすると$GOROOT/share/zsh/site-functions/_go に、MacPortsでinstallすると$GOROOT/misc/zsh/go にzsh用の補完関数が置かれる。
こいつを、自分の.zshrcとかから読んでやると、goコマンドの補完が効くようになる。(ちなみに、brewの名前から連想して、/usr/share/zsh/site-functions/ に置いても有効にならない)
さて、ソースはemacsで編集することが多いので、emacs用のgo-modeはないのかと思ったら、$GOROOT/misc/emacs に go-mode-load.el と go-mode.el があった。
こいつらを、emacsのload-pathの通ったところに置いて上げて、
(require 'go-mode-load)
してあげると、go-modeが使えるようになる。
emacs上からソースを編集していると、emacs上から実行したくなる。
goのドキュメントを見ていると、gdbも使えそうなことが書いてあるが、とりあえずはshellから実行することにして、emacs上で M-x shell でシェルを起動する。
と、zshのプロンプトの前に「4m」とか余計な文字が出てくる。
後、せっかくzshでgoのコマンドが補完できるようにしたのに、emacsのshellモードだとzshの補完が効かない。
つらつらと調べていたら、Emacs 上で快適に Bash や Zsh を利用する設定 : 紹介マニアと言うページを発見した。
ほとんどはここに書いていることで解決するのだが、shellモード、termモード、multi-termモードと順番に説明しているため、multi-termを使いたい時にもtermモードの記述内容が必要だったりしたので、最終的にやったことを書いておく。
  1. multi-termのインストール
    http://www.emacswiki.org/emacs/download/multi-term.el を、emacsのload-pathの通ったディレクトリに置き、.emacsに以下を追加
    (autoload 'multi-term "multi-term" "multi-term" t)
    
    ※ 原因はわからないが、(require 'multi-term)だと、multi-termを実行したときに文字の背景色がemacsのデフォルトと変わって白くなってしまう。requireじゃなくてload-libraryをemacsが起動してからだと大丈夫(.emacsだとrequireと同じ挙動)なので、autoloadにしてみた。
  2. 「4m」が出ないようにする
    4mが出るのは、emacsのshellモード系が使用するTERMであるeterm-colorがmacのterminfoに入っていないためらしいので、ticコマンドで~/.terminfoにインストールする。(eterm-color.ti の場所はemacsのインストール先に依存)
    % tic -o ~/.terminfo /usr/local/share/emacs/24.1/etc/e/eterm-color.ti
    
  3. シェルの出力が文字化けしないようにする
    emacsの設定で、locale-coding-system に utf-8-hfsを設定する。
    (require 'ucs-normalize)
    (setq file-name-coding-system 'utf-8-hfs)
    (setq locale-coding-system 'utf-8-hfs)
    
これで、ほぼ快適に使えるのだが、参考サイトにも書いてある通り、multi-term上からは日本語の入力ができないと言う問題が残っている。
このblogをホストしているサーバはFreeBSD 8 stableが入っていて、ソースとかportsとかはcsupで定期的に新しくしているのだけれど、久しぶりにrootに来ているメールを見たら、以下の内容がずらずらと出ていた。
ACTION REQUIRED
You are using a ports file that or iginated from CVS!!
The FreeBSD project has switched from CVS to SubVersion.
This CVS repository is NO LONGER UPDATED!  If you see this
message then your tree is STALE and you need to follow
the update instructions to receive any more updates.
Original announcement:
http://lists.freebsd.org/pipermail/freebsd-ports/2012-September/078099.html
Reminder:
http://lists.freebsd.org/pipermail/freebsd-announce/2013-January/001451.html
UPDATE INSTRUCTIONS:
http://wiki.freebsd.org/CvsIsDeprecated
※ 実際には、/usr/ports/Mk/bsd.port.mkが出しているのでもっと読みにくかったので、ゴミを落としてある。

と、言うわけで、上記アナウンスのリンクを読んで見ると、FreeBSDの開発は、CVSからSubversionに移行したので、もうcsup(cvsup)は使えないよ、と言うことらしい。
そこで、上記 CvsIsDeprecated のリンクを読んで、対策をしないといけない。

Portsについて
一番オススメはportsnap(8)を使うこと。subversionを使うか、svnupを使うという選択肢もあるよ。portsの代わりにビルド済みパッケージシステムのpkgngってのもあるから調べてみてね。

ソースについて
最新のバイナリリリースと、セキュリティパッチが欲しいだけなら、freebsd-update(8)がオススメ。
そうじゃないなら、subversionを使うか、svnupを使うと言う手もあるよ。
一応7以上のstableについては、サポート終了まではcvsupも使えると思うけど、保証しないよ。

と言うことらしい。(だいぶ抄訳。間違ってたらすいません)
で、うちをどうするかなんだけど、portsについてはportsnapを使うことに決めた。
man portsnap すると、cron に portsnap cron って言うコマンドを仕込んで置くと最新のportsをfetchしてくれて、その後手動で portsnap update すると/usr/portsに展開してくれるらしい。(cronで自動でupdateするなって書いてある)
試しに、portsnap fetch(cron は、コマンドが起動してからランダムに待ってから開始する。サーバへの負荷を分散するため。fetchはその場で開始)してから、portsnap updateしてみたら、/usr/portsはportsnapが作ったものじゃないよ、みたいなエラーが出たので、メッセージの通りに portsnap extract する。
これで、portsnap updateできるようになったので、cronにportsnap cron を仕込めば良い。

ソースの方は、どうせもともとsvnは入れているので、svnupを新しく入れるよりは、svnを使うことにする。
Using Subversionと、Subversion Mirror Sitesを見ると、以下のことがわかる。
  • ミラーは、今のところsvn0.us-west.FreeBSD.orgとsvn0.us-east.FreeBSD.orgの2つ
  • httpsを使うことを推奨。(man in the middle攻撃を防ぐため)
  • ソースは、svn-mirror/base/branch で、branchにはhead(今までのCURRENT)、stable/9(今までのRELENG_9)、stable/8(今までのRELENG_8)とかを指定する。
  • ドキュメントはsvn-mirror/doc/head、portsはsvn-mirror/ports/headを指定すれば良い。
と、言うわけで早速やってみる。
# cd /usr
# mv src src.cvs
# svn co https://svn0.us-west.FreeBSD.org/base/stable/8 src
Error validating server certificate for 'https://svn0.us-west.freebsd.org:443':
 - The certificate is not issued by a trusted authority. Use the
   fingerprint to validate the certificate manually!
Certificate information:
 - Hostname: svnmir.ysv.FreeBSD.org
 - Valid: from Fri, 24 Aug 2012 06:04:04 GMT until Sat, 24 Aug 2013 06:04:04 GMT
 - Issuer: clusteradm, FreeBSD.org, CA, US
 - Fingerprint: 79:35:8f:ca:6d:34:d9:30:44:d1:00:af:33:4d:e6:11:44:4d:15:ec
(R)eject, accept (t)emporarily or accept (p)ermanently? p
# mv doc doc.cvs
# svn co https://svn0.us-west.FreeBSD.org/doc/head doc
httpsでアクセスしようとすると、信頼されない証明書的なメッセージが出るので、svn-mirrors.html のページに載っているフィンガープリントと比較して、同じであることを確認してから p なり t なり を入力する。(svn-mirrors.htmlのページ自体がhttpだから一緒じゃんと言う話はあるが、まあそこはそれ)

これで、最新のソースとドキュメントが持ってこれたので、次からは
# svn up /usr/src
# svn up /usr/doc
とかで更新できるので、こちらもcronに仕込むとしよう。普通にsubversionを使っている人にとっては、cvsupよりもわかりやすいかもね。
ちなみに、ミラーがUSの2箇所しかないのか〜と思って調べてみたら、かけまわる子犬。: SVN サーバを構築して FreeBSD のソースをミラーする。なんてページを見つけた。www.jp.freebsd.org ではやってくれないのかな。
2013年5月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
[New] [Admin]

最近のコメント

841SHとAperture by false: 試してみたところ、デ
841SHとAperture by false: なんと、今度親の携帯
841SHとAperture by 匿名: 841SHで撮るとき
TeraStationでsnmp by OZA: 大変助かります。
Squidで認証 by たけちゃん: 最初から、入れ直した

Photos

  • Lhaplus-1.png
  • mt-error.jpg
  • lisp-type.png
  • graph_47_5.png
  • items.jpg
  • feeds.jpg
  • false.jpg

アーカイブ

コンタクト

広告

Powered by Movable Type 5.2