トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

Solarisでpkgsrc

はじめに

Solarisでpkgsrc使うときのめも。といっても、実際試しているのは、Solaris 8だけだけどね。

  • [2005/4/4]追記:Solarisをさわる環境が一切なくなってしまったので、このページは(たぶん)更新されません。(また環境が手に入れば、更新を再開したいと思います。)
  • [2007/2/20]追記:最近の環境に合うように若干修正しました。

なぜpkgsrcなの?

 Solarisへのサードパーティ製ソフト

Solarisへサードパーティ製ソフトをどうやってインストールしているかというと、

といったところでしょうか。

しかし、上二つは、ソフトが古すぎたり、欲しいソフトがなかったりして、使えなかったりします。(最近はそんなことも少ないかもしれませんが。)また、まんなか三つも、なかなかほしいソフトがなかったりして、困ります。

結局、一番下の方法をとることになります。しかし、更新管理がめんどくさく、なんらかのパッケージ管理が欲しいところです。FreeBSDでいう、portsのようなしくみがあったら、楽だなぁ、なんて。

 NetBSDのパッケージシステムをつかおう

そこで、NetBSDのパッケージシステム(The NetBSD Package System)を使用することにしました。略称として"pkgsrc"と書きます。(そして、一般にパッケージソースと読まれます。)

ちなみに、FreeBSD/OpenBSDでいうportsと同じものです。(ちなみに、FreeBSD/OpenBSDでいうpackage(s)は、NetBSDでは、コンパイル済/バイナリーパッケージ(precompiled/binary package(s))といいます。NetBSDでpackageといえば、pkgsrcに含まれる、個々のソフトのことです。)

pkgsrcは、もともとNetBSD用のパッケージシステムとして、FreeBSDのportsをお手本に開発されましたが、今では、NetBSDに限らず、他のプラットホームでも利用できるようになりました。詳しくは

を見てください。

初期設定について

上記URIをみれば書くことはないのですが、一応書きます。次のように設定を行ないました。

 bootstrapのインストール

まず、bootstrap-pkgsrcをとってきます。

2004/3/12から、bootstrap-pkgsrcは、pkgsrc内に取り込まれました。よって、pkgsrcの最新をとってくることになります。

インストール準備

最低、gccとGNU zip(gzip)、できればGNU tarがいりますので、事前に準備しておいて下さい。Solaris 8のインストールメディア(CD-ROM)のから、

  • SOLARIS 8 SOFTWARE 2 OF 2:SUNWgzip(とあとで使うSUNWgpch)
  • Software Companion:SFWgccとSFWgcmn

を入れるか、なければ適当なところ(SOLARIS PACKAGE ARCHIVEがオススメ)からとってきて、インストールしておいて下さい。

bootstrap-pkgsrcをとってくる

pkgsrcの最新は、annonymous cvsで提供されていますが、定期的にtar ballでスナップショットが提供されています。

 ftp://ftp.jp.netbsd.org/pub/NetBSD-current/tar_files/pkgsrc.tar.gz

or

 ftp://ftp.netbsd.org/pub/NetBSD-current/tar_files/pkgsrc.tar.gz

これを、とってきて、適当なところに展開します。GNU tarとgzipがパスに通っていると、

 tar xzfp pkgsrc.tar.gz

とすれば、カレントディレクトリにpkgsrcディレクトリができていると思います。GNU tarがない場合は、gunzipとuntarを別々にやればよいでしょう。bootstrapディレクトリに移動します。

 cd pkgsrc/bootstrap

次に、README.Solarisを読み、必要最低限のソラリスパッケージがインストールされているかどうか確認して下さい。

とってきたものを、rootで実行します。

 ./bootstrap --prefix=/opt/bsd --pkgdbdir=/var/opt/pkgsrc/db --sysconfdir=/opt/bsd/etc --varbase=/var/opt/pkgsrc

gccにパスが通っていなければ、パスを通すか、CC変数を設定して実行すればよいです。

 env CC=/opt/gnu/bin/gcc ./bootstrap --prefix=/opt/bsd --pkgdbdir=/var/opt/pkgsrc/db --sysconfdir=/opt/bsd/etc --varbase=/var/opt/pkgsrc 

