にほんブログ村 IT技術ブログへ
にほんブログ村

Linux ブログランキングへ

2014年03月26日

Ubuntu改造日記 最新版 NetBSDパッケージ pkgsrcテスト編 その22

Netwalkerでpkgsrcを展開するにあたり、
まずx86でトライしてみました記録です。
pkgsrcは手順が面倒な所がありますが、
便利な所もありますのでトライして使いこなしましょう。

○pkgsrcとは
pkgsrcはNetBSDのパッケージツールで
ソースベースのコンパイルツールみたいなパッケージャーです。
移植性に優れ様々なアーキテクチャに対応しており、
UNIX環境であればNetBSDでなくてもLinuxなど殆ど対応しております。
OS、バージョン、アーキテクチャを問わず展開でき、
NetBSDを支える最高峰の移植性を誇ります。
複数のOSをまたいで同じ環境を構築するには非常に便利です。
ソースコードの最新版アプリをルール化されたレポジトリに基づいて
関係ライブラリを順番に自動コンパイルするシステムです。
gccさえあれば時間はかかりますが、エラーが出なければ
既存のソースコードコンパイルの依存性調査、コンパイル手間から開放されます。

apt-getほどの万能性は持ちませんが、
NetwalkerみたいなサポートアウトしたARM端末にとって、
神の様なツールでありこれがあればと思ってました。
GentooがKernelバージョンのせいでうまく行かなかったので
何とか使いこなしたく思います。
Jauntyだとコンパイルエラーに死ぬほど泣かされますがw
まずはx86 Ubuntu上でトライして修行します。

○pkgsrcテスト
参考はこちらにしました。
色々試してみましたが、バージョンによって少しづつ方法が変わるので注意です。

 Ubuntu Weekly Recipe第195回 Ubuntuでpkgsrcを使う
 
詳細な情報は本家HPに書いてあります。
あまりに沢山の環境に対応していますので、


まずはコンパイルに必要なパッケージを入れます。

 sudo apt-get install build-essential libncurses5-dev libncursesw5-dev

次にパッケージソース、pkgsrcを保存します。
本家HPからcurrent.tgzバージョンをダウンロードします。
本来ならstableの方が良いのですが、エラーに泣かされるので。

 http://www.pkgsrc.org/

落としたら展開します。
今回はHomeフォルダにインストールします。
Bashを使っている場合は下記を.bashrcに追記します。

 gedit 〜/.bashrc

みたいな感じで下記一行を最後らへんに追加。

 PATH=${HOME}/pkg/bin:${HOME}/pkg/sbin:${PATH}

端末を一度閉じて再び起動させて.bashrcのPATHを更新します。
bootstrapを展開してpkgsrcをインストール。

 cd pkgsrc/bootstrap
 export SH=/bin/bash
 ./bootstrap --unprivileged

pkgsrcが動いてインストールされたはず。
ここからが本番。
初期インストールの際に注意が必要です。
まずキーとなるパッケージを先にいれます。重要です。
順番に。

 digest
 ncurces
 ncursesw


やり方はフォルダに移動してからbmake、bmake installです。 

 cd pkgsrc/devel/ncurces
 bmake
 bmake install

運が良ければ一回で通りますが、
stable.tgzの場合は一度落ちました。
current.tgzの場合を試しましたが今回は通りました。
普通は逆かもしれませんけど。

コンパイルに失敗しましたらエラーを読んで対策した後に、
bmake cleanを行い失敗したデータを一度消す必要があります。
その後にbmakeをやり直します。
消せばリセットされるのはかなり重宝します。

・pkgsrcデータベースのアップデート
pkgsrcを最新版に更新するにはcvsを用います。
まずcvsを入れておきます。

 sudo apt-get install cvs

pkgsrcフォルダの上からcvsを実行します。

 cvs update -dP

