再度2010/02/03:TerastationPROのLinuxBox化(下)を見ながらリベンジ。
今までは、FreeBSDでrpm2cpio | cpio -id していたのだが、効率を上げるために記事の通りTeraStationにrpm2cpioとcpioを入れる。
続いて、開発環境関連のrpmをftp.jaist.ac.jpから持ってくる。
持ってきたのは、参考サイトに書いてある以下のもの。
  • autoconf-2.59-2vl3.noarch.rpm
  • automake-1.8.5-0vl1.noarch.rpm
  • binutils-2.14.90.0.7-1vl2.ppc.rpm
  • diffutils-2.8.1-11vl1.ppc.rpm
  • ftp-0.17-15vl2.ppc.rpm
  • gcc-3.3.2-0vl8.ppc.rpm
  • gcc-c++-3.3.2-0vl8.ppc.rpm
  • gcc-cpp-3.3.2-0vl8.ppc.rpm
  • glibc-common-2.3.3-3vl1.ppc.rpm
  • glibc-devel-2.3.3-3vl1.ppc.rpm
  • initscripts-6.51-1vl26.ppc.rpm
  • kernel-headers-2.4.26-0vl17.ppc.rpm
  • less-358-0vl9.ppc.rpm
  • make-3.80-0vl3.ppc.rpm
  • ntp-4.2.0-0vl3.ppc.rpm
  • pkgconfig-0.15.0-0vl2.ppc.rpm
  • popt-1.6.5-1vl8.ppc.rpm
  • sh-utils-2.0.11-9vl6.ppc.rpm
  • textutils-2.0.17-0vl4.ppc.rpm
  • unzip-5.50-5vl2.ppc.rpm
  • vim-6.3.31-0vl1.ppc.rpm
  • こいつらを、参考サイトに従って /mnt/array1/newroot に展開。(参考サイトだと /mnt/disk1だが、RAIDを組んでいると /mnt/array1なので読み替えが必要。そのことも参考サイトには書いてあるけど)
    展開したら、参考サイトにあるスクリプトで既存の / と比較する。
    ./usr/bin/getent
    ./usr/bin/locale
    ./usr/bin/env
    ./usr/bin/expr
    ./usr/bin/id
    ./usr/bin/tty
    ./usr/bin/head
    ./usr/bin/sum
    ./usr/bin/tail
    ./usr/bin/tr
    ./usr/bin/wc
    ./usr/share/locale/locale.alias
    ./usr/share/zoneinfo/America/Buenos_Aires
    ./usr/share/zoneinfo/America/St_Johns
    ./usr/share/zoneinfo/America/Santiago
    ./usr/share/zoneinfo/America/Anchorage
    ./usr/share/zoneinfo/Asia/Baghdad
    ./usr/share/zoneinfo/Asia/Bangkok
    ./usr/share/zoneinfo/Asia/Calcutta
    ./usr/share/zoneinfo/Asia/Dubai
    ./usr/share/zoneinfo/Asia/Kabul
    ./usr/share/zoneinfo/Asia/Katmandu
    ./usr/share/zoneinfo/Asia/Kuwait
    ./usr/share/zoneinfo/Asia/Rangoon
    ./usr/share/zoneinfo/Asia/Tokyo
    ./usr/share/zoneinfo/Asia/Tehran
    ./usr/share/zoneinfo/Asia/Taipei
    ./usr/share/zoneinfo/Asia/Dhaka
    ./usr/share/zoneinfo/Atlantic/Cape_Verde
    ./usr/share/zoneinfo/Australia/North
    ./usr/share/zoneinfo/Australia/Adelaide
    ./usr/share/zoneinfo/Europe/Athens
    ./usr/share/zoneinfo/Europe/Rome
    ./usr/share/zoneinfo/Europe/London
    ./usr/share/zoneinfo/Indian/Maldives
    ./usr/share/zoneinfo/Pacific/Guam
    ./usr/share/zoneinfo/Pacific/Marquesas
    ./usr/share/zoneinfo/Pacific/Midway
    ./usr/share/zoneinfo/Pacific/Ponape
    ./usr/share/zoneinfo/Pacific/Tongatapu
    ./usr/share/zoneinfo/Pacific/Auckland
    ./usr/share/zoneinfo/Pacific/Honolulu
    ./usr/share/zoneinfo/zone.tab
    ./usr/share/zoneinfo/UTC
    ./usr/share/zoneinfo/MST
    ./usr/share/zoneinfo/EST5EDT
    ./usr/share/zoneinfo/PST8PDT
    ./usr/share/zoneinfo/EST
    ./usr/share/zoneinfo/MST7MDT
    ./usr/share/zoneinfo/CST6CDT
    ./usr/lib/libpopt.so.0.0.0
    ./usr/sbin/ntpdate
    ./bin/usleep
    ./bin/date
    ./bin/echo
    ./bin/false
    ./bin/sleep
    ./bin/stty
    ./bin/su
    ./bin/true
    ./bin/uname
    ./bin/cat
    ./etc/inittab
    ./etc/rc.d/init.d/halt
    ./etc/sysctl.conf
    ./etc/pam.d/su
    ./sbin/ifdown
    ./sbin/ifup
    
    ...だいぶ参考サイトよりも多い。
    被ったものはリネームとあるので、泣きながらnewrootの方をリネームしていく。
    手でやるとミスるので、スクリプトが吐いた newfile.dup をエディタで修正しよう。さらに、/usr/share/zoneinfo/* はファイルを一つ一つリネームするのもなんなので、ディレクトリ毎リネームする。(たぶんなくても困らないでしょ?)
    #!/bin/bash
    cd newroot
    
    files=`cat << EOT
    ./usr/bin/getent
    ./usr/bin/locale
    ./usr/bin/env
    ./usr/bin/expr
    ./usr/bin/id
    ./usr/bin/tty
    ./usr/bin/head
    ./usr/bin/sum
    ./usr/bin/tail
    ./usr/bin/tr
    ./usr/bin/wc
    ./usr/share/locale/locale.alias
    ./usr/share/zoneinfo
    ./usr/lib/libpopt.so.0.0.0
    ./usr/sbin/ntpdate
    ./bin/usleep
    ./bin/date
    ./bin/echo
    ./bin/false
    ./bin/sleep
    ./bin/stty
    ./bin/su
    ./bin/true
    ./bin/uname
    ./bin/cat
    ./etc/inittab
    ./etc/rc.d/init.d/halt
    ./etc/sysctl.conf
    ./etc/pam.d/su
    ./sbin/ifdown
    ./sbin/ifup
    EOT
    `
    for i in $files
    do
    echo $i
    mv $i $i.vine
    done
    
    こいつを /mnt/array1 (newrootがあるディレクトリ) で実行する。
    続いて、リンクを張る。参考URLと同じ手順でやったら、
    • mv usr/src/linux-2.4.26/include/* usr/include/ の手順で net と scsi が usr/include に既にあるので mv に失敗する。
    • usr/include で asm → asm-ppc のリンクは既にある
    と言う状態だった。
    この状態で、再度rootと比較するスクリプトを動かして、出力が空であることを確認しておくと、後で既存のファイルを上書きしてしまうことがない。
    この時点で、newrootの du -ah の結果は 147M、df -ha での / の空きは 294M。参考サイトのように / は拡張していないが、入れても深刻なことにはならないだろうと判断して、展開していくことにする。
    # cd /mnt/array1/newroot
    # tar zcvf ../TeraLinuxKit.tar.gz bin/ etc/ usr/
    # tar zxvfk /mnt/disk1/TeraLinuxKit.tar.gz -C /
    

    続いて、sambaの依存ツール/ライブラリのビルド。
    参考サイトと現時点でバージョンが違うので、一応リストアップ。 Berkeley DB(今は Oracleなのね)、openldap、krbはいらないと思ったので入れない。
    上記をひと通りダウンロードして、m4からスタート。
    しかし、2番目のautoconf の時点で perl の Data/Dumper.pmがないと言うエラーで止まる。
    面倒臭くなったので、既に入っているツール類は新しくしなくても良いや〜とlibiconvのコンパイル。
    と思ったらpatchをあてるのにGNU patchが必要だったのでこちらを先にインストール。
    libiconvは無事に入ったので、続いて samba の configure。
    # ./configure --prefix=/opt/samba --with-piddir=/var/run --with-libiconv=/usr/local
    
    としてみたら、またまたMakefile-noincludesができて Makefileができない。
    configureの出力を見ていると、egrepがないとか言ってる。
    またbusyboxにしても良かったんだけど、今回はGNU grep(grep-2.7.tar.gzを持ってくることに。
    libiconvが先に入っていると、オプション無しのconfigureでは libiconv をリンクしてくれないので、以下のオプションでやってみた。
    # ./configure --with-libiconv-prefix=/usr/local
    
    ら失敗するので
    # ./configure --without-libiconv-prefix
    
    にしても駄目なので、大人しくbusyboxを使う。
    しかし、やはり Makefile-noincludes しかできない。
    だいぶくじけてきたので、make -f Make-noincludes でビルドしてみることに。
    何事もなかったかのようにビルドは成功したので、make -f Makefile-noincludes install でインストール。
    smb.conf と lmhosts を/opt/samba/lib にコピーして、smbdを起動しようとすると、libwbclient.so.0が見つからない。
    LD_LIBRARY_PATH=/opt/samba/lib で smbd を起動すると、No sockets available to bind to.で落ちる。 ...昨日とまったく一緒です。本当にありがとうございました。
    config.logを再度見てみると、ipv6関連のテストがyesになっています。
    TeraStationはipv6に対応してないし、libipv6なんて見当たらないのですが、なんでこうなるのか謎です。

    何が悪いのか検討もつかなかったので、試しに参考サイトがいれているsamba3.0系の最新版であるsamba-3.0.36で試してみることにしました。
    とりあえず、3.5でlibwbclient.so.0が見つからないのは、ビルド時にリンカに-Rオプションが渡っていないからだと思うので、参考サイトと同じように configure実行時にLDFLAGSを追加。
    #  CPPFLAGS="-I/usr/local/include" LDFLAGS="-R/usr/local/lib -L/usr/local/lib" \
    ./configure --prefix=/opt/samba --with-piddir=/var/run --with-libiconv=/usr/local
    
    これで、無事にconfigureが終了してMakefileができたので、make, make installであっけなくインストール完了。
    起動してみたら、WindowsからもMacからも日本語のファイル名が文字化けせずに動作するようになりました。
    Macがアクセスすると、各ディレクトリに .DS_Store と言うファイルができてしまうので、Windowsから見るときに気になりそうですが。
    あとは、/etc/init.d/smb ファイルをいじって、/opt/samba のファイルを起動するように直すだけ。
    OpenTeraのsambaをいれている場合は、/etc/init.d/smbの冒頭で定義しているSAMBA3を変えればそのままいけそう。
    私の場合は、OpenTeraのsamba3は適用しなかったので、zipの中身を以下のように配置した。
    • /etc/samba/smb.conf ← TeraStationの管理ファイルが生成する samba2用の設定ファイル
    • /etc/samba/lmhosts ←同上
    • /etc/samba/smb2smb3.pl ← OpenTeraのsamba3から持ってきて、日本語対応に書き換えた物
    • /etc/init.d/smb ← OpenTeraのsamba3から持ってきて、SAMBA3を /opt/samba に書き換えた物
    • /opt/samba/lib/smb.conf ← smb2smb3.pl が変換したsamba3用の設定ファイル。
    • /opt/samba/lib/lmhosts ← /etc/init.d/smb がコピーした samba3用の設定ファイル。
    • と、言うわけで smb2smb3.pl の書き換え。
      *** smb2smb3.pl.orig    Sat Apr 30 07:49:06 2011
      --- smb2smb3.pl Sat Apr 30 07:53:15 2011
      ***************
      *** 50,58 ****
          close(SMB2_CONF);
          
        # Open up the Samba 3 output file
      !   if (!open (SMB3_CONF, ">/usr/local/samba3/lib/smb.conf")) 
          { 
      !       die "File Open Error - /usr/local/samba3/lib/smb.conf\n"; 
          }
        
        
      --- 50,58 ----
          close(SMB2_CONF);
          
        # Open up the Samba 3 output file
      !   if (!open (SMB3_CONF, ">/opt/samba/lib/smb.conf")) 
          { 
      !       die "File Open Error - /opt/samba/lib/smb.conf\n"; 
          }
        
        
      ***************
      *** 119,124 ****
      --- 119,132 ----
              {
                      # Remove line - this is not used by Samba 3
              }
      +       elsif ($line =~ m/coding system/)
      +       {
      +               print SMB3_CONF "    display charset = CP932\n";
      +               print SMB3_CONF "    dos charset = CP932\n";
      +               print SMB3_CONF "    unix charset = CP932\n";
      +               print SMB3_CONF "    load printers = no\n";
      +               print SMB3_CONF "    disable spoolss = yes\n";
      +       }
              elsif ($line =~ m/printer admin/)
              {
                      # Remove line - this is deprecated by Samba 3
      
      参考サイトと違うのは、sambaのインストール先と、dos charset。既存のファイル名がsjisなので。

      ふ〜、これでやっとMacの設定を始められる。

カテゴリ

トラックバック(0)

このブログ記事を参照しているブログ一覧: TeraStationのsambaを3にする(成功編)

このブログ記事に対するトラックバックURL: https://www.wizard-limit.net/cgi-bin/mt/mt-tb.cgi/2612

コメントする

このブログ記事について

このページは、falseが2011年4月29日 21:22に書いたブログ記事です。

ひとつ前のブログ記事は「TeraStationのsambaを3にする(失敗編)」です。

次のブログ記事は「MacBook Pro購入」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

広告

Powered by Movable Type 6.1.1