インストール位置(LOCALBASE)が/opt/bsd、パッケージのインストール情報や依存関係などのデータベース(PKG_DBDIR)が/var/opt/pkgsrc/db、通常/var以下にインストールされるもの(VARBASE)は/var/opt/pkgsrc、各種パッケージの設定ファイルの位置は/opt/bsd/etcにしました。これらの位置をどこにすべきかは悩みどころですが、一応こうしました。

この引数で、bootstrapを実行すると、初期設定と、最低限のツールがインストールされます。

 mk.confの設定

次に、/etc/mk.confを設定します。これは、pkgsrcの各種設定を書くものです。まず、pkgsrc/bootstrap/work/mk.conf.exampleがあるので、これを/opt/bsd/etc/mk.confにコピーします。

次に、設定を加えます。まず、実際にとってきたソースファイル(distfiles)のおきばしょは、デフォルトでは/opt/bsd/pkgsrc/distfilesです。しかし、pkgsrc全体を削除して更新したりしたいときに、一々distfilesを退避するのはめんどうです。そこで、おき場所を変更します。

 DISTDIR=/opt/bsd/distfiles

としました。mkdirして、dirをつくっておきます。

同様に、バイナリーパッケージの置き場所も変更します。

 PACKAGES=/opt/bsd/packages

とします。mkdirして、dirをつくっておきます。

 gccほかの準備

最低、ちゃんと動くgcc・GNU patchがあるようにして下さい。ちゃんと動くのがなければ、Solaris 8のCompanion CDか、適当なところ(SOLARIS PACKAGE ARCHIVEがオススメ)から、gcc・GNU patchをとってきて、いれておいて下さい。

 サーチパスなどの設定

  • /opt/bsd/binと/opt/bsd/sbinにパスを通しておいて下さい。
  • /usr/usbをサーチパスから削除して下さい。無用のトラブルのもとです。
  • gcc・GNU patchにパスを通して下さい。なんらかの理由で、パスを通せないのなら、/etc/mk.confに CC=/opt/gnu/bin/gcc とか、TOOLS_PLATFORM.patch=/opt/gnu/bin/patch などと書いてください。(これは後で、pkgsrcから同じものをインストールできたら、mk.confから消しましょう。)
  • 作業ユーザのlocaleに関する環境変数が、各種コマンドの出力に影響するので、作業ユーザのLANGをCに設定することをお勧めします。(こうすれば一番簡単です。LC_MESSAGESをCにするのでもいいようです。)

わたしはcshユーザなので、次のように~/.csrhcを設定しました。(source ~/.cshrcも忘れずに。:-)

 setenv PATH "/opt/bsd/bin:/opt/bsd/sbin:/usr/local/bin:/bin:/usr/ccs/bin:/usr/ccs/lib:/etc:/usr/etc:/usr/openwin/bin:/usr/local/etc:/usr/sbin"
 setenv MANPATH "/opt/bsd/man:/usr/local/man:/usr/man"
 setenv LANG C

 pkgsrcの移動

ついでに、とってきたソースがもったいないので、pkgsrcを移動させましょう。

 mv pkgsrc /opt/bsd

 パーミッションの変更(オプション)

わたしは、あとで一般ユーザで作業がしたかったので、展開後、パーミッションをいじりました。

 chmod -R g+w /opt/bsd/pkgsrc /opt/bsd/packages /opt/bsd/distfiles
 chgrp -R manager /opt/bsd/pkgsrc /opt/bsd/packages /opt/bsd/distfiles

managerグループに入っている人は、makeできるというわけです。

はじめにインストールするもの

 GNU patch

やっとこれで各種ソフトをインストールできそうです。最初にやることは、GNU patchをいれます。(以下は、/opt/bsd/pkgsrc/カテゴリー/ソフト名 の場合、カテゴリー/ソフト名と書きます。)

 cd /opt/bsd/pkgsrc/devel/patch
 bmake
 bmake install
 bmake clean clean-depends

でOKです。(FreeBSD portsの場合は、make cleanで依存先dirもきれいにしてくれますが、pkgsrcの場合はそうではありません。あと、bmake cleanとbmake clean-dependsは必ず実行して下さい。無用のトラブルを回避できます。)一般ユーザで、bmake installしても、su - rootできるユーザであれば、途中でrootパスワードを聞いてくるので、OKです。

 GNU make

