haulm 发表于 2012-6-4 11:28:18

999 兄,能不能帮我理顺一下 Live 上面的安装

grub 安装不了,总线错误,直接安装 /boot 会是只读的,这个先丢一边。
该如何正确生成 initrd ? 以下的操作在生成 initrd 时会提示找不到 /sys/block/*,这个应该不是问题所在。
我之前用 MI 安装过的系统重新生成 initrd 也都能用,所以我不知道问题出在哪里。
一直卡在内核加载那里,找不到 /proc /dev 之类,这个太典型了,之前 MI 安装也经常遇到
错误做法:cp -R -v /bin /home /opt /sbin /usr /etc /lib /root /var /srv ./

mkfs.ext4 /dev/sda1
mkdir /tmp/newsystem
mount /dev/sda1 /tmp/newsystem
cd /tmp/newsystem
unsquashfs /mnt/sr0/MagicLinux/base/usr.lzm
mv squashfs-root/* ./;rmdir squashfs-root
....(类似解压略过)
mkdir -p media mnt/sr0
mkdir -p boot/grub
cd boot
cp /boot/vmlinuz vmlinuz-3.1.10
cp /boot/System.map-3.1.10 ./
cp /usr/lib/grub/{stage1,stage2,*stage1_5} grub/
cp /root/{grub.conf,message} grub/
cd grub
ln -s grub.conf menu.lst
cd /tmp/newsystem
mkdir -p proc sys/block dev tmp
以下操作没有必要
cd dev
mknod console c 5 1
mknod null c 1 3
mknod fb0 c 29 0
mknod zero c 1 5
mknod ram b 1 1
mknod systty c 4 0
mknod tty c 5 0
mknod fuse c 10 229
for i in 1 2 3 4 5 6; do
mknod tty$i c 4 $i;
done
cd /tmp/newsystem
chmod 777 proc/ dev/ dev/* sys/ sys/block tmp
chroot .
cd boot
mkinitrd initrd-3.1.10
exit
cd /
umount /tmp/newsystem

[ 本帖最后由 haulm 于 2012-6-4 16:02 编辑 ]

haulm 发表于 2012-6-4 12:26:11

急,没人回答么,应该和内核无关,同一内核 MI 装就行 ?Live 也是可以的。
ls /sys/block/
loop0loop3loop6ram1   ram12ram15ram4ram7sda
loop1loop4loop7ram10ram13ram2   ram5ram8sdb
loop2loop5ram0   ram11ram14ram3   ram6ram9sr0
难道真和这个目录有关,没有建立对应的设备?

[ 本帖最后由 haulm 于 2012-6-4 12:32 编辑 ]

sejishikong 发表于 2012-6-4 12:56:10

我之前做过安装好像不必手工建立/dev/下的设备啊。不过我安装的时候不是cp -R这么处理的,而是解压squashfs文件的。
grub的安装需要chroot进新系统才能正常安装,好像是这样。

haulm 发表于 2012-6-4 13:09:58

也有可能被 Live 污染了,需要从 base 重新解压,se 兄,能说一下 initrd 的重新生成不,我一会再尝试。

haulm 发表于 2012-6-4 14:17:58

false /init,设备全部删除,留下主目录,现在 init 又要怎么设置》?我现在明白过来了,initrd 必需是在 /etc/fstab 正确描述挂载的设备后才能正确制做。

[ 本帖最后由 haulm 于 2012-6-4 15:27 编辑 ]

haulm 发表于 2012-6-4 14:33:05

这手菜的,/etc/fstab 没写对。
这会进去后变成 root@none了,所有分区只读。。。
难道说 /etc/mtab 也不能缺。。

[ 本帖最后由 haulm 于 2012-6-4 15:26 编辑 ]

haulm 发表于 2012-6-4 15:41:42

莫名其妙的地方:啊哈,还要修改一下 /etc/rc.d/rc.sysinit 的权限,靠,好象是我自己搞坏的。

haulm 发表于 2012-6-4 16:03:46

等有时间写个安装脚本好了,就安装一次搞了四小时。

jiangtao9999 发表于 2012-6-4 18:04:50

mknod console c 5 1

必须有,除非你做 rootfs 时,文件系统里面已经有了 console 设备文件一起打包进去了。
这是 bash 运行脚本的必须东西。
udev 服务启动时还会生成一些设备,但这些设备文件生成之前,/dev 里面空的目录会让你不能使用很多需要设备的东西。而且似乎你的系统启动时, rootfs 在 initrd 阶段是在内存里面的。你切换到硬盘分区,必须先挂载这个分区,这个时候你就再一次需要 /dev/ 里面的设备。

/dev/ 和 /proc 逻辑上似乎不是必须的。但实际上,似乎你都不知道你的 initrd 里面到底在干什么。所以你这个问题我只能说无解,因为你现在还是不知道 Linux 的启动过程。

jiangtao9999 发表于 2012-6-4 18:07:33

Live 系统的 initrd 很重要,但安装完成后就需要另一个针对硬盘 Linux 系统的 initrd 。
Live 的 initrd 后面再说,先说硬盘里安装好系统的 initrd 。
这个你去看 MI 的调用过程就行了。另外内核的安装脚本里面应该也有生成的部分,你去照抄就行了。

至于 Live 的 initrd 脚本,你先说你想干什么吧。

haulm 发表于 2012-6-4 21:41:51

没什么,已经实现了,就是基于现有的 Live 条件进行安装,现在我已经对整个过程有概念,成功安装了一次了,现在可以写一个简单的对话脚本,自动完成安装。unsquashfs 的确比 cp 要来的快很多,安装非常快哦。

jiangtao9999 发表于 2012-6-4 23:05:50

安装程序你还是等新的 MI 吧。用 Live 系统跑新 MI 进行安装。

haulm 发表于 2012-6-5 00:17:36

草稿#!/bin/sh
echo "Live 安装程序 0.1"
echo "请输入需要安装的分区设备名称,注意您的操作将会格式化分区并开始系统安装。"
echo '例如原 Winxp 认知第一硬盘的 E 盘对应设备名为"/dev/sda6"'
echo "您可以运行 kdf 查看所有设备的状况,对重要文件进行备份"
echo "输入:/dev/__"
read dev_get
echo "您输入的设备名为"$dev_get
echo "请再次输入设备名"
read dev_name
if [ "$dev_get" != "$dev_name" ]
then
echo "分区设备没有确认"
exit
fi
if ( ! echo $dev_name|grep /dev/sd>/dev/null )
then
echo "分区设备名不正确"
exit
fi
i=${#dev_name}
s1=${dev_name:5:3}
s2=${dev_name:8}
let s2=s2-1
case $s1 in
sda)
      t_s1=0
      ;;
sdb)
      t_s1=1
      ;;
sdc)
      t_s1=2
      ;;
sdd)
      t_s1=3
      ;;
   *)
echo "分区设备名不正确"
exit
      ;;
esac
case $s2 in
0)
      t_s2=0
      ;;
4)
      t_s2=4
      ;;
5)
      t_s2=5
      ;;
6)
      t_s2=6
      ;;
7)
      t_s2=7
      ;;
8)
      t_s2=8
      ;;
9)
      t_s2=9
      ;;
10)
      t_s2=10
      ;;
11)
      t_s2=11
      ;;
12)
      t_s2=12
      ;;
13)
      t_s2=13
      ;;
14)
      t_s2=14
      ;;
15)
      t_s2=15
      ;;
   *)
      echo "无此设备名"
      exit
      ;;
esac
echo "开始格式化分区"$dev_name
umount $dev_name
mkfs.ext4 $dev_name
mkdir /tmp/newsystem
mount $dev_name /tmp/newsystem
cd /tmp/newsystem
for i in bin home opt sbin usr etc lib root srv var;do
unsquashfs /mnt/sr0/MagicLinux-2.5.15-Live/base/$i.lzm;
mv squashfs-root/* ./
rmdir squashfs-root
done
mkdir -p boot/grub media mnt/sr0 proc sys/block dev dev/shm dev/pts tmp
cd boot
cp /boot/vmlinuz vmlinuz-3.1.10
cp /boot/System.map-3.1.10 ./
cp /usr/lib/grub/{stage1,stage2,*stage1_5} grub/
cp /boot/{grub.conf,message} grub/
cd grub
ln -s grub.conf menu.lst
cd /tmp/newsystem
cp /boot/{fstab,mtab} etc/
sed -i 's@/dev/LIVE@'"$dev_name"'@g' etc/fstab
sed -i 's@/dev/LIVE@'"$dev_name"'@g' etc/mtab
sed -i 's@/dev/LIVE@'"$dev_name"'@g' boot/grub/grub.conf
sed -i 's@hdLIVE@'"$t_s1"'@g' boot/grub/grub.conf
sed -i 's@_live@'"$t_s2"'@g' boot/grub/grub.conf
chmod 777 proc/ dev/ dev/* sys/ sys/block tmp
echo "请运行 mkinitrd initrd-3.1.10.img 3.1.10"
chroot .


[ 本帖最后由 haulm 于 2012-6-5 02:53 编辑 ]

haulm 发表于 2012-6-5 02:57:12

原帖由 jiangtao9999 于 2012-6-4 23:05 发表 http://forum.linuxfans.org/images/common/back.gif
安装程序你还是等新的 MI 吧。用 Live 系统跑新 MI 进行安装。
自己实现也可以充下电,这脑子不好使了。

huizige 发表于 2012-6-6 02:06:31

我建议更新一下INITRD文件,init文件写成动态的,解释引导参数装载磁盘,这样不用每次安装都需要重现生成.
页: [1] 2 3
查看完整版本: 999 兄,能不能帮我理顺一下 Live 上面的安装