initrd により起動し、ram diskのみで稼働するLinux

目次

  1. 変更履歴
  2. root image 作成手順
  3. tips

参考

  1. パッケージリスト (debian)
  2. root image 作成用スクリプト
  3. /usr/local以下にいれたファイル


変更履歴

2003.10.02
* unicon の調子がいいのでjfbtermを14dot環境専用に。
2003.09.03
* unicon 導入。とても良いかんじ。
2003.07.12
* xfsprogs を update
2003.07.09
* initrdサイズを 72MBへ (.config では CONFIG_BLK_DEV_RAM_SIZE=73730)
* initrd内に kernelを置くことを中止 (どうせ使わないので)
* /tmp を tmpfsへ。また、$HOME/tmpを /tmp/username へのリンクへ
* 2.4.21-ac2 kernelへ
2003.07.07
* vim62へ
2003.06.25
* openssl (/usr/bin/opensslのみ) 追加
* jfs, xfs関係追加
* 2.4.21-ac1 kernelへ
2003.05.28
* 2.4.21-rc2 kernelへ (っていちいち書かんでもいいか)
2003.05.07
* 2.4.21-rc1 kernelへ
2003.05.06
* klogd追加
2003.04.25
* vim (syntax)
syntax機能に必要な最低限のファイルを追加 -> 2003.04.25
2003.04.18
* sid upgrade
容量が大きくなりすぎる感じ。よってとりやめ
2003.04.14
* 作成

作成手順

  1. 基本となるdistroを準備する。大事なのは必要なパッケージをいれて必要ないパッケージはいれないようにすること。(^^;
  2. 目的とする容量のramdiskとinitrdを使えるkernel、kernel_modulesを作成しておく。ramdiskの容量は実機のram容量に依存すると思うが、(目的にもよるものの) 64MBというのはかなり辛いと思われる。また、容量の削減のためにdevfsdを使うのは良い考えだろう。
  3. dd により空のファイルを作成する。kernel作成時に指定した容量より、ほんの少し小さめにしておいたほうが無難。ex)

    dd if=/dev/zero of=root.img count=262144

    (128MBの場合)
  4. ext2 fsを作成する。ex)

    mke2fs -F -m 0 root.img

  5. loopback mountする。ex)

    mount -o loop root.img /mnt

  6. /mnt以下に中身のいらないdirectoryを作成する。dev, mnt, opt, proc, tmp, var, var/lock, var/log, var/run, var/tmp, var/lib, (var/run/screen, var/lib/urandom, var/lib/locate) とか。
  7. directryのパーミッションを設定したり、必要なファイルを作成したりする。ex)

    chmod 1777 tmp var/tmp; touch dev/.devfsd var/run/utmp

  8. 必要なファイルをコピーする。それには

    cp -a

    をつかうこと。
  9. 必要ないファイルを削除する。usr/share/doc, usr/doc, usr/share/man, usr/share/info, usr/share/unidata, usr/share/consolefonts, usr/share/consoletrans, usr/share/keymaps, usr/share/debconf, usr/games, usr/share/locale, usr/share/i18n, usr/share/zoneinfo とか。/usr/share/zoneinfoを消すときは、必要な部分を保存しておくことを忘れないように。
  10. 変更が必要な設定ファイルを修正する。etc/fstab, etc/hostname, etc/hosts, ネットワークインターフェースの設定, ssh用公開鍵と秘密鍵あたりか。
  11. カーネルやモジュールをコピーする。カーネルは本当は必要ないけどね。
  12. chroot /mnt /bin/shして、depmod -a, ldconfig, updatedb等をしておく。後にexit。
  13. syncしてumount /mnt
  14. 終了。grubあたりをつかってbootする。bootに必要なのはカーネルとroot.img.gz。
    grub> root (hd0,0)
    grub> kernel=/ramlinux/bzImage root=/dev/ram0 ro noswap
    grub> initrd=/ramlinux/root.img.gz
    grub> boot
    
  15. うまく起動すればおなぐさみ。(最終的に私のシステムは、47MB程度になった。)

tips