次に、devel/gmakeをいれます。

 cd /opt/bsd/pkgsrc/devel/gmake
 bmake
 bmake install
 bmake clean clean-depends

 gcc

そして、最後にlang/gccを入れます。

 cd /opt/bsd/pkgsrc/lang/gcc
 bmake
 bmake install
 bmake clean clean-depends

インストール直後のメッセージに出たように、/etc/mk.confに一行追加しておきます。

 .include "/opt/bsd/share/examples/gcc-2.95.3/mk.conf"

lang/gccはgcc 2.95.3なので、gcc3がいいよーという人は、lang/gcc3-{c,c++,f77}を同様にいれて下さい。

 ここまでインストールしたパッケージ一覧

下記のとおりにならなくてもかまいません。(Ver.番号は違うと思います。)

 % pkg_info -a
 bootstrap-mk-files-20061111 *.mk files for the bootstrap bmake utility
 nawk-20050424       Brian Kernighan's pattern-directed scanning and processing l
 nbsed-20040821      NetBSD-current's sed(1)
 tnftp-20050625      The enhanced FTP client in NetBSD
 mtree-20040722      Utility for mapping and checking directory hierarchies
 pax-20060202        POSIX standard archiver with many extensions
 pkg_install-20061103 Package management and administration tools for pkgsrc
 pkgmanpages-20050911 Manual page(s) for the packages collection
 digest-20060826     Message digest wrapper utility
 patch-2.5.4nb2      Patch files using diff output
 libtool-base-1.5.22nb4 Generic shared library support script (the script itself)
 pkg_install-info-4.5nb3 Standalone GNU info file installation utility
 libiconv-1.10nb3    Character set conversion library
 gettext-lib-0.14.6  Internationalized Message Handling Library (libintl)
 gettext-tools-0.14.6 Tools for providing messages in different languages
 gmake-3.81          GNU version of 'make' utility
 gcc-2.95.3nb7       GNU Compiler Collection, version 2

 あとかたづけ

一番最初にインストールした(pkgsrcからインストールしていない方の)、gccやGNU patchをパスから外します。/etc/mk.confに書いていたひとは、消してください。必要に応じて、アンインストールしてもいいでしょう。

 libtool-baseのいれなおし

このあと、最初に入れたgccをアンインストールするならば、libtool-baseをいれなおした方がよいです。(たとえば、database/db4などをmakeすると、オブジェクトファイルをつなぐとき、失敗します。)

次に、pkgtools/pkg_tarupをインストールします。

 cd /opt/bsd/pkgsrc/pkgtools/pkg_tarup
 bmake
 bmake install
 bmake clean clean-depends

次に、libtool-baseをいれなおします。replaceというmakeターゲットを使います。

 cd /opt/bsd/pkgsrc/devel/libtool-base
 bmake
 bmake replace
 bmake clean clean-depends

おすすめのパッケージ

あとは必要なソフトをいれていって下さい。ここからは、rootで作業しなくても、大丈夫でしょう。無用のトラブルを避けるためにも、コンパイルユーザのサーチパスに、/usr/ucbや他のpkgsrc以外のgccを含んだパス(/usr/local/binとか/opt/gnu/binとか)が、/opt/bsd/{bin,sbin}より前にこないようにしてください。(できればサーチパスからはずすとよいと思います。特に、/usr/ucb。)

オススメは、まずは、

  • archives/gtar-base
  • archives/gzip-base
  • misc/ja-less or misc/lv
  • sysutil/findutils
  • devel/diffutils
  • sysutil/coreutils
  • textproc/grep
  • textproc/gsed

などでしょうか。

pkgsrcの更新

FreeBSDのportsでは、ports自体cvsupによって、アップデートしていますね。Solaris上のpkgsrcでも同じようなことをしようという話です。

 前準備

pkgsrcのアップデートの方法は、

  • いちいちftpでtar ballをとってくる。
  • cvsupを使う。
  • supを使う。
  • anonymous cvsを使う。
  • rsyncを使う。

という方法がNetBSD Projectによって提供されています。cvsupはi386アーキテクチャきめうちなので、sparcアーキテクチャ上では使えません。supはNetBSD以外では使われてない方法ですし、OpenBSDプロジェクトで採用されなかったのは、信頼性にかけるかららしいです。(わたしもうまくいったためしがありません。)ゆえに、anonymous cvsかrsyncかになります。rsyncはやたら負荷が高いような感じなので、ここでは、anonymous cvsを選択しましょう。

