Changes between Version 8 and Version 9 of Developers/kenta


Ignore:
Timestamp:
2011/11/23 22:08:32 (12 years ago)
Author:
kenta
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Developers/kenta

    v8 v9  
    11= Todo = 
    2  * vlmag (due 2010/12/24) 
     2 * vlmag (due 2011/11/28) 
     3 * VMWare Image 
     4 * ToolChain 
     5   * binutils-2.21.53.0.2-1vl7 
     6  * gcc-4.6.2 
     7   * glibc-?? 
     8 * KVM ? 
     9 
    310 
    411= vlmag 下書きメモ = 
    5  == 最初に概要 == 
    6   紹介するのは 
    7   * ディスクのイメージをループバックマウントする方法 
    8     1. dd でダンプしたイメージを kpartx  
    9     1. VMWare の VMDK ファイルを qemu-img で変換したあと kpartx 
    10   * chroot でなんちゃって Virtual Machine 
     12 == OSC 2011 Tokyo Fall に行ってきました == 
     13  OSCに参加してきました。 
     14  EnterpriseOSS の方には Vine が何であるかを大いに誤解されてしまったかもしれません。 
     15  Vineはスケスケを楽しんだりもしますが、基本は常に変わることなく国内の老舗ディストリビュータとして、ユーザーに優しいLinuxディストリビューションを作り続けます。 
     16 
     17 
     18さて本題ですが、今回はrpmパッケージの作り方、はじめの一歩を紹介します。 
     19 
     20 
     21tar.gz をダウンロード、./configure && make && make install で何かしら自分が使うアプリケーションを追加したことがあるかと思います。 
     22さて、今回もOSCで開催したユーザーの集いで参加者に挙手の形でアンケートを採ったところ、全員が経験有りでした。 
     23 
     24 
     25単に make install すると、アンインストールが困難だったり、重複したファイルが意図せずに上書きされてしまったりします。 
     26Prefixを間違えて意図しないディレクトリを書き換えてしまった時にはもう後には戻れなくなってしまいます。 
     27 
     28 
     29 
     30ここでは、まず最低限の手間でパッケージを作る手順を紹介します。 
     31例として hogehoge のサイトで紹介されていた、GXXをビルドしてみます。 
     32 
     33 
     34 
     35どうでしょうか、上手くできたでしょうか? 
     36ここまでだと書き換える行数はたったの xx 行です。 
     37make install と較べてほとんど手間無く、パッケージ管理されたきれいな環境が作れると思います。 
     38 
     39やっていくと細かくいじるところがいくつも出てきますが、それは問題に出会ったときに少しずつ覚えていくことになります。 
     40試してみて困ったことがありましたら、MLなどでご相談下さい。 
     41 
     42 
     43なお、最終的に作った SPECファイルを ::: に置いています。 
     44何が書き換わっているかを比較しながら、Develppers Guideをご参照頂くと 
    1145 
    1246 == 参考資料 == 
    13   ぐぐったら、同じことやっている人がいた。 
     47  Developer Guide 
    1448  http://d.hatena.ne.jp/adsaria/20080724 
    1549 
     
    2862   }}} 
    2963   とやってもマウントはできません。 
    30    まず、パーティションの情報を確認。 
    31    {{{ 
    32 # fdisk -lu /opt/Vine42.dd.img  
    33 設定する必要があります シリンダ数. 
    34 あなたは特別機能メニューからこれを行なうことができます 
    3564 
    36 Disk /opt/Vine42.dd.img: 0 MB, 0 bytes 
    37 255 heads, 63 sectors/track, 0 cylinders, total 0 sectors 
    38 Units = セクタ数 of 1 * 512 = 512 bytes 
    39 Disk identifier: 0x000a0970 
    40  
    41        デバイス Boot      Start         End      Blocks   Id  System 
    42 /opt/Vine42.dd.img1   *          63      208844      104391   83  Linux 
    43 /opt/Vine42.dd.img2          208845    15727634     7759395   83  Linux 
    44 /opt/Vine42.dd.img3        15727635    16771859      522112+  82  Linux swap / Solaris 
    45 領域 3 は異なった物理/論理終点になっています: 
    46      物理=(1023, 254, 63) 論理=(1043, 254, 63) 
    47    }}} 
    48    Startセクタ * 512バイト目がパーティションの始まりになるので、offset を指定してマウントする。 
    49    {{{ 
    50 # mount -o loop,offset=`expr 63 \* 512` /opt/Vine42.dd.img /opt/Vine42 
    51 # ls /opt/Vine42/ 
    52 System.map@                 initrd-2.6.16-0vl76.27.img  vmlinuz@ 
    53 System.map-2.6.16-0vl76.27  initrd.img@                 vmlinuz-2.6.16-0vl76.27 
    54 System.map.old@             initrd.old.img@             vmlinuz.old@ 
    55 config-2.6.16-0vl76.27      kernel.h 
    56 grub/                       lost+found/ 
    57    }}} 
    58    こっちは /boot パーティションですね。 
    59    一旦アンマウントして、/ に対応する 2番目のセクタをマウント。 
    60    /boot もついでにマウントする。必要は無いけど。    
    61    {{{ 
    62 # umount /opt/Vine42 
    63 # umount /opt/Vine42 
    64 # mount -o loop,offset=`expr 208845 \* 512` /opt/Vine42.dd.img /opt/Vine42 
    65 # mount -o loop,offset=`expr 63 \* 512` /opt/Vine42.dd.img /opt/Vine42/boot  
    66 # df 
    67 ファイルシステム     1K-ブロック  使用        空き 使用% マウント位置 
    68 /dev/sda3             38456340  26437676  10065160  73% / 
    69 none                   2021060         0   2021060   0% /dev/shm 
    70 /dev/loop0             7637400   1928112   5321320  27% /opt/Vine42 
    71 /dev/loop1              101086      8908     86959  10% /opt/Vine42/boot 
    72    }}} 
    73    これで Vine Linux 4.2 のディスクを Vine Linux 5.2 からアクセスできるようになりました。 
    74    ちなみに、dd せずにそのまま mount しても可。 
    75    この場合は、e2label であらかじめ "/" や "/boot" を消しておきましょう。 
    76    {{{ 
    77 # e2label /dev/hda1 "" 
    78 # e2label /dev/hda2 "" 
    79    }}} 
    80    みたいな。 
    81    そうしないと、古いVine Linux 4.2のディスクを繋いだときに、そっちが / としてマウントされてしまうことがあります。 
    82  
    83  
    84    マウントはできましたが、このままではライブラリの依存関係を満たせないので Vine Linux 4.2 のバイナリはほとんどの場合で実行できません。 
    85    {{{ 
    86 $ /opt/Vine42/usr/bin/gnome-calculator  
    87 /opt/Vine42/usr/bin/gnome-calculator: error while loading shared libraries: libgnomeui-2.so.0: cannot open shared object file: No such file or directory 
    88 $ ldd /opt/Vine42/usr/bin/gnome-calculator 
    89         linux-gate.so.1 =>  (0xffffe000) 
    90         libgnomeui-2.so.0 => not found 
    91         libbonoboui-2.so.0 => not found 
    92         <snip.> 
    93    }}} 
    94    そこで、chroot 
    95    {{{ 
    96 # chroot /opt/Vine42 
    97    }}} 
    98    これで、/opt/Vine42 が / としてアクセスできるようになる。 
    99    ためしに、ldd してみるとライブラリの依存関係が満たされていることが確認できる 
    100    {{{ 
    101 # ldd /usr/bin/gnome-calculator 
    102         linux-gate.so.1 =>  (0xffffe000) 
    103         libgnomeui-2.so.0 => /usr/lib/libgnomeui-2.so.0 (0xf7660000) 
    104         libbonoboui-2.so.0 => /usr/lib/libbonoboui-2.so.0 (0xf7600000) 
    105         <snip.> 
    106    }}} 
    107  
    108    あとは、なんちゃってVMとして sshログインして使えるような設定をいくつか。 
    109  
    110    古い mtab が残っているとややこしいので、一旦空っぽにしておく。 
    111    {{{ 
    112 # echo > /etc/mtab  
    113    }}} 
    114  
    115   === MAKEDEVとか === 
    116    デバイスファイルがほとんど無いので、必要そうなものをいくつか作る 
    117    {{{ 
    118 # ls /dev/ 
    119 console  null 
    120 # MAKEDEV /dev/null /dev/random /dev/urandom /dev/ptmx 
    121 # mkdir /dev/pts  
    122 # mount /dev/pts 
    123 # mount -n -t proc /proc /proc 
    124 # mount -n -t sysfs /sys /sys 
    125 # mkdir /dev/shm 
    126 # mount /dev/shm  
    127    }}} 
    128  
    129   === sshd を動かしてログイン === 
    130    あとはsshdを動かせば、ログインできるようになる。 
    131    ただ、22番ポートはホストの Vine Linux 5.2 環境で使われているハズなので、ポート番号を適当に変えた上で sshd を起動。 
    132    {{{ 
    133 # vim /etc/ssh/sshd_config 
    134 # diff /etc/ssh/sshd_config.orig /etc/ssh/sshd_config 
    135 13c13 
    136 < #Port 22 
    137 --- 
    138 > Port 20022 
    139 # /etc/init.d/sshd start | nkf -uw 
    140 sshdを起動中:                                              [  OK  ] 
    141    }}} 
    142    ちなみに、Vine Linux 4.2 は ja_JP.eucJP を使っているので文字化けすると思います。 
    143    まぁその辺は適当に対応してください。 
    144  
    145    あと、dbus も動いていないと何かと不便が多いので、 
    146    {{{ 
    147 # /etc/init.d/messagebus start  
    148    }}} 
    149    しとくと、幸せになれるかもれません。 
    150  
    151    chroot したターミナルはもう閉じ (CTRL+d) ていいです。 
    152    {{{ 
    153 $ ssh -p 20022 vine@localhost  
    154 vine@localhost's password:  
    155 Last login: Sun Dec 12 00:21:43 2010 from localhost.localdomain 
    156 $ gnome-calculator & 
    157    }}} 
    158    今度は、ちゃんと電卓が起動できたと思います。 
    159    きっと他の商用アプリケーションも動かせるでしょう。 
    160     
    161   === VMWare Player と chroot 環境でベンチマーク比較 === 
    162     * I/O で差がつくはずだから、ディスクに負荷がかかるベンチマークを探す 
    163  
    164  == 事例 2:Debianベースの ARM 開発環境を Vine Linux 5.2 で使う == 
    165   === ダウンロード === 
    166    * [http://armadillo.atmark-techno.com/downloads ATDEのVMWare イメージ] 
    167    {{{ 
    168 $ wget http://armadillo.atmark-techno.com/files/downloads/atde/atde3-20100309.zip 
    169 $ sudo unzip atde3-20100309.zip -d /opt/ 
    170 Archive:  atde3-20100309.zip 
    171    creating: /opt/atde3-20100309/ 
    172   inflating: /opt/atde3-20100309/atde3-s005.vmdk 
    173   inflating: /opt/atde3-20100309/atde3-s007.vmdk 
    174   inflating: /opt/atde3-20100309/atde3.vmx 
    175   inflating: /opt/atde3-20100309/atde3-s009.vmdk 
    176   inflating: /opt/atde3-20100309/atde3.vmxf 
    177   inflating: /opt/atde3-20100309/atde3.nvram 
    178  extracting: /opt/atde3-20100309/atde3.vmsd 
    179   inflating: /opt/atde3-20100309/atde3-s002.vmdk 
    180   inflating: /opt/atde3-20100309/atde3.vmdk 
    181   inflating: /opt/atde3-20100309/atde3-s001.vmdk 
    182   inflating: /opt/atde3-20100309/atde3-s003.vmdk 
    183   inflating: /opt/atde3-20100309/atde3-s004.vmdk 
    184   inflating: /opt/atde3-20100309/atde3-s006.vmdk 
    185   inflating: /opt/atde3-20100309/atde3-s008.vmdk 
    186    }}} 
    187  
    188   === 分割されたvmdkファイルをディスクのイメージに変換 === 
    189    vmdk をループバックマウントできるようにできるように、ディスクのファイル形式をqemu-imgで変換します。    
    190    {{{ 
    191 $ sudo apt-get install qemu 
    192 $ cd /opt/atde3-20100309 
    193 # $ sudo qemu-img convert atde3-s00[1-9].vmdk -O bin atde3-20100309.img 
    194 $ qemu-img convert atde3-s00[1-9].vmdk -O raw /tmp/atde3-20100309.img  
    195 (VMDK) image open: flags=0x2 filename=atde3-s001.vmdk 
    196 (VMDK) image open: flags=0x2 filename=atde3-s002.vmdk 
    197 (VMDK) image open: flags=0x2 filename=atde3-s003.vmdk 
    198 (VMDK) image open: flags=0x2 filename=atde3-s004.vmdk 
    199 (VMDK) image open: flags=0x2 filename=atde3-s005.vmdk 
    200 (VMDK) image open: flags=0x2 filename=atde3-s006.vmdk 
    201 (VMDK) image open: flags=0x2 filename=atde3-s007.vmdk 
    202 (VMDK) image open: flags=0x2 filename=atde3-s008.vmdk 
    203 (VMDK) image open: flags=0x2 filename=atde3-s009.vmdk 
    204 $ fdisk -lu /tmp/atde3-20100309.img  
    205 設定する必要があります シリンダ数. 
    206 あなたは特別機能メニューからこれを行なうことができます 
    207  
    208 Disk /tmp/atde3-20100309.img: 0 MB, 0 bytes 
    209 255 heads, 63 sectors/track, 0 cylinders, total 0 sectors 
    210 Units = セクタ数 of 1 * 512 = 512 bytes 
    211 Disk identifier: 0x0008bb4c 
    212  
    213             デバイス Boot      Start         End      Blocks   Id  System 
    214 /tmp/atde3-20100309.img1   *          63      498014      248976   83  Linux 
    215 /tmp/atde3-20100309.img2          498015    33543719    16522852+  8e  Linux LVM 
    216 領域 2 は異なった物理/論理終点になっています: 
    217      物理=(1023, 254, 63) 論理=(2087, 254, 63) 
    218    }}} 
    219  
    220   === LVMの構成を確認 === 
    221   === kpartx === 
    222    ディスクは参照できる形になりました。 
    223    でも面倒なことにLVMが使われているので、mount offset オプションではマウントできません。(たぶん) 
    224    そこで、kpartx、LVM のマウント 
    225    {{{ 
    226 $ sudo /sbin/kpartx -av /opt/atde3-20100309.img  
    227 add map loop2p1 : 0 497952 linear /dev/loop2 63 
    228 add map loop2p2 : 0 33045705 linear /dev/loop2 498015 
    229 $ ls /dev/mapper/ 
    230 control  loop2p1  loop2p2 
    231 $ sudo /sbin/pvscan  
    232   PV /dev/dm-1   VG atde3   lvm2 [15.75 GB / 0    free] 
    233   Total: 1 [15.75 GB] / in use: 1 [15.75 GB] / in no VG: 0 [0   ] 
    234 $ sudo /sbin/lvscan  
    235   inactive          '/dev/atde3/root' [14.70 GB] inherit 
    236   inactive          '/dev/atde3/swap_1' [1.06 GB] inherit 
    237 $ sudo /sbin/vgchange -ay 
    238   2 logical volume(s) in volume group "atde3" now active 
    239 $ sudo /sbin/lvscan  
    240   ACTIVE            '/dev/atde3/root' [14.70 GB] inherit 
    241   ACTIVE            '/dev/atde3/swap_1' [1.06 GB] inherit 
    242 $ sudo mount -o loop /dev/atde3/root /opt/atde3-20100309 
    243 $ sudo mount -o loop /dev/mapper/loop2p1 /opt/atde3-20100309/boot  
    244    }}} 
    245    後の手順は事例1 と同じ。 
    246    {{{ 
    247 $ sudo chroot /opt/atde3-20100309 
    248    }}} 
    249    のはずだけど、まだやっていないのでぼちぼち追記します。 
    250  
    251    {{{ 
    252    }}} 
    253   === 試しにAndroidをビルド === 
    254   まだ。。。 
     65 == Follow up == 
     66  ここでは最小限の手間でrpmパッケージ作成を体験できる方法を紹介しました。 
     67  読者の環境によっては同じようにならないこともあると思います。その場合にはML等で質問して下さい。 
     68  続編として様々な問題に対処したパッケージ作成を紹介するつもりです。