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

Linux ブログランキングへ

2014年04月29日

モバイルUbuntu、NetWalker登場 Jaunty環境最新版パッケージ NetBSD pkgsrc導入完了2編 その222

Jaunty環境でも最新パッケージを提供してくれる
NetBSDの神Toolのpkgsrcがようやく完全動作しましたので
再度ブログに追記致します。
CoreutilsをLucid化して運用します。
ここまでの道のり結構長かったですが安心して使えるのは良い事です。
是非試してみましょう。

○pkgsrcとは
細かい内容はこちらに記載しました。
長いのでまず一読願います。
 
 Ubuntu改造日記 最新版 NetBSDパッケージ pkgsrcテスト編 その22

○Coreutilsのバージョンエラー
Jaunty環境そのままでpkgsrcが動作しなかったのは
Coreutilsのバージョンが古かった為と想定しまして
installコマンドが所定の動作しなかったのが理由とおおよそ結論付けします。
他のパッケージも入れ変えてるので多分ですが。
Jauntyのバージョンではコンパイルまでは通るのですがbmake installが通らない為、
一個のパッケージでエラー止まりを繰り返すのは大変苦痛で
依存関係を解消するのが出来ず続かないといった悩みがありました。

所が同じCortexA8 iMX515 Ubuntu10.04のHercules eCAFE EX HDで
pkgsrcがすんなり動作したのでバージョン違いだろうという事で
現象とバージョンのChengelogから、
GNU Coreutilsパッケージに含まれるinstallコマンドが原因と推定しました。

GNU CoreutilsとはUnix関係のlsとか基本パッケージをまとめた物で
こんな感じに沢山のtoolを一括してます。

・File Utilities
 chgrp ファイルの所有グループを変更する
 chown ファイルの所有者を変更する
 chmod ファイル、またはディレクトリのアクセス権を変更する
 cp ファイル、またはディレクトリをコピーする
 dd ファイルのコピーと変換を行う
 df ディスクの空き容量を表示する
 dir lsと同等
 dircolors lsの表示色を設定する
 install ファイルをコピーし、属性を設定する
 ln リンクを作成する
 ls ディレクトリに含まれるファイル一覧を表示する
 mkdir ディレクトリを作成する
 mkfifo FIFO(名前付きパイプ)を作成する
 mknod 特殊ファイル(デバイスファイルなど)を作成する
 mv ファイルを移動する
 rm ファイルを削除する
 rmdir 空のディレクトリを削除する
 shred ファイルの内容を破壊し、復旧できなくする
 sync ファイルのキャッシュを物理的に書き込む
 touch ファイルの時刻を変更する
 vdir 詳細なディレクトリ内容を表示する(ls -lと同等)
 
・Text utilities
 cat ファイルの中身を表示する、またはファイルを連結して表示する
 cksum ファイルのチェックサムとファイルサイズを計算する
 comm 2つのファイルについて行ごとに比較する
 csplit ファイルを文脈ベースで分割する
 cut 各行から選択した部分を表示する
 expand タブをスペースに変換する
 fmt テキストを段落に整形する
 fold 入力行を指定された幅にあわせて折りたたむ
 head ファイルの最初の部分を表示する
 join 二つのファイルを読み、フィールドが共通な行を結合する
 md5sum MD5 ハッシュチェックサムを計算・チェックする
 nl 行番号を付けてファイルを出力する
 od ファイルを 8 進数 (または他の形式) で出力する
 paste ファイルを行単位でマージする
 pr 印刷用にファイルのページづけ・段組みを行う
 ptx 整列済み索引を作成する
 sha1sum SHA-1 ハッシュチェックサムの計算と検証を行う
 sort テキストファイルを行単位でソートする
 split ファイルを決まった大きさに分割する
 sum チェックサムとブロック数を表示する
 tac ファイルを結合して逆順に表示する
 tail ファイルの末尾の部分を表示する
 tr 文字の変換・削除や、連続する文字の圧縮を行う
 tsort 有向グラフのトポロジカルなソートを行う
 unexpand スペースをタブに変換する
 uniq ソートされたファイルから重複する行を削除する
 wc ファイルのバイト数・単語数・行数を表示する
 Shell utilities
 basename ファイル名からディレクトリと拡張子を取り去る
 chroot ルートディレクトリを変更する
 date 現在のOS日時を表示、または変更する
 dirname パスからディレクトリ名以外の部分を除去する
 du ファイルのディスク使用量を見積もる
 echo 1行のテキストを表示する
 env 環境変数を一時的に設定、または表示する
 expr 式を評価する
 factor 数値を素因数分解して素数の約数を表示する
 false 何もせずに失敗の値を返す
 groups ログインしているユーザーのグループを表示する
 hostid 現在のホストの識別値を表示する
 id 現在のユーザID名とグループID名を表示する
 link ファイルの新しい名前を作成する
 logname ユーザーのログイン名を表示する
 nice プロセスの優先度を変更する
 nohup ログアウト後もコマンドの実行が継続することを許可する
 pathchk ファイル名の可搬性 (portability) をチェックする
 pinky fingerコマンドの軽量版
 printenv 環境変数の全部あるいは一部を表示する
 printf データの表示形式を変換して表示する
 pwd カレントディレクトリの名前を表示する
 readlink シンボリックリンクの値を表示する
 seq 通し番号を表示する
 sleep 指定された時間休止する
 stat ファイルの状態を得る
 stty 端末の行設定を変更、表示する
 tee 標準入力から読んだ内容を標準出力とファイルとに書き出す
 test ファイル形式のチェックや値の比較を行う
 true 何もせずに成功の値を返す
 tty 端末名を表示する
 uname システムの情報を表示する
 unlink 名前を削除し、場合によってはそれが参照しているファイルも削除する
 users 現在ログインしているユーザーを表示する
 who 現在ログインしているユーザーを詳細に表示する
 whoami ユーザーのログイン名を表示する
 yes killシグナルが送られるまで文字を表示し続ける