まず、devel/cvsとsecurity/opensshをインストールします。もし、cvsがインストールできず、anonymous cvsを使いたい場合は、cvsだけ、Solaris Package Archiveのcvsを使うという手もあります。ここでは、cvsを用意できたとして、先にすすみます。あと、古いdistfilesの掃除のために、pkgtools/pkglintもインストールしておいて下さい。

cvs updateの時に、*.htmlのエラーが大量に出るので、うっとうしければ、事前に消しておいてもいいでしょう。

 cd /opt/bsd/pkgsrc
 find . -name "*.html" -print | xargs rm -f

 手動で行う場合

まず、pkgsrcソースツリーをきれいにします。確実にするには、rootでするといいですね。(わたしはいつもsudoを使っています。)

 cd /opt/bsd/pkgsrc
 bmake clean

ものすごく時間がかかるので、お茶でも一杯。

# そんなに待てない、という人は、pkgtools/pkgcleanをインストールして、使ってみてもいいと思います。超高速です。(でも、Ver.によっては、solarisではmakeできなくなることがあります。)

次に、cvs updateします。一般ユーザがpkgsrcの更新ができない場合は、rootでしましょう。

 setenv CVS_RSH ssh
 cvs update -dP

これでpkgsrcツリーが更新されました。

次に、古いdistfilesを削除するために、lintpkgsrcを使います。

 lintpkgsrc -ro

最後に、一般ユーザ権限で実行できるようにしている場合は、パーミッションをもとにもどします。

 cd /opt/bsd
 chmod -R g+w pkgsrc pkgsrc_local_patch distfiles
 chown -R root:manager pkgsrc pkgsrc_local_patch distfiles

これでおしまい。

 自動化する場合

自動化が必要であれば、rootのcrontabに書いておけばいいですね。参考までに、アップデートのためのshスクリプトをあげておきます。

 #!/usr/xpg4/bin/sh
 
 cd /opt/bsd/pkgsrc && \
 /opt/bsd/bin/bmake clean >/dev/null 2>&1 && \
 env CVS_RSH=/opt/bsd/bin/ssh /opt/bsd/bin/cvs update -dP >/dev/null 2>&1 && \
 /opt/bsd/bin/lintpkgsrc -r >/dev/nll 2>&1 && \
 cd /opt/bsd && \
 chmod -R g+w pkgsrc pkgsrc_local_patch distfiles >/dev/null 2>&1 && \
 chgrp -R manager pkgsrc pkgsrc_local_patch distfiles >/dev/null 2>&1

次に、cronにこのように書きます。上記の内容を /opt/bsd/sbin/update_pkgsrc.sh に保存したとして、

 0 3 * * 1       /opt/bsd/sbin/update_pkgsrc.sh >/dev/null 2>&1

これで、更新が自動化されました。

セキュリティアラートの自動化

pkgsrcには、インストールしたパッケージに関する脆弱性情報が公開されていないかを調べるコマンドがあります。bootstrapをインストールした時にいっしょにインストールされているはずです。定期的に実行して、結果をメールで受け取るようにしましょう。

  • /opt/bsd/sbin/download-vulnerability-list:脆弱性情報データをとってくる
  • /opt/bsd/sbin/audit-packages:脆弱性情報があるかどうか調べる

あとは、cronで実行して、メールで送るようにすればいいだけですね。

参考までに、crontabはこんな感じ。

   0 9 * * 1       /opt/bsd/sbin/download-vulnerability-list >/dev/null 2>&1 && /opt/bsd/sbin/audit-packages | /usr/bin/mailx -s 'hoge.example.jp pkgsrc(/opt/bsd/..) weekly insecurity output' root@hoge.example.jp

これでおしまい。

pkg_info pkg_installして、MESSAGEを読むともう少し詳しいことが書いてあります。

パッケージのアップデート

パッケージをアップデートする時の注意など。

pkgsrcには、FreeBSDでいうportupgradeはありません。したがって、updateしたいパッケージが、たとえばshell/zshなら、

 cd /opt/bsd/pkgsrc/shell/zsh
 bmake update

