devx_400.sfs をフルインストールで使う
ついでに, 開発環境も整え始めた. Puppy Linux では, devx_400.sfs にmakeやgcc, libディレクトリといった開発環境一式が納められている.
フルインストールの場合, devx_400.sfsをmountし, 中身をすべて / 以下にコピーする方法しか見つからなかった. そこで, シンボリックリンクでなんとかできないものか考えてみた.
lndir という, ディレクトリツリーを保ってシンボリックリンクをつくるプログラムがある. これのRuby移植版 lndir.rb を改造して使った.
"--append"というオプションを追加し, 本来ならディレクトリやファイルが存在している場合にエラーを返すところを無視して(!進めるようにした.
具体的には, lndirメソッド内の,
# create srcdir name dirname = ndir.expand_path.basename if dirname.exist? raise IOError, "\n\n Error : \"#{dirname.to_s}\" is already exist.\n\n" end print " Directory: #{relpath2dst.join(dirname)} is created\n" if OPTS[:verbose] dirname.mkdir Dir.chdir(dirname.to_s)
を,
# create srcdir name dirname = ndir.expand_path.basename if dirname.exist? raise IOError, "\n\n Error : \"#{dirname.to_s}\" is already exist.\n\n" unless OPTS[:append] else print " Directory: #{relpath2dst.join(dirname)} is created\n" if OPTS[:verbose] dirname.mkdir end Dir.chdir(dirname.to_s)
if f_or_d.exist? raise IOError, "\n\n Error : \"#{f_or_d.to_s}\" is alread exist.\n\n" end f_or_d.make_symlink(dir.join(f_or_d)) unless OPTS[:dryrun] print " SymLink : #{path2src.join(f_or_d.basename)} => #{relpath2dst.join(dirname, f_or_d)}\n" if OPTS[:verbose]
を
if f_or_d.exist? raise IOError, "\n\n Error : \"#{f_or_d.to_s}\" is alread exist.\n\n" unless OPTS[:append] else f_or_d.make_symlink(dir.join(f_or_d)) unless OPTS[:dryrun] print " SymLink : #{path2src.join(f_or_d.basename)} => #{relpath2dst.join(dirname, f_or_d)}\n" if OPTS[:verbose] end
に変えた. あと, --appendオプション(OPTS[:append])の追加も.
で,
# mount -o loop /devx_400.sfs /mnt/devx # cd / # lndir.rb ./mnt/devx/bin ...(libとかsbinとか)...
./mnt/devx などと相対パスで指定すれば, 実際のファイルがumountでなくなってもシンボリックリンクはなくならないので便利.
試しに sl をmakeしてみたら, しっかり機関車が走ってくれた.