・コンパイル順番がうまく行かない場合のエラー 
一例ですがこんな感じで出てくるエラーに要注意。
これはパッケージのインストール依存性手順がよろしくない場合に発生します。
下から上へエラーをたどっていくと、
sysutils/halのパッケージがコンパイルで止まってます。
対策はsysutils/halをbmake cleanを行い一回消してから、
再度bmakeを行う必要があります。
つまりsysutils/halのインストール依存性が解決していなかったので
コンパイル出来なかったと推定します。
halを単独で依存性をやり直す事でたぶんコンパイルが通ります。
apt-getほどの性能が無いのはこれも一因でしょうか。
時々良く起こります。

make[5]: *** [addon-storage.o] Error 1
make[5]: Leaving directory `/home/kapper1224/pkgsrc/sysutils/hal/work/hal-0.5.14/hald/linux/addons'
make[4]: *** [all-recursive] Error 1
make[4]: Leaving directory `/home/kapper1224/pkgsrc/sysutils/hal/work/hal-0.5.14/hald/linux'
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory `/home/kapper1224/pkgsrc/sysutils/hal/work/hal-0.5.14/hald'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/home/kapper1224/pkgsrc/sysutils/hal/work/hal-0.5.14/hald'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/kapper1224/pkgsrc/sysutils/hal/work/hal-0.5.14'
make: *** [all] Error 2
*** Error code 2

Stop.
bmake: stopped in /home/kapper1224/pkgsrc/sysutils/hal
*** Error code 1

Stop.
bmake: stopped in /home/kapper1224/pkgsrc/sysutils/hal
*** Error code 1

Stop.
bmake: stopped in /home/kapper1224/pkgsrc/audio/pulseaudio
*** Error code 1

・ライセンス問題のエラー
ライセンス関係で下記エラーが出る場合はエラー通り
mk.confとpkg_install.confに追記します。

 gedit /home/{HOME}/pkg/etc/mk.conf
 gedit /home/{HOME}/pkg/etc/pkg_install.conf

一行を追加。下記は一例です。

 ACCEPTABLE_LICENSES+= ubuntu-font-license

再びbmakeします。
多分動作するはずです。

ERROR: This package has set PKG_FAIL_REASON:
ERROR: ubuntu-fonts-0.80 has an unacceptable license condition:
ERROR: ubuntu-font-license
ERROR: You can mark the license ``ubuntu-font-license'' as acceptable by adding
ERROR: ACCEPTABLE_LICENSES+= ubuntu-font-license
ERROR: to /home/kapper1224/pkg/etc/mk.conf or by adding
ERROR: ACCEPTABLE_LICENSES= ubuntu-font-license
ERROR: to /home/kapper1224/pkg/etc/pkg_install.conf.
ERROR: The following command will show you the license text:
ERROR: /home/kapper1224/pkg/bin/bmake show-license
*** Error code 1

Stop.
bmake: stopped in /home/kapper1224/pkgsrc/fonts/ubuntu-fonts


・x86-64Bit関係のエラー
x86-64Bit関係でi386アプリが動作しないエラー。
i386関連のライブラリを追加する必要があります。

 sudo apt-get install (パッケージ名):i386


ERROR: This package is only available for these platforms: *-*-i386.
ERROR: This package has set PKG_FAIL_REASON:
ERROR: quake-2.30nb5 is not available for Linux-3.11.0-x86_64
*** Error code 1

Stop.
bmake: stopped in /home/kapper1224/pkgsrc/games/quake

・パッケージの脆弱性チェックのエラー
詳細は把握出来ておりませんが、本家HPを見ますと、
パッケージの脆弱性チェックとしてpkg-vulnerabilitiesが上がっており、
エラー通りfixする必要ありそうです。

 /home/{HOME}/pkg/sbin/pkg_admin -K /home/{HOME}/pkg/var/db/pkg fetch-pkg-vulnerabilities

WARNING: No /home/kapper1224/pkg/var/db/pkg/pkg-vulnerabilities file found.
WARNING: To fix run: `/home/kapper1224/pkg/sbin/pkg_admin -K /home/kapper1224/pkg/var/db/pkg fetch-pkg-vulnerabilities'.