とをすればいいことになります。

...しかし、仮にbmakeがとおらないとなると、パッケージはアンインストールされたわ、bmakeはとおらないわ、で泣きを見ることになります。そこで、下記のようにすることを推奨します。

まず、現Ver.の、バイナリーパッケージがあるかどうかを確認します。/opt/bsd/packages以下にあるはずです。なければ、万が一にそなえて、つくっておきます。pkgtools/pkg_tarupをインストールすれば、

 pkg_tarup パッケージ名

で今インストールされているものからバイナリーパッケージをこしらえてくれます。これを、一時的に/tmpとかにとっときます。そして、

  • bmake
  • bmake deinstall
  • bmake package

とします。最初の"make"で、makeがとおるか確認できます。makeがとおれば、だいたいOKですから、"make deinstall"で現行Ver.をアンインストールして、次に、新Ver.をインストールします。"make package"でインストールすると、同時にバイナリーパッケージをつくってくれるので、それでいれます。

もし、インストールの途中に失敗したとか、makeがとおらなかったとか、そういったときは、とってあったバイナリーパッケージをpkg_addすればもとにもどせます。

依存関係がある時は、make deinstallのところで、依存関係により、アンインストールできない旨警告されます。そのときは、依存先をひとつづつアップグレードしていくのが一番確実です。

libiconvのような、たくさんのパッケージに関係しているパッケージは、セキュリティアップデートに関係しない限り、手を出さないほうがよいです。

たんじゅんなパッケージ(ただのスクリプトとか)は、上書きアップグレードしてもいいかもしれません。上書きインストールする時は、

 bmake replace

です。ただし、原則として使わない方がいいと思います。

bmake packageを使うようになると、忘れるのが、cleanとclean-dependsです。bmake packageしたあとは、忘れずに。

FAQ

 bootstrap自体がmakeできません。

そういうこともあります。bootstrap自体の更新をまって、再度cvsしてみるか、http://www.netbsd.org/Documentation/software/packages.html でバイナリが提供されているので、それをつかってみてもいいでしょう。(ただし、インストール位置は自由に選べません。)

いしはらのささやかな経験では、自分でmakeしたgccだとうまくいかないことがありました。すなお?に、どこかのパッケージ化されたgccを使ってみましょう。

 最初にlang/gccやlang/gcc3-cをmakeしようとしたら、libgcc_s.so.1が見つからないと言われる。

とりあえず、sunfreeware.comとかから、gcc3をとってきてインストールして、さっそくpkgsrcのgccをmakeしようとすると、

 ===> Building for gcc-2.95.3nb7
 ld.so.1: gmake: fatal: libgcc_s.so.1: open failed: No such file or directory
 Killed
 *** Error code 137

などといわれたりします。

これは、LD_LIBRARY_PATHをlibgcc_s.so.1のあるdirに設定してやるとmakeできます。/usr/local/libがそうだとすると、

 env LD_LIBRARY_PATH=/usr/lib:/usr/local/lib bmake

でmakeできるはずです。

crle(solarisのldconfig)で、ライブラリパスをホストに設定することも可能ですが、上記で対応できますし、トラブルの元なので、おすすめしません。

LD_LIBRARY_PATH?crle?っていうひとは、Solaris.RougeLife.orgさんのページを見ましょう。

 devel/gmakeをインストールしましたが、動きません。

lang/gcc3をgccに使っている環境だと、

 ld.so.1: gmake: fatal: libgcc_s.so.1: open failed: No such file or directory

Killedとなるかもしれません。

lddすると、

 # ldd /opt/bsd/bin/gmake
       libkstat.so.1 =>         /usr/lib/libkstat.so.1
       libintl.so.3 =>  /opt/pkg/lib/libintl.so.3
       libiconv.so.2 =>         /opt/pkg/lib/libiconv.so.2
       libc.so.1 =>     /usr/lib/libc.so.1
       librt.so.1 =>    /usr/lib/librt.so.1
       libgcc_s.so.1 =>         (file not found)
       libgcc_s.so.1 =>         (file not found)
       libdl.so.1 =>    /usr/lib/libdl.so.1
       libaio.so.1 =>   /usr/lib/libaio.so.1
       /usr/platform/SUNW,Sun-Fire-280R/lib/libc_psr.so.1