JauntyのCoreutilsは6.12でLucidのCoreutilsは7.4です。
6系⇒7系のinstallコマンドの変化点がこちらです。
本家GNUのHPより抜粋。

 [Coreutils-announce] coreutils-7.0 released (beta)

install accepts a new option --strip-program to specify
 the program used to strip binaries.

この--strip-programのオプションが更新された事で
古い環境でpkgsrcが動作しない主な理由と推定してます。
pkgsec側で対応できれば、本当に嬉しいな(わがまま)
まあそれ以外でエラーが無い移植性が驚きですけどね。
パッケージを載せ替えて運用出来ます。

○pkgsrcインストールメモ
ざっくりと今回の記録します。
詳細は超長くなりますので
x86環境で洗い出ししましたので
やる前にそちらを参考願います。

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


・Pin-Priorityによる部分Lucid化
まずapt.confのファイルを作りjauntyを指定します。
Lucidパッケージを入れてもJauntyのPin-Priority: 1001に設定しなおせば
元のJauntyバージョンにいつでも戻せます。
参考はこちら。

 モバイルUbuntu、NetWalker登場 Jaunty-Lucid混載 apt Pin-Priority設定編 その164

 sudo gedit /etc/apt/apt.conf

で下記の文章を貼り付けて保存します。

APT
{
Default-Release "jaunty";
Cache-Limit "50331648";
};

Pin-Priorityを設定します。

 sudo gedit /etc/apt/preferences

で下記の文章を貼り付けて保存します。

 Package: *
 Pin: release a=jaunty
 Pin-Priority: 1000

 Package: *
 Pin: release a=lucid
 Pin-Priority: 0

設定終了しましたらLucidのリポジトリを登録します。

 sudo gedit /etc/apt/sources.list

で下の1行を追加して保存。
以前のとURLが違いますので注意。

 deb http://old-releases.ubuntu.com/ubuntu lucid main restricted universe multiverse

でアップデート

 sudo apt-get update

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

sudo apt-get install build-essential/lucid libncurses5-dev/lucid libc6-dev/lucid g++/lucid libncurses5/lucid g++-4.4/lucid gcc-4.4/lucid libgomp1/lucid cpp/lucid gcc/lucid libstdc++6-4.4-dev/lucid binutils/lucid libstdc++6/lucid coreutils/lucid libc6/lucid libgcc1/lucid

次にパッケージソース、pkgsrcを保存します。
本家HPからcurrent.tgzかstable.tgzをダウンロードします。
2014Q2今の時点ではどちらでも問題ないはずです。

 http://www.pkgsrc.org/

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

 gedit 〜/.bashrc

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

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

面倒ならexport SH=/bin/bashも追加するのもありですけど。
端末を一度閉じて再び起動させて.bashrcのPATHを更新します。
bootstrapを展開してpkgsrcをインストール。

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