パッケージリスト (debian)

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name           Version        Description
+++-==============-==============-============================================
ii  adduser        3.47           Add and remove users and groups
ii  apmd           3.0.2-1.19     Utilities for Advanced Power Management (APM
ii  apt            0.5.4          Advanced front-end for dpkg
ii  apt-utils      0.5.4          APT utility programs
ii  ash            0.3.8-37       NetBSD /bin/sh
ii  attr           2.0.7-1        Utilities for manipulating filesystem extend
ii  base-config    1.33.18        Debian base configuration package
ii  base-files     3.0.2          Debian base system miscellaneous files
ii  base-passwd    3.4.1          Debian Base System Password/Group Files
ii  bash           2.05a-11       The GNU Bourne Again SHell
ii  bc             1.06-8         The GNU bc arbitrary precision calculator la
ii  bind9-host     9.2.1-2.woody. Version of 'host' bundled with BIND 9.X
ii  bsdmainutils   5.20020211-4.9 More utilities from FreeBSD.
ii  bsdutils       2.11n-4        Basic utilities from 4.4BSD-Lite.
ii  bvi            1.3.1-1        A binary file editor
ii  bzip2          1.0.2-1        A high-quality block-sorting file compressor
ii  console-common 0.7.14         Basic infrastructure for text console config
ii  console-data   1999.08.29-24  Keymaps, fonts, charset maps, fallback table
ii  console-tools  0.2.3-23.3     Linux console and font utilities.
ii  console-tools- 0.2.3-23.3     Shared libraries for Linux console and font 
ii  cpio           2.4.2-39       GNU cpio -- a program to manage archives of 
ii  dbskkd-cdb     1.01-10        The fastest dictionary server for SKK
ii  debconf        1.0.32         Debian configuration management system
ii  debianutils    1.16           Miscellaneous utilities specific to Debian.
ii  devfsd         1.3.25-1       Daemon for the device filesystem
ii  dhcpcd         1.3.22pl4-6    DHCP client for automatically configuring IP
ii  diff           2.7-29         File comparison utilities
ii  dpkg           1.9.21         Package maintenance system for Debian
ii  e2fsprogs      1.28-5         The EXT2 file system utilities and libraries
ii  file           3.37-3.1.woody Determines file type using "magic" numbers
ii  fileutils      4.1-10         GNU file management utilities
ii  findutils      4.1.7-2        utilities for finding files--find, xargs, an
ii  fujiplay       1.33-4         Interface for Fuji digital cameras
ii  grep           2.4.2-3        GNU grep, egrep and fgrep.
ii  grub           0.91-2         GRand Unified Bootloader
ii  gzip           1.3.2-3woody1  The GNU compression utility.
ii  hdparm         4.5-1.2        Tune hard disk parameters for high performan
ii  hostname       2.09           A utility to set/show the host name or domai
ii  ifupdown       0.6.4-4.4      High level tools to configure network interf
ii  ipchains       1.3.10-15      Network firewalling for Linux 2.2.x
ii  jfsutils       1.0.14-1       Utilities for managing the JFS filesystem
ii  klogd          1.4.1-10       Kernel Logging Daemon
ii  lha            1.14i-2        lzh archiver
ii  libao2         0.8.2-1        Cross Platform Audio Output Library
ii  libapm1        3.0.2-1.19     Library for interacting with APM driver in k
ii  libattr1       2.0.7-1        Extended attribute shared library
ii  libbz2-1.0     1.0.2-1        A high-quality block-sorting file compressor
ii  libc6          2.2.5-11.5     GNU C Library: Shared libraries and Timezone
ii  libcap1        1.10-12        support for getting/setting POSIX.1e capabil
ii  libcurl2       7.9.5-1        Multi-protocol file transfer library. (no SS
ii  libdb2         2.7.7.0-7      The Berkeley database routines (run-time fil
ii  libdb3         3.2.9-16       Berkeley v3 Database Libraries [runtime]
ii  libdns5        9.2.1-2.woody. DNS Shared Library used by BIND
ii  libgc6         6.0+6.1alpha4- Conservative garbage collector for C
ii  libgdbmg1      1.7.3-27       GNU dbm database routines (runtime version).
ii  libisc4        9.2.1-2.woody. ISC Shared Library used by BIND
ii  libncurses5    5.2.20020112a- Shared libraries for terminal handling
ii  libnewt0       0.50.17-9.6    Not Erik's Windowing Toolkit - text mode win
ii  libogg0        1.0rc3-1       Ogg Bitstream Library
ii  libpam-modules 0.72-35        Pluggable Authentication Modules for PAM
ii  libpam-runtime 0.72-35        Runtime support for the PAM library
ii  libpam0g       0.72-35        Pluggable Authentication Modules library
ii  libpcap0       0.6.2-2        System interface for user-level packet captu
ii  libpopt0       1.6.2-7        lib for parsing cmdline parameters
ii  libreadline4   4.2a-5         GNU readline and history libraries, run-time
ii  libssl0.9.6    0.9.6c-2.woody SSL shared libraries
ii  libstdc++2.10- 2.95.4-11woody The GNU stdc++ library
ii  libvorbis0     1.0rc3-1       The Vorbis General Audio Compression Codec
ii  libwrap0       7.6-9          Wietse Venema's TCP wrappers library
ii  locales        2.2.5-11.5     GNU C Library: National Language (locale) da
ii  login          20000902-12    System login tools
ii  longrun        0.9-6          Transmeta(TM) Crusoe(TM) LongRun(TM) utility
ii  lv             4.49.4-7woody2 Powerful Multilingual File Viewer
ii  makedev        2.3.1-58       Creates device files in /dev.
ii  mawk           1.3.3-8        a pattern scanning and text processing langu
ii  modutils       2.4.15-1       Linux module utilities.
ii  mount          2.11n-4        Tools for mounting and manipulating filesyst
ii  mpg123         0.59r-13       MPEG layer 1/2/3 audio player
ii  ncurses-base   5.2.20020112a- Descriptions of common terminal types
ii  ncurses-bin    5.2.20020112a- Terminal-related programs and man pages
ii  net-tools      1.60-4         The NET-3 networking toolkit
ii  netbase        4.07           Basic TCP/IP networking system
ii  netkit-inetd   0.10-9         The Internet Superserver
ii  netkit-ping    0.10-9         The ping utility from netkit
ii  nkf            1.92-6         Network Kanji code conversion Filter
ii  noflushd       2.6.1-2        allow idle hard disks to spin down
ii  ntpdate        4.1.0-8        The ntpdate client for setting system time f
ii  nvi            1.79-20        4.4BSD re-implementation of vi.
ii  passwd         20000902-12    Change and administer password and group dat
ii  pciutils       2.1.9-4        Linux PCI Utilities (for 2.[1234].x kernels)
ii  pcmcia-cs      3.1.33-6woody1 PCMCIA Card Services for Linux.
ii  perl-base      5.6.1-8.2      The Pathologically Eclectic Rubbish Lister.
ii  portmap        5-2            The RPC portmapper
ii  powermgmt-base 1.6            Common utils and configs for power managemen
ii  procps         2.0.7-8        The /proc file system utilities.
ii  psmisc         20.2-2.1       Utilities that use the proc filesystem
ii  rc             1.6c6-1        An implementation of the AT&T Plan 9 shell.
ii  rsh-client     0.17-6         rsh clients.
ii  rsh-server     0.17-6         rsh servers.
ii  rsync          2.5.5-0.1      fast remote file copy program (like rcp)
ii  screen         3.9.11-5       A terminal multiplexor with VT100/ANSI termi
ii  sed            3.02-8         The GNU sed stream editor.
ii  setmixer       27DEC94-7      a command mode mixer.
ii  shellutils     2.0.11-11      The GNU shell programming utilities.
ii  skkdic-cdb     20011121-1     SKK Dictionary in cdb format (SKK-JISYO.L.cd
ii  slang1         1.4.4-7.2      The S-Lang programming library - runtime ver
ii  ssh            3.4p1-1        Secure rlogin/rsh/rcp replacement (OpenSSH)
ii  sudo           1.6.6-1.1      Provides limited super user privileges to sp
ii  sysklogd       1.4.1-10       System Logging Daemon
ii  sysvinit       2.84-2woody1   System-V like init.
ii  tar            1.13.25-2      GNU tar
ii  tasksel        1.18           Tool for selecting tasks for installation on
ii  tcpd           7.6-9          Wietse Venema's TCP wrapper utilities
ii  tcsh           6.11.00-2.1    TENEX C Shell, an enhanced version of Berkel
ii  telnet         0.17-18        The telnet client.
ii  textutils      2.0-12         The GNU text file processing utilities.
ii  unzip          5.50-1         De-archiver for .zip files
ii  util-linux     2.11n-4        Miscellaneous system utilities.
ii  util-linux-loc 2.11n-4        Locales files for util-linux
ii  vorbis-tools   1.0rc3-1       Several Ogg Vorbis Tools
ii  wget           1.8.1-6.1      retrieves files from the web
ii  wireless-tools 23-2           Tools for manipulating Linux Wireless Extens
ii  xfsprogs       2.4.12-1       Utilities for managing the XFS filesystem
ii  zlib1g         1.1.4-1        compression library - runtime
e2fsprogs, xfsprogs はupgradeしてある。dhcpcdは自分でコンパイルしていれた。


root.img 作成スクリプト

#!/bin/sh
#
# setup diskimage
#
cd /tmp
#dd if=/dev/zero of=root.img count=227328
dd if=/dev/zero of=root.img count=147456
mke2fs -F -m 0 root.img
mount -o loop root.img /mnt
cd /mnt
rm -rf lost+found
mkdir boot data discs discs/sid discs/gentoo discs/plamo discs/root dev mnt opt proc tmp var var/lock var/log var/run var/run/screen var/tmp var/www var/lib var/lib/urandom var/lib/locate 

chmod 1777 tmp var/tmp
chown root:utmp var/run/screen
chmod 775 var/run/screen
chown www-data:www-data var/www
touch dev/.devfsd var/run/utmp
mkdir -m 0755 -p dev/cpu/0
mknod dev/cpu/0/msr -m 0600 c 202 0
mknod dev/cpu/0/cpuid -m 0444 c 203 0
ln -s /home/localuser/public_html 'var/www/~localuser'

#
# backup files
#
mkdir -p /tmp/backup/zoneinfo
cd /usr/share/zoneinfo
cp -a Japan GMT* UTC localtime /tmp/backup/zoneinfo

#
# remove files
#
cd /
/usr/bin/perl -e '@rmpkg = ("adduser", "apt", "apt-utils", "debconf", "ipchains", "makedev", "sysklogd", "tasksel"); foreach (@rmpkg) { @tmp = `dpkg -L $_`; shift @tmp; push @files, @tmp; } foreach (@files) { chop; if ( -f $_ ){ unlink $_; } }'
rm -rf /etc/rc*/*makedev
rm -rf /usr/share/doc/* /usr/doc/* /usr/share/man/* /usr/share/info/* /usr/share/unidata/* /usr/share/consolefonts/* /usr/share/consoletrans/* /usr/share/keymaps/* /usr/share/info/* /usr/share/debconf/* /usr/games/* /usr/share/zoneinfo/*
rm -rf /usr/share/locale/* /usr/share/i18n/*
rm -rf /lib/modules/*

#
# copy files
#
cd /
cp -a usr /mnt 
cp -a bin etc lib root sbin /mnt 
cp -a /var/lib/urandom/random-seed /mnt/var/lib/urandom/random-seed
cp -a /tmp/backup/zoneinfo/* /mnt/usr/share/zoneinfo/
cp /home/localuser/kernel/System.map-2.4.21-ac2 /mnt/boot
(cd /mnt/lib/modules; tar xzpf /home/localuser/kernel/modules-2.4.21-ac2.tgz)
rm -rf /home/localuser/kernel
cd /mnt
#ln -s boot/bzImage* vmlinuz

#
# copy setup files
#
cp /home/localuser/setup/fstab /mnt/etc/fstab
cp /home/localuser/setup/rc.local /mnt/etc/rc.local
cp /home/localuser/setup/devfsd /mnt/etc/default/devfsd
cp /home/localuser/setup/interfaces /mnt/etc/network/interfaces
cp /home/localuser/setup/hosts /mnt/etc/hosts
cp /home/localuser/setup/hostname /mnt/etc/hostname
cp /home/localuser/setup/index.html /mnt/var/www
cp /home/localuser/setup/modules /mnt/etc/modules
cd /mnt/etc
tar xzf /home/localuser/setup/rootssh.tgz
cp /home/localuser/setup/localuserssh.tgz /tmp
rm -rf /home/localuser/setup
cp -a /home /mnt
cd /mnt/home/localuser
tar xzf /tmp/localuserssh.tgz
rm -f makeramlinux.sh .bash_history /tmp/localuserssh.tgz

cd /tmp
sync; sync; sync;
df
umount /mnt
gzip /tmp/root.img


/usr/local 以下

/usr/local/
/usr/local/share
/usr/local/share/w3m-m17n
/usr/local/share/w3m-m17n/w3mhelp-funcdesc.en.pl
/usr/local/share/w3m-m17n/w3mhelp-funcdesc.ja.pl
/usr/local/share/w3m-m17n/w3mhelp-funcname.pl
/usr/local/share/w3m-m17n/w3mhelp.html
/usr/local/share/perl
/usr/local/share/perl/5.6.1
/usr/local/share/perl/5.6.1/Tie
/usr/local/share/perl/5.6.1/Tie/SubstrHash.pm
/usr/local/share/perl/5.6.1/Tie/Array.pm
/usr/local/share/perl/5.6.1/Tie/Handle.pm
/usr/local/share/perl/5.6.1/Tie/Hash.pm
/usr/local/share/perl/5.6.1/Tie/RefHash.pm
/usr/local/share/perl/5.6.1/Tie/Scalar.pm
/usr/local/share/vim
/usr/local/share/vim/vim62
/usr/local/share/vim/vim62/syntax
/usr/local/share/vim/vim62/syntax/c.vim
/usr/local/share/vim/vim62/syntax/css.vim
/usr/local/share/vim/vim62/syntax/javascript.vim
/usr/local/share/vim/vim62/syntax/perl.vim
/usr/local/share/vim/vim62/syntax/sh.vim
/usr/local/share/vim/vim62/syntax/synload.vim
/usr/local/share/vim/vim62/syntax/vb.vim
/usr/local/share/vim/vim62/syntax/xxd.vim
/usr/local/share/vim/vim62/syntax/changelog.vim
/usr/local/share/vim/vim62/syntax/html.vim
/usr/local/share/vim/vim62/syntax/lisp.vim
/usr/local/share/vim/vim62/syntax/scheme.vim
/usr/local/share/vim/vim62/syntax/syncolor.vim
/usr/local/share/vim/vim62/syntax/syntax.vim
/usr/local/share/vim/vim62/syntax/vim.vim
/usr/local/share/vim/vim62/filetype.vim
/usr/local/bin
/usr/local/bin/jvim3
/usr/local/bin/skkfep
/usr/local/bin/jvim
/usr/local/bin/fbv
/usr/local/bin/jfbterm
/usr/local/bin/line
/usr/local/bin/w3m-m17n
/usr/local/bin/w3mman
/usr/local/bin/w3m
/usr/local/bin/sizeof
/usr/local/bin/ll
/usr/local/bin/xxd
/usr/local/bin/uniconctrl
/usr/local/bin/vim
/usr/local/bin/ne
/usr/local/bin/teapot
/usr/local/bin/tcpserver
/usr/local/bin/openssl
/usr/local/lib
/usr/local/lib/vim.hlp
/usr/local/lib/w3m-m17n
/usr/local/lib/w3m-m17n/cgi-bin
/usr/local/lib/w3m-m17n/cgi-bin/dirlist.cgi
/usr/local/lib/w3m-m17n/cgi-bin/multipart.cgi
/usr/local/lib/w3m-m17n/cgi-bin/w3mbookmark
/usr/local/lib/w3m-m17n/cgi-bin/w3mhelp.cgi
/usr/local/lib/w3m-m17n/cgi-bin/w3mhelperpanel
/usr/local/lib/w3m-m17n/cgi-bin/w3mmail.cgi
/usr/local/lib/w3m-m17n/cgi-bin/w3mman2html.cgi
/usr/local/lib/w3m-m17n/inflate
/usr/local/lib/w3m-m17n/xface2xpm
/usr/local/lib/perl
/usr/local/lib/perl/5.6.1
/usr/local/lib/perl/5.6.1/GDBM_File.pm
/usr/local/lib/perl/5.6.1/auto
/usr/local/lib/perl/5.6.1/auto/GDBM_File
/usr/local/lib/perl/5.6.1/auto/GDBM_File/autosplit.ix
/usr/local/lib/perl/5.6.1/auto/GDBM_File/GDBM_File.so
/usr/local/lib/perl/5.6.1/auto/GDBM_File/GDBM_File.bs
/usr/local/lib/libungif.so.4
/usr/local/lib/libjpeg.so.62
/usr/local/lib/libpng.so.3
/usr/local/lib/libjpeg.so.62.0.0
/usr/local/lib/libpng.so.3.1.2.1
/usr/local/lib/libungif.so.4.1.0
/usr/local/lib/libpng.so
/usr/local/lib/libungif.so
/usr/local/include
/usr/local/sbin
/usr/local/sbin/rmmod_all
/usr/local/sbin/httpd.rc
/usr/local/sbin/setpegasus
/usr/local/sbin/updatedb2
/usr/local/sbin/panacron
/usr/local/etc
/usr/local/etc/jfbterm.conf
/usr/local/etc/ne
/usr/local/etc/ne/key.eff
/usr/local/etc/ne/key.system
/usr/local/etc/ne/key.vz
/usr/local/etc/ne/nerc
/usr/local/etc/ne/term
/usr/local/etc/ne/term.kterm
/usr/local/etc/ne/term.rxvt
/usr/local/X11R6
/usr/local/X11R6/lib
/usr/local/X11R6/lib/libX11.so.6
/usr/local/X11R6/lib/X11
/usr/local/X11R6/lib/X11/fonts
/usr/local/X11R6/lib/X11/fonts/misc
/usr/local/X11R6/lib/X11/fonts/misc/7x14.pcf.gz
/usr/local/X11R6/lib/X11/fonts/misc/maru14.pcf.gz
/usr/local/X11R6/include
/usr/local/X11R6/include/X11
/usr/local/X11R6/include/X11/pixmaps
/usr/local/X11R6/include/X11/pixmaps/mini.lambda.xpm

※注意