libgcc_s.so.1がありません。

でも、

 # dump -Lv /opt/bsd/bin/gmake | grep PATH
 [8]     RUNPATH            /opt/bsd/lib:/opt/pkg/gcc3/lib:/opt/bsd/gcc3/lib/gcc-lib/sparc-sun-solaris2/3.3.6
 [9]     RPATH           /opt/bsd/lib:/opt/pkg/gcc3/lib:/opt/bsd/gcc3/lib/gcc-lib/sparc-sun-solaris2/3.3.6

とRPATHがあって、

 > find /opt/bsd/lib /opt/bsd/gcc3/lib   /opt/bsd/gcc3/lib/gcc-lib/sparc-sun-solaris2/3.3.6 | grep libgcc_s.so.1
 /opt/bsd/gcc3/lib/libgcc_s.so.1

と、RPATH上にあったります。

ktrussすると、/opt/bsd/libまでしか探してくれないみたいです。ktrussの最後は

 close(3)                                        = 0
 stat("/opt/bsd/lib/libgcc_s.so.1", 0xFFBEF660)  Err#2 ENOENT
 stat("/usr/lib/libgcc_s.so.1", 0xFFBEF660)      Err#2 ENOENT
 write(2, " l d . s o . 1 :   g m a".., 77)      = 77
 munmap(0xFF390000, 8192)                        = 0
 lwp_self()                                      = 1
         *** process killed ***

でした。うーん。

これ、なんでおきるかわからないのですが、/opt/bsd/libにlibgcc_s.so.1をシンボリックリンクするととりあえず使えるので、そうしてください。あるいは、/opt/bsd/gcc3/libをLD_LIBRARY_PATHに追加しましょう。

 makeできません。

まず、第一に考えられることは、

  • Solarisデフォルト+/opt/bsd/{bin,sbin}以外がサーチパスに含まれている
  • bmake(BSD make)ではなくGNU makeをつかった
  • ftpでとってきたファイルが壊れている

でしょうか。これを確認して下さい。

それでも問題なければ、makeできないんだと思います。pkgsrcに含まれるすべてのアプリケーションがsolaris osでmakeできるわけではありません。

 devel/cvsをインストールして、anonymous CVSを試したのですが、pkgsrcのアップデートができません。

すでにpkgsrc以外でインストールしているなどの理由で、security/opensshをインストールしていないのでしょう。こういうときは、

 env CVS_RSH=/path/to/ssh cvs update -dP

などと、CVS_RSH変数にsshのパスを入れてください。

 FreeBSDのportupgradeに含まれるportversionみたいなのはないのか。

pkgtools/pkglintに含まれる、lintpkgsrcで、

 lintpkgsrc -i

でOKです。

pkgtools/pkg_chkで、

 pkg_chk -i

でもOK。こちらの方が速いみたい。

 使い方がいまいちよくわからない。

NetBSDのパッケージシステムとほぼ同じ操作が可能です。NetBSD ProjectのWebや、pkgsrc/doc/pkgsrc.{txt,html}も参照して下さい。

 入っているソフトの一覧がほしい。

pkg_info -aでOKです。pkg_infoのmanも参考にしてください。

 パッチあてに失敗する。パッチファイルは壊れていないし、linuxやNetBSD/i386上でやると正常にあてられる。

オリジナルファイルの最後にnewlineがなくて、最後の行の次の行にパッチがあたると、おかくしなるようです。

 env TOOLS_PLATFORM.patch='/opt/bsd/bin/gpatch -b -l' bmake

を試してみてください。('-l'がポイントです。)

 /bin/shの引数のスクリプトのところでmakeが止まるようだ。

/bin/kshか、/usr/xpg4/bin/shならばうまくいくはずです。

 env TOOLS_PLATFORM.sh=/usr/xpg4/bin/sh bmake

などとするか、一時的に入れ替えるかなにかしてしのいでください。だめなら、shells/bashをいれて、それと一時的に入れ替えるか何かしてしのいでください。(こっちのほうが確実。)

 installのところで、installコマンドの引数がおかしいようで止まる。

/usr/ucb/installを呼び出しているかどうか確認してください。/usr/sbin/installじゃだめです。/usr/ucb/installでもだめなら、sysutils/coreutilsをインストールして、

 env TOOLS_PLATFORM.install=/opt/bsd/bin/ginstall bmake