pkgsrcが動いてインストールされたはず。
ここからが本番。
初期インストールの際に注意が必要です。
まずキーとなるパッケージを先にいれます。重要です。
順番に。
エラーが出てもbmake clean、bmakeでやり直すだけですが。 
まずpkg-vulnerabilitiesから

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

 cd pkgsrc/pkgtool/digest
bmake
bmake install

 cd pkgsrc/devel/nbpatch
bmake
bmake install

 devel/ncurses
bmake
bmake install

後は多分問題ないはずなのでそれぞれのパッケージをコンパイルしてみましょう。

 lang/g95

などでUSE_TOOLS+=perlをMakefileに追加してくださいとか
たまに固有のエラーは出るかもしれませんが仕様です。
どの環境でも起こります。
追加してからbmake clean && bmakeしてやり直しましょう。

○アプリのインストール
色々とテスト中ですが、
まず設定ファイルであるmk.confの設定を変更します。
最初のコンパイル環境が無事完成するまでは手を付けてはいけません。
大体ncursesをコンパイル完了した後あたりが良いです。
要注意。

 gedit /home/{ユーザー}/pgk/etc/mk.conf

下の行を真ん中らへんに追加して保存します。

 PREFER_PKGSRC=yes
 DEPENDS_TARGET=bin-install
 USE_LIBTOOL=yes
 USE_LANGUAGES=c++

上のPREFER_PKGSRC=yes、USE_LIBTOOL=yesを入れると
pkgsrcで入っているライブラリが優先的に使われます。
DEPENDS_TARGET=bin-installはバイナリパッケージがあれば
優先的にそちらをインストールします。
gccなど言語関係を入れる時はUSE_LANGUAGES=c++で指定が必要です。
Firefoxなどコンパイルする際には依存関係でgcc45を
入れようとするので必要です。


○MicroSD、USBでpkgsrcをコンパイルする
pkgsrc自体はソースコードの集まりなので、とっても容量を食います。
大体普通に使う程度でも10GB位は必要でSSDを直ぐに食いつぶします。
またコンパイルはSSDの負担が大きいので寿命が短くなります。
コンパイルしたバイナリはSSDに置けるので実行には外しても問題ありません。
やり方はpkgsrcのフォルダをMicroSDかUSBにコピーするだけです。

・MicroSD、pkgsrcのパーミッションを変更する
作業用のworkフォルダを自動作成する際にパーミッションのエラーが出ますので
パーミッションを変更しておきます。
-Rコマンドを付けて再帰的に全フォルダのパーミッションを変更しておきます。

 sudo chmod 777 /media/disk/ -R

・MicroSD、USBをEXT3で運用する。
Windowsから見れなくなりますが、必要であればEXT3に変更しておきます。
まず右クリックかなにかでメニューからアンマウント
やるまえにディスクの/devを確認しておきましょう。

MicroSDの場合はこちら
 sudo fdisk /dev/mmcblk0p1

USBの場合はこちら
 sudo fdisk /dev/sda

fdiskが起動したら領域削除 d
新しく領域を作成 n
フォーマット形式をEXT3を選択 83
基本領域1〜4を選択、シリンダで必要な容量を選択
テーブルをファイルに保存 w

再び自動でマウントされるので再度アンマウント
EXT3でフォーマットします。

MicroSDの場合
 sudo mkfs.ext3 /dev/mmcblk0p1
USBの場合はこちら
 sudo mkfs.ext3 /dev/sda


○まとめ
動くようになりましても、
ダウンロードとコンパイルでめちゃくちゃ時間がかかります。
PerlやPython、GCC、LibreOfficeとか巨大なアプリをコンパイルする際には
とっても注意しましょう。

ここまでpkgsrcテストから検証に1.5か月くらいかかってます。
一応完全動作まで行きましたが苦肉の策でした。
Jauntyの環境でパッケージだけ最新に更新したい人にはお勧めです。
Gnuplugとか玄柴とかJaunty環境を使わざる得ない人にもお勧めです。
一応、パッケージのサポートアウト課題はこれで解決しました。

コンパイルエラーが出て対応した際には
世界の平和の為、ネットのどこかに記載して頂ければ助かります。
検索エンジンにヒットして知らないうちに誰かが幸せになるはずです。
是非コンパイルエラーを乗り越えて使ってみましょう。
posted by kapper at 06:59 | Comment(0) | Netwalker
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

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

Linux ブログランキングへ