QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5546|回复: 35

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

[复制链接]
发表于 2012-6-4 11:28:18 | 显示全部楼层 |阅读模式
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 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 发表于 2012-6-4 12:26:11 | 显示全部楼层
急,没人回答么,应该和内核无关,同一内核 MI 装就行 ?Live 也是可以的。
ls /sys/block/
loop0  loop3  loop6  ram1   ram12  ram15  ram4  ram7  sda
loop1  loop4  loop7  ram10  ram13  ram2   ram5  ram8  sdb
loop2  loop5  ram0   ram11  ram14  ram3   ram6  ram9  sr0
难道真和这个目录有关,没有建立对应的设备?

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

使用道具 举报

发表于 2012-6-4 12:56:10 | 显示全部楼层
我之前做过安装好像不必手工建立/dev/下的设备啊。不过我安装的时候不是cp -R这么处理的,而是解压squashfs文件的。
grub的安装需要chroot进新系统才能正常安装,好像是这样。
回复

使用道具 举报

 楼主| 发表于 2012-6-4 13:09:58 | 显示全部楼层
也有可能被 Live 污染了,需要从 base 重新解压,se 兄,能说一下 initrd 的重新生成不,我一会再尝试。
回复

使用道具 举报

 楼主| 发表于 2012-6-4 14:17:58 | 显示全部楼层
false /init,设备全部删除,留下主目录,现在 init 又要怎么设置》?我现在明白过来了,initrd 必需是在 /etc/fstab 正确描述挂载的设备后才能正确制做。

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

 楼主| 发表于 2012-6-4 14:33:05 | 显示全部楼层
这手菜的,/etc/fstab 没写对。
这会进去后变成 root@none了,所有分区只读。。。
难道说 /etc/mtab 也不能缺。。

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

 楼主| 发表于 2012-6-4 15:41:42 | 显示全部楼层
莫名其妙的地方:啊哈,还要修改一下 /etc/rc.d/rc.sysinit 的权限,靠,好象是我自己搞坏的。
回复

使用道具 举报

 楼主| 发表于 2012-6-4 16:03:46 | 显示全部楼层
等有时间写个安装脚本好了,就安装一次搞了四小时。
回复

使用道具 举报

发表于 2012-6-4 18:04:50 | 显示全部楼层
mknod console c 5 1

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

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

使用道具 举报

发表于 2012-6-4 18:07:33 | 显示全部楼层
Live 系统的 initrd 很重要,但安装完成后就需要另一个针对硬盘 Linux 系统的 initrd 。
Live 的 initrd 后面再说,先说硬盘里安装好系统的 initrd 。
这个你去看 MI 的调用过程就行了。另外内核的安装脚本里面应该也有生成的部分,你去照抄就行了。

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

使用道具 举报

 楼主| 发表于 2012-6-4 21:41:51 | 显示全部楼层
没什么,已经实现了,就是基于现有的 Live 条件进行安装,现在我已经对整个过程有概念,成功安装了一次了,现在可以写一个简单的对话脚本,自动完成安装。unsquashfs 的确比 cp 要来的快很多,安装非常快哦。
回复

使用道具 举报

发表于 2012-6-4 23:05:50 | 显示全部楼层
安装程序你还是等新的 MI 吧。用 Live 系统跑新 MI 进行安装。
回复

使用道具 举报

 楼主| 发表于 2012-6-5 00:17:36 | 显示全部楼层