などとするか、一時的に/usr/ucb/installと置き換えてください。

/usr/ucb/installは引数を2つとることができないみたいなので、原因が引数を2つとっていることなのであれば、そこだけMakefileを書き換えてもいいかもしれません。

 awkを実行するところで、エラーが多発する。

これは、そのパッケージがgawkを前提にしているからでしょう。しかし、solarisの場合は、OSに付属しているnawkを使うのがデフォルト設定です。ですから、lang/gawkをいれて、

 .if exists(${LOCALBASE}/bin/gawk)
 TOOLS_PLATFORM.awk=/opt/bsd/bin/gawk
 .endif

などと/etc/mk.conf書いておけば、そうなります。

なお、grepやsedやxargsでも同じことがいえるので、同様にpkgsrcからGNUのものをインストールして、対策して下さい。

 日本語のとおるviはどこに?

あなたはOS付属のviを忘れています。

 env LANG=ja /usr/xpg4/bin/vi

を試してみましょう。

 deve/gmakeやarchives/gtar-baseなどをインストールするときに、*.poファイルのインストールのところで、エラーが出る。

環境変数LANGをCにして再度試してみて下さい。(mk/subst.mkの中で、fileコマンドの出力を判断して動作が変わるところがあるのですが、fileコマンドの出力が日本語だとおかしくなるのです。)

 bmake clean clean-depends
 env LANG=C bmake
 ...

同じ原因で、x11/ktermもinstallの途中でおかしくなるようです。

また、同様の原因で、lang/perl58でも、/bin/shの実行のところで、ulimitの値が正しくないなどといわれて止まるみたいです。(これは、mk/platform/SunOS.mkの中で、ulimitコマンドの出力を判断して動作が変わるところがあるのですが、ulimitコマンドの出力が日本語だとおかしくなるのです。)

ただし、2005/5/20頃、mk/subst.mkの修正がされたようで、もう上記の問題はおきないと思います。

 バイナリーパッケージは提供されていないの?

http://www.netbsd.org/Documentation/software/packages.html をみてみてください。Solaris 9/sparcはあるようです。(ただし、インストール位置は変更できません。)

 rootユーザ以外で、bmake installすると、rootパスワードを要求されるのはいいんだけど、ここにsudoを使えないかな?

pkgsrc.txtに書いてあります。

 .if exists(${LOCALBASE}/bin/sudo)
 SU_CMD=${LOCALBASE}/bin/sudo /bin/sh -c
 .endif

を、/etc/mk.confに書きましょう。(sudoをインストールしていない場合は、security/sudoを先にインストールして、必要な設定をしてからです。)

 ruby関連のパッケージなどでは、リンカが失敗する。

[netbsd,08980]によれば、Solaris 8はそうみたいです。作業ユーザにLD_LIBRARY_PATHを設定しましょう。

 cd /usr/pkgsrc/lang/ruby18-base
 setenv LD_LIBRARY_PATH "/opt/bsd/lib:/lib:/usr/lib:/usr/local/lib:/usr/dt/lib:/usr/openwin/lib"
 bmake
 bmake package
 bmake clean clean-depends
 unsetenv LD_LIBRARY_PATH

とか。

ただ、もうメンテナーの方がこの問題は直されていると思います。

 GNUアプリケーションをインストールすると、コマンドの頭にgがつくのがうっとおしい。なんとかならん?

GNU_PROGRAM_PREFIXという変数が頭につく「何か」ですので、これを空にしましょう。

 cd /usr/pkgsrc/textproc/gsed
 env GNU_PROGRAM_PREFIX='' bmake
 env GNU_PROGRAM_PREFIX='' bmake package
 env GNU_PROGRAM_PREFIX='' bmake clean clean-depends

などとすれば、gsedではなく、sedでインストールされます。

ただし、一部のコマンドは、そうなりません。あと、devel/gmakeはそのままインストールしたほうがいいです。

 依存関係でxxxを要求される。できれば、すでに別にインストールしてあるxxxを使いたい。

TOOLS_PLATFORM.xxxという変数を設定すれば、そのツールは依存関係があっても、インストールされず、その変数に指定したコマンドが用いられます。

 env TOOLS_PLATFORM.perl=/path/to/perl bmake