・sun-jre6-6.0.45のエラー
Libreoffice関連ですが、sun-jre6-6.0.45が必要だとのエラーが出てます。
エラー通りSUNのサイトからsun-jre6-6.0.45をダウンロードする必要があります。
SUNのサイトからダウンロードするには登録が必要です。
まあLibreoffce4-binと言ったsun-jre6-6.0.45が要らない
バージョンもありますので無くてもLibreoffceは一応使えます。

===> Checking for vulnerabilities in sun-jre6-6.0.45
Package sun-jre6-6.0.45 has a arbitrary-code-execution vulnerability, see http://secunia.com/advisories/45173/
Package sun-jre6-6.0.45 has reached end-of-life (eol), see http://ftp.NetBSD.org/pub/NetBSD/packages/vulns/eol-packages
Package sun-jre6-6.0.45 has a multiple-vulnerabilities vulnerability, see http://secunia.com/advisories/53846/
Package sun-jre6-6.0.45 has a multiple-vulnerabilities vulnerability, see http://secunia.com/advisories/55315/
ERROR: Define ALLOW_VULNERABLE_PACKAGES in mk.conf or IGNORE_URL in pkg_install.conf(5) if this package is absolutely essential.
*** Error code 1

Stop.
bmake: stopped in /home/kapper1224/pkgsrc/lang/sun-jre6
*** Error code 1

Stop.
bmake: stopped in /home/kapper1224/pkgsrc/devel/apache-ant
*** Error code 1

・構造体struct file_handleの定義エラー?
BasiliskIIのコンパイル時のエラーですが、
struct file_handleの構造体が先に使われており、
重複するのでエラーが出ています。
構造体名を変更すれば良さそうですが、
どこまで繋がっているか分かりませんのでまだ試せてないです。


g++ -I/home/kapper1224/pkg/include -I/usr/include -I../include -I. -I../uae_cpu -I../slirp -DHAVE_CONFIG_H -DOS_linux -DUNALIGNED_PROFITABLE -DX86_64_ASSEMBLY -DOPTIMIZED_FLAGS -DFPU_IEEE -D_REENTRANT -DDATADIR=\"/home/kapper1224/pkg/share/BasiliskII\" -O2 -Wno-error -I/home/kapper1224/pkg/include -I/usr/include -O0 -I/home/kapper1224/pkg/include -fno-merge-constants -fno-gcse-sm -c sys_unix.cpp -o obj/sys_unix.o
sys_unix.cpp:57:8: error: redefinition of 'struct file_handle'
struct file_handle {
^
In file included from /usr/include/x86_64-linux-gnu/bits/fcntl.h:61:0,
from /usr/include/fcntl.h:35,
from sysdeps.h:51,
from sys_unix.cpp:23:
/usr/include/x86_64-linux-gnu/bits/fcntl-linux.h:300:8: error: previous definition of 'struct file_handle'
struct file_handle
^
sys_unix.cpp: In function 'void* Sys_open(const char*, bool)':
sys_unix.cpp:368:7: error: 'struct file_handle' has no member named 'name'
fh->name = strdup(name);


○まとめ
使いこなすことが出来れば極めて優れたツールですが、
ちょっとでも古い環境になりますと、
雪崩の様なコンパイルエラーとの戦いに打ち勝つ必要があります。
x86でうまく動作出来るスキルを習得したら、
次はARM端末にトライしましょう。そして古いOSのJauntyへ依存性のバトルへと。
決して逆からトライしてはいけませんw
起こり得るべきエラースキルをまず修行して習得します。
Kapperは次にJaunty x86で修行しましょうかw
posted by kapper at 19:10 | Comment(0) | Ubuntu
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

にほんブログ村 IT技術ブログへ
にほんブログ村

Linux ブログランキングへ