草稿
  1. #!/bin/sh
  2. echo "Live 安装程序 0.1"
  3. echo "请输入需要安装的分区设备名称,注意您的操作将会格式化分区并开始系统安装。"
  4. echo '例如原 Winxp 认知第一硬盘的 E 盘对应设备名为"/dev/sda6"'
  5. echo "您可以运行 kdf 查看所有设备的状况,对重要文件进行备份"
  6. echo "输入:/dev/__"
  7. read dev_get
  8. echo "您输入的设备名为"$dev_get
  9. echo "请再次输入设备名"
  10. read dev_name
  11. if [ "$dev_get" != "$dev_name" ]
  12. then
  13. echo "分区设备没有确认"
  14. exit
  15. fi
  16. if ( ! echo $dev_name|grep /dev/sd>/dev/null )
  17. then
  18. echo "分区设备名不正确"
  19. exit
  20. fi
  21. i=${#dev_name}
  22. s1=${dev_name:5:3}
  23. s2=${dev_name:8}
  24. let s2=s2-1
  25. case $s1 in
  26.   sda)
  27.       t_s1=0
  28.       ;;
  29.   sdb)
  30.       t_s1=1
  31.       ;;
  32.   sdc)
  33.       t_s1=2
  34.       ;;
  35.   sdd)
  36.       t_s1=3
  37.       ;;
  38.    *)
  39. echo "分区设备名不正确"
  40. exit
  41.       ;;
  42. esac
  43. case $s2 in
  44.   0)
  45.       t_s2=0
  46.       ;;
  47.   4)
  48.       t_s2=4
  49.       ;;
  50.   5)
  51.       t_s2=5
  52.       ;;
  53.   6)
  54.       t_s2=6
  55.       ;;
  56.   7)
  57.       t_s2=7
  58.       ;;
  59.   8)
  60.       t_s2=8
  61.       ;;
  62.   9)
  63.       t_s2=9
  64.       ;;
  65.   10)
  66.       t_s2=10
  67.       ;;
  68.   11)
  69.       t_s2=11
  70.       ;;
  71.   12)
  72.       t_s2=12
  73.       ;;
  74.   13)
  75.       t_s2=13
  76.       ;;
  77.   14)
  78.       t_s2=14
  79.       ;;
  80.   15)
  81.       t_s2=15
  82.       ;;
  83.    *)
  84.       echo "无此设备名"
  85.       exit
  86.       ;;
  87. esac
  88. echo "开始格式化分区"$dev_name
  89. umount $dev_name
  90. mkfs.ext4 $dev_name
  91. mkdir /tmp/newsystem
  92. mount $dev_name /tmp/newsystem
  93. cd /tmp/newsystem
  94. for i in bin home opt sbin usr etc lib root srv var;do
  95. unsquashfs /mnt/sr0/MagicLinux-2.5.15-Live/base/$i.lzm;
  96. mv squashfs-root/* ./
  97. rmdir squashfs-root
  98. done
  99. mkdir -p boot/grub media mnt/sr0 proc sys/block dev dev/shm dev/pts tmp
  100. cd boot
  101. cp /boot/vmlinuz vmlinuz-3.1.10
  102. cp /boot/System.map-3.1.10 ./
  103. cp /usr/lib/grub/{stage1,stage2,*stage1_5} grub/
  104. cp /boot/{grub.conf,message} grub/
  105. cd grub
  106. ln -s grub.conf menu.lst
  107. cd /tmp/newsystem
  108. cp /boot/{fstab,mtab} etc/
  109. sed -i 's@/dev/LIVE@'"$dev_name"'@g' etc/fstab
  110. sed -i 's@/dev/LIVE@'"$dev_name"'@g' etc/mtab
  111. sed -i 's@/dev/LIVE@'"$dev_name"'@g' boot/grub/grub.conf
  112. sed -i 's@hdLIVE@'"$t_s1"'@g' boot/grub/grub.conf
  113. sed -i 's@_live@'"$t_s2"'@g' boot/grub/grub.conf
  114. chmod 777 proc/ dev/ dev/* sys/ sys/block tmp
  115. echo "请运行 mkinitrd initrd-3.1.10.img 3.1.10"
  116. chroot .
复制代码

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

 楼主| 发表于 2012-6-5 02:57:12 | 显示全部楼层
原帖由 jiangtao9999 于 2012-6-4 23:05 发表
安装程序你还是等新的 MI 吧。用 Live 系统跑新 MI 进行安装。

自己实现也可以充下电,这脑子不好使了。
回复

使用道具 举报

发表于 2012-6-6 02:06:31 | 显示全部楼层
我建议更新一下INITRD文件,init文件写成动态的,解释引导参数装载磁盘,这样不用每次安装都需要重现生成.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-4-25 20:54 , Processed in 0.085010 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表