などとすればいいですね。ただし、xxxはなんでもいいわけではありません。xxxに何が書けるのかは、mk/tools以下のdefaults.mkをのぞいてみてください。ただし、tools.SunOS.mkで指定されているものは、最初からSolarisにあるコマンドを使うようになっていますので、改めて指定する必要はありません。(tools.SunOS.mkの指定を上書きしたいときは、もちろん必要です。)

mk.confに書いておくと、常に指定したコマンドが使われるようになります。

現在の設定がみたい場合は、make show-toolsでみることができます。

 gccじゃなくて、Sun WorkShopを使いたいんだけど。

doc/pkgsrc.{txt,html}の、「3.3.7.2. If you are using Sun WorkShop」と「3.3.7.3. Buildling 64-bit binaries with SunPro」を見て下さい。bootstrapから使いたいのであれば、bootstrap/README.Solarisの該当項目を参照して下さい。

 libtoolが動くところで、/bin/kshがsegmentation faultすることがある。

doc/pkgsrc.{txt,html}の「3.3.7.4. Common problems」にあるとおり、たとえばshells/bashなどをインストールして、

   .if exists(${LOCALBASE}/bin/bash)
   CONFIG_SHELL=   ${LOCALBASE}/bin/bash
   WRAPPER_SHELL=  ${LOCALBASE}/bin/bash
   .endif

を/etc/mk.confに書いて、devel/libtools-baseをインストールしなおして下さい。

 pkgtools/pkg_installをupdateしろ、と言われたけど、updateできない。

security/audit-packagesをインストールしていませんか。このパッケージはpkgtools/pkg_installに統合されたので、もうありません。先にuninstallしましょう。

 pkg_delete audit-packages

 pkgsrcにはほしいソフトがないんだけど。

pkgsrc-wipにはあるかもしれません。pkgsrc-wipは、pkgsrcに取り込まれる前の、作業場所のようなところです。使い方はリンク先を参照して下さい。

pkgsrc-wip-jpもあります。

 pkgsrcにどんなソフトがあるのかわかりにくい。

onlineでよければ、http://pkgsrc.se/ があります。pkgsrc-wipのものまで探してしまいますが、探しやすいと思いますよ。

 GUIのフロントエンドはないの?

Debian GNU/Linuxでいう、dselectやtaskselのような、コンソール指向のものは、pkgtools/pkg_selectがあります。(ただし、いしはらはSolarisでは使ったことがありません。)

Fedora Coreでいう、gyumのような、XなGUIのものは、残念ですがありません。

 Zoularisってなんですか?

bootstrap-pkgsrcができる前の、同様のしくみです。bootstrap-pkgsrcにとって代わられ、既に使われていません。

 Solaris 10で試しているんですが、いまいちうまくいきません。

onetbsd.orgで知ったのですが、Pkgsrc and Solaris10-amd64を見てみてはどうでしょうか。Solaris 10のamd64とsparc64でgccな人のHowtoみたいです。あと、一番下のりんく集もどうぞ。

 何か情報源は?

tech-pkg-ja MLと、netbsd MLぐらいしか思いつきません。試行錯誤して、困ったら、どちらかで聞いてみるといいでしょう。過去logものぞいてみるといいかもしれません。

英語でよければ、pkgsrc-users MLがオススメです。

 pkgsrcはどうも自分にあわない。他にいいのはないの?

いっそのことSolarisではなく、NetBSD/sparc, NetBSD/sparc64, NetBSD/i386, NetBSD/amd64てのはどう?

...じょうだんですよ、冗談。ええと、いろいろ有名なのはあるみたいなのですが、Community Open Source Software Distribution for The Solaris Operating Environment <http://www.blastwave.org/>や、OpenPKG <http://www.openpkg.org/>なんかどうでしょうか。

pkgsrcのように、ソースベースなものがいい、というのであれば、Gentoo LinuxのPortageのSolaris版であるPortarisがあります。(が、portaris.orgはなくなってしまって、ドメイン取られてしまいましたね...。いったいどこへいったんでしょうか。)

(続く)

りんく

少しだけ。

間違いの指摘や、ご意見などは、FrontPageにある連絡先にメールを下さるとうれしいです。

最終更新時間:2008年01月15日 00時11分42秒