add files
[leishi.git] / draft / en / note / linux-usbdisk.org
blob5168bf62193b591071ff9ebe29e4e19f36974a17
1 * <lisp>(setq Title "自己制作usb上的linux系统")</lisp>  
2  - 作者: [[stoneszone.net][石磊]]
3  - 版权: 转载请注明出处
5 <contents depth="4">
8 ** 1  创建工作环境
10 <source lang="shell">
11   $mkdir /usr/local/embase/
12   $cd /usr/local/embase
13   $mkdir rootfs               #根文件
14   $mkdir boot                 #引导所需文件
15 </source>
17 ** 2 编译busybox
18   下载并解压缩进入配置解界面,
19   - 编译busybox为静态连接,编译静态会报错,要修改发出警报的makefile和其中一个文件,关掉警报。
20   - 选择Installation Options下 Don't use /usr,否则会安装到宿主机上
22 <source lang="shell">
23   $cd busybox
24   $make menuconfig
25   $make
26   $make install
27 </source>
28   
29   完成后会在busybox目录下生成_install目录。
31 ** 3 创建根文件系统
32 *** 3.1 创建目录结构
34 <source lang="shell">
35   $cd /usr/local/embase/rootfs
36   $mkdir etc usr var tmp proc home root lib
37 </source>
40 *** 3.2  安装busybox
42 <source lang="shell">
43   $cp -R busybox/_install/* /usr/local/embase/rootfs
44 </source>
46 *** 3.3 建立设备文件
47   直接拷贝宿主机的/dev目录
49 <source lang="shell">
50   $cp -R/dev /usr/local/embase/rootfs
51 </source>
53   也可以用mknod手工建立,如创建/dev/console,字符设备c, 主设备号5,次1
55 <source lang="shell">
56   $mknod console c 5 1
57 </source>
59 *** 3.4 配置/etc
61 **** 3.4.1  /etc/init.d 目录
62    直接拷贝busybox的启动目录。
63 <source lang="shell">
64   $cp -R busybox-1.00/examples/bootflopyp/etc/init.d /usr/local/embase/rootfs/etc/
65 </source>
67 **** 3.4.2 /etc/busybox.conf 为空文件
69 **** 3.4.3 /etc/fstab
71 <source lang="shell">
72   /dev/fd0   /            ext2          defaults 0 0
73   none       /proc        proc          defaults 0 0
74   /dev/cdrom /mnt/cdrom   udf,iso9660   noauto,owner,kudzu,ro 0 0
75   /dev/fd0    /mnt/floppy auto          noauto,owner,kudzu 0 0
76 </source>
78 **** 3.4.4 /etc/group
80 <source lang="shell">
81    root:x:0:root
82 </source>
84 **** 3.4.5 /etc/inittab
85   拷贝busybox的示范inittab指etc
87 **** 3.4.6 /etc/issue
89 <source lang="shell">
90   Embase NAS 0.1
91 </source>
93 **** 3.4.7 /etc/motd mtab 
95 **** 3.4.8 /etc/passwd
97 <source lang="shell">
98   root::0:0:root:/root:/bin/ash
99 </source>
101 **** 3.4.9 /etc/profile
103 <source lang="shell">
104   # /etc/profile: system-wide .profile file for the Bourne shells
105   echo
106   echo
107   export PS1="[\u@\h \w]\$"
108   echo "Done"
109   alias ll='ls -l'
110   alias du='du -h'
111   alias df='df -h' 
112   alias rm='rm -i'
113   echo
114 </source>
116 **** 3.4.10 /etc/resolv.conf(可选)
117   
118 <source lang="shell">
119   nameserver 202.96.209.5
120   nameserver 202.96.209.6
121 </source>
123 **** 3.4.11 /etc/shadow 和 /etc/shadow-
124   口令文件,其中的计算后口令字串从本机拷贝。
125 shadow
127 <source lang="shell">
128   root:$1$$adltAB9Sr/MSKqylIvSJT/:12705:0:99999:7:::
129 </source> 
131 shadow-
133 <source lang="shell">
134   root:$1$DWU.tenP$B7ANiXoGoiZMwJR6Ih8810:12705:0:99999:7:::
135 </source>
137 **** 3.4.12 /etc/init.d/rcS 启动后第一个执行脚本(inittab中配置)
138   确保有可执行权限,且内容为:
140 <source lang="shell">
141   #! /bin/sh
142   mount -o remount,rw /
145   /bin/mount -a
146   >/etc/mtab
147 echo
148 echo
149 echo
150 echo
151 echo -en "\t\tWelcom to \\033[0;32mEmbase NAS\\033[0;39m\n"
152 echo -en "\\033[0;36m\n"
153 echo
154 echo -en "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\t\t\n"
155 echo -en "+ Embase NAS V 0.1 \t\t\n"
156 echo -en "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\t\t\n"
157 echo -en "\\033[0;39m\n"
158 hostname BabyLinux
159 </source>
162 ** 4 创建boot目录
164 *** 4.1  拷宿主机/boot/下grub目录的stage1 stage2 e2fs_stage1_5 menu.list 至/usr/local/embase/boot/grub/
166 *** 4.2 创建initrd  
167     为了等待usb设备,mount根文件系统,需要重新创建/boot/initrd.img-2.6.15-1-486 文件。
168     用于加载内核初始化时相应模块的ramdisk。
170    -修改/etc/mkinitrd/mkinitrd.conf DELAY=20 
171    -修改/etc/mkinitrd/modules   添加 启动需要加载的用于usb的modules
173     <source lang="shell">
174      ehci_hcd
175      uhci_hcd
176      ohci_hcd
177      usb-storage
178     </source>
179    
180    <source lang="shell">
181     $mkinitrd -o initrd.img-2.6.15-1-486 2.6.15-1-486  #与ls /lib/modules返回的内核版本号一致
182     $cp initrd.img-2.6.15-1-486 /usr/local/emabse/boot/
183    </source>
185 *** 4.3 编辑menu.list
187 <source lang="shell">
188  title embase
189  root (hd0,0)                                 #hd0代表第几个硬盘,从0开始,指示grub的stage1,stage2 文件位于那个分区
190  kernel /boot/vmlinuz root=/dev/sda1   #指示到那里去寻找内核,以及根文件系统的分区
191  initrd /boot/initrd                   #启动ramdisk加载内核模块和等待usb文件系统
192 </source>
195 ** 5 编译安装内核
196   内核加载的module位于/lib/modules下。与所编译的内核一一对应。
198 *** 5.1 拷贝内核至 /boot
199     <source lang="shell">
200     $cp /boot/vmlinuz-2.6.15-1-486      /usr/local/embase/booot
201     </source>
203 *** 5.2 拷贝modules至/lib/modules
204     <source lang="shell">
205     $cp -rf /lib/modules /usr/local/embase/rootfs/lib/
206     </source>
208 *** 5.3 创建vmlinuz连接
209     <source lang="shell">
210     $cd /usr/local/embase/boot
211     $ln -s vmlinuz-2.6.15-1-486 vmlinuz
212     </source>
213 ** 6 创建目标安装盘分区
215 <source lang="shell">
216   $fdisk /dev/sda
217 </source>
220 ** 7 创建文件系统
222 <source lang="shell">
223   $mkfs.ext2 -m0 /dev/sda0
224   $mount /dev/sda0 /mnt
225 </source>
227 ** 8 拷贝所有到目标安装盘
229 <source lang="shell">
230   $cp -rf /usr/local/embase/rootfs/* /mnt
231   $cp -rf /usr/local/embase/boot     /mnt
232 </source>
235 ** 9 安装grub至目标盘
236   suse安装有问题,到debian安装。
238 <source lang="shell">
239  $grub
240  >root (hd1,0)     #寻找grub的stage1,stage2安装分区,hd1代表第二块硬盘,如果宿主机为hda,则sda为第二块硬盘,0为第一个分区。
241  >setup (hd1)      #安装grub至第二块硬盘
242 </source> 
244 ** 10 安装应用软件
246 *** 10.1 lighttpd
248 <source lang="shell">
249  $cp /usr/sbin/lighttpd /usr/local/embase/rootfs/usr/sbin
250  $cp -rf /etc/lighttpd /usr/local/embase/rootfs/etc/
251  $cp -rf /usr/lib/lighttpd/ /usr/local/embase/rootfs/usr/lib
252  $cp -rf /usr/share/lighttpd/ /usr/local/embase/rootfs/usr/share/
253 </source>