系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
-
lvjinhua
- 帖子: 436
- 注册时间: 2006-02-23 14:46
- 来自: 上海
-
联系:
#1
帖子
由 lvjinhua » 2006-06-19 1:53
原 创: gnix_oag
修 改: dubuntu 于 2006.6.18
本文是在 gnix_oag 大作的基础上改进的,请见文后的引用
目前测试了 ubuntu 的 LiveCD 镜像文件存放到 ntfs, fat32, ext2, ext3, reiserfs 的情况,而 xfs 及 jfs 文件系统没有进行测试。
文件下载:
为 2.6.15-23 386 内核准备:
http://ftp.ubuntu.org.cn/dubuntu/hd_boo ... 23-386.zip
为 2.6.15-23 686 内核准备:
http://ftp.ubuntu.org.cn/dubuntu/hd_boo ... 23-686.zip
比如,欲启动官方正式版 ubuntu-6.06-desktop-i386 可以下载 hd_boot-2.6.15-23-386.zip 。
使用方法在下载得到的压缩包中有详细说明。
主要是修改了 /usr/share/initramfs-tools/scripts/casper 脚本,添加了一个 find_iso() 函数,用于查找硬盘上的 iso 镜像文件并判断它是不是 ubuntu 的 livecd。
代码: 全选
gnix_oag的版本,能实现硬盘启动,但必须解压缩 iso 文件,并且不支持 ntfs:
find_cd() {
mounted=
for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram); do
devname=$(sys2dev "${sysblock}")
for dev in $(subdevices "${sysblock}"); do
devname=$(sys2dev "${dev}")
case $(get_fstype "${devname}") in
vfat|iso9660|ntfs|etx3|udf|reiserfs)
mount -t $(get_fstype "${devname}") -o ro "${devname}" $mountpoint || continue
if casper_path $mountpoint; then
echo $(casper_path $mountpoint)
return
else
umount $mountpoint
fi
;;
esac
done
done
}
代码: 全选
修改后的版本,不必解压缩 iso ,支持 ntfs 等分区:
find_iso()
{
local isoroot="/iso9660"
local tmproot=$1
isos=`ls ${tmproot}/*.iso 2>/dev/null` || return 1
modprobe loop
mkdir -p "$isoroot"
for iso in ${isos}
do
mount -t iso9660 -o loop $iso $isoroot 2>/dev/null || continue
if casper_path "$isoroot"; then
#echo "$isoroot"/casper/filesystem.squashfs
in_iso_squashfs="$isoroot"/casper/filesystem.squashfs
return 0 else
umount "$isoroot"
fi
done
unset isos
unset iso
return 1
}
find_cd() {
mounted=
for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram); do
devname=$(sys2dev "${sysblock}")
for dev in $(subdevices "${sysblock}"); do
devname=$(sys2dev "${dev}")
case $(get_fstype "${devname}") in
vfat|iso9660|ext2|ext3|udf|reiserfs)
mount -t $(get_fstype "${devname}") -o ro "${devname}" $mountpoint || continue
# if casper_path $mountpoint; then
# echo $(casper_path $mountpoint)
# return
# else
# umount $mountpoint
# fi
if find_iso $mountpoint ; then
echo $in_iso_squashfs
return
else
umount $mountpoint
fi
;;
jfs|xfs|ntfs|minix)
modprobe xfs
modprobe jfs
modprobe ntfs
modprobe minix
mount -t $(get_fstype "${devname}") -o ro "${devname}" $mountpoint || continue
if find_iso $mountpoint ; then
echo $in_iso_squashfs
return
else
umount $mountpoint
fi
;;
*)
;;
esac
done
done
}
代码: 全选
编辑 /etc/mkinitramfs/modules 文件,如下所示,主要是为了在生成的 initrd.gz 文件中多加入一些驱动程序。
sd_mod
raid0
raid1
raid5
ntfs
minix
loop
xfs
jfs
scsi
另请参阅:
viewtopic.php?t=16590&highlight=
viewtopic.php?t=11906&highlight=
上次由
lvjinhua 在 2006-06-21 1:05,总共编辑 5 次。
====
dubuntu-6.06-livecd-i386正式版正式完工!
====
*支持LiveCD硬盘启动
*Linux 2.6.15-23-686
*永中Office 2007
*LumaQQ+OpenQ+cycloneQQ
**N 多的编程及调试工具**
-
ink
- 帖子: 31
- 注册时间: 2005-05-31 9:42
#2
帖子
由 ink » 2006-06-19 13:29
用户名及密码不对
-
ink
- 帖子: 31
- 注册时间: 2005-05-31 9:42
#3
帖子
由 ink » 2006-06-19 21:34
楼主能不能去掉用户和密码啊?我试过很多次了,是不是有空格或者搞错了?很郁闷。
-
lvjinhua
- 帖子: 436
- 注册时间: 2006-02-23 14:46
- 来自: 上海
-
联系:
#4
帖子
由 lvjinhua » 2006-06-19 22:14
确实密码不对,我马上修正并上传。
====
dubuntu-6.06-livecd-i386正式版正式完工!
====
*支持LiveCD硬盘启动
*Linux 2.6.15-23-686
*永中Office 2007
*LumaQQ+OpenQ+cycloneQQ
**N 多的编程及调试工具**
-
lvjinhua
- 帖子: 436
- 注册时间: 2006-02-23 14:46
- 来自: 上海
-
联系:
#5
帖子
由 lvjinhua » 2006-06-21 0:54
终于修改完成了, 由于 initrd.gz 文件系统中的 bash 同真实系统的 bash 不太一样,导致像 if 语句这此常用语法也不太一样,导致自己白忙了一天的时间。
哎,吸取教训。
====
dubuntu-6.06-livecd-i386正式版正式完工!
====
*支持LiveCD硬盘启动
*Linux 2.6.15-23-686
*永中Office 2007
*LumaQQ+OpenQ+cycloneQQ
**N 多的编程及调试工具**
-
ink
- 帖子: 31
- 注册时间: 2005-05-31 9:42
#6
帖子
由 ink » 2006-06-21 20:45
多谢,可以使用了,但是进一步安装ubuntu时发现没有办法挂载/分区,无论自动空闲分区还是用gparter,都在格式化后没有办法挂载根分区。自动空闲分区后起码开始安装后还复制了一部分文件才报告安装崩溃,我好像没有发现其它人有这个问题,应该是用分区工具后就可以安装了,难道这个只能启动不能进一步安装?
另外我的鼠标在这个环境不能使用,普通的三键鼠标啊。安装时区设置上选择上海东8区后怎么显示的时间是桌面右上角正确的系统时间加上8小时,这个没有理由啊,怎么搞出两个时间了。
-
lvjinhua
- 帖子: 436
- 注册时间: 2006-02-23 14:46
- 来自: 上海
-
联系:
#7
帖子
由 lvjinhua » 2006-06-24 12:12
ink 写了:多谢,可以使用了,但是进一步安装ubuntu时发现没有办法挂载/分区,无论自动空闲分区还是用gparter,都在格式化后没有办法挂载根分区。自动空闲分区后起码开始安装后还复制了一部分文件才报告安装崩溃,我好像没有发现其它人有这个问题,应该是用分区工具后就可以安装了,难道这个只能启动不能进一步安装?
另外我的鼠标在这个环境不能使用,普通的三键鼠标啊。安装时区设置上选择上海东8区后怎么显示的时间是桌面右上角正确的系统时间加上8小时,这个没有理由啊,怎么搞出两个时间了。
第一个问题: 由于从硬盘启动,因此有一个问题得小心,因为 live-cd 的 iso 文件放到了一个硬盘分区中,因此这个分区是绝对动不了的,即不能删除与不能格式化,最重要的是它前边的那些分区也不能动(比如你的 iso 文件放在 hda5 上,那么 hda1-4 都不能动),所以在启动之前最好将 livecd 的 iso 文件放在比较靠前的分区中。
另外, ubuntu 自带的那个 livecd 安装程序自我感觉实在是不怎么样,我就从来没有成功用它安装过系统,推荐你使用 dubuntu 吧,我们学校的 linux 组在 ubuntu 的基础上改进的版本。
第二个问题:关于鼠标,我们升级到 2.6.15-23-686 的内核后,学校一部分牌子的联想机器也不能使用,最后只能为 ps/2 键盘配置一个 usb-> ps/2 的转换器。
====
dubuntu-6.06-livecd-i386正式版正式完工!
====
*支持LiveCD硬盘启动
*Linux 2.6.15-23-686
*永中Office 2007
*LumaQQ+OpenQ+cycloneQQ
**N 多的编程及调试工具**
-
ink
- 帖子: 31
- 注册时间: 2005-05-31 9:42
#8
帖子
由 ink » 2006-06-24 15:08
iso文件我已经放在第一个分区了,等正式版出来我试试dubuntu,不过好像带了很多编程和调试工具。
-
abcsand
- 帖子: 20
- 注册时间: 2006-05-07 23:51
#9
帖子
由 abcsand » 2006-06-24 18:57
这个能起动你的DUBUNTU么??
-
gnix_oag
- 帖子: 1994
- 注册时间: 2005-05-19 18:38
- 来自: 湖南永州
-
联系:
#10
帖子
由 gnix_oag » 2006-06-24 22:33
要安装的话可以先在WinXP下用分区工具留一空的分区
我在笔记本上成功安装了官方的 xubuntu-desktop
ubuntu-desktop 用起来很慢(主要是内存太小),不建义用这个安装。
-
gnix_oag
- 帖子: 1994
- 注册时间: 2005-05-19 18:38
- 来自: 湖南永州
-
联系:
#11
帖子
由 gnix_oag » 2006-06-24 22:42
建议:
硬盘的挂载可去掉只读属性 (去掉-o ro )
挂载vfat ntfs 时加上中文持 (加上-o utf8)
-
lvjinhua
- 帖子: 436
- 注册时间: 2006-02-23 14:46
- 来自: 上海
-
联系:
#12
帖子
由 lvjinhua » 2006-06-25 15:26
gnix_oag 写了:建议:
硬盘的挂载可去掉只读属性 (去掉-o ro )
挂载vfat ntfs 时加上中文持 (加上-o utf8)
试一下,看能不能成功。
====
dubuntu-6.06-livecd-i386正式版正式完工!
====
*支持LiveCD硬盘启动
*Linux 2.6.15-23-686
*永中Office 2007
*LumaQQ+OpenQ+cycloneQQ
**N 多的编程及调试工具**
-
gnix_oag
- 帖子: 1994
- 注册时间: 2005-05-19 18:38
- 来自: 湖南永州
-
联系:
#13
帖子
由 gnix_oag » 2006-07-07 20:55
代码: 全选
find_iso()
{
local isoroot="/iso9660"
local tmproot=$1
isos=`ls ${tmproot}/*.iso 2>/dev/null` || return 1
modprobe loop
mkdir -p "$isoroot"
for iso in ${isos}
do
mount -t iso9660 -o loop $iso $isoroot 2>/dev/null || continue
if casper_path "$isoroot"; then
#echo "$isoroot"/casper/filesystem.squashfs
in_iso_squashfs="$isoroot"/casper/filesystem.squashfs
return 0 else
umount "$isoroot"
fi
done
unset isos
unset iso
return 1
}
find_cd() {
mounted=
for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram); do
devname=$(sys2dev "${sysblock}")
for dev in $(subdevices "${sysblock}"); do
devname=$(sys2dev "${dev}")
case $(get_fstype "${devname}") in
iso9660|ext2|ext3|udf|reiserfs|jfs|xfs|minix)
modprobe $(get_fstype "${devname}")
mount -t $(get_fstype "${devname}") "${devname}" $mountpoint || continue
if find_iso $mountpoint ; then
echo $in_iso_squashfs
return
else
umount $mountpoint
fi
;;
vfat|ntfs)
modprobe $(get_fstype "${devname}")
mount -t $(get_fstype "${devname}") -o utf8 "${devname}" $mountpoint || continue
if find_iso $mountpoint ; then
echo $in_iso_squashfs
return
else
umount $mountpoint
fi
;;
*)
;;
esac
done
done
}
上次由
gnix_oag 在 2006-07-07 23:13,总共编辑 1 次。
-
gnix_oag
- 帖子: 1994
- 注册时间: 2005-05-19 18:38
- 来自: 湖南永州
-
联系:
#14
帖子
由 gnix_oag » 2006-07-07 23:11
使用硬盘作联合文件系统 (加 unionfs=/dev/* use_unionfs 参数)
代码: 全选
setup_unionfs() {
backdev="$1"
rootmnt="$2"
modprobe -Qb unionfs
mkdir -p /cow
for z in $(cat /proc/cmdline); do
case $g in
unionfs=*)
unionfs=${z#unionfs=}
case $unionfs in
LABEL=*)
unionfs="/dev/disk/by-label/${unionfs#LABEL=}"
;;
UUID=*)
unionfs="/dev/disk/by-uuid/${unionfs#UUID=}"
;;
esac
;;
unionfs_img=*)
unionfs_img=${z#unionfs_img=}
esac
done
if grep -q use_unionfs /proc/cmdline; then
i=0
# We love udev and the kernel!
while [ "$i" -lt 10 ]; do
cowdevice=$unionfs
mount -t $(get_fstype "$cowdevice") -o rw "$cowdevice" /cow || panic "Can not mount $cowdevice on /cow"
break
sleep 1
i=$(( $i + 1 ))
done
eles
mount -t tmpfs tmpfs /cow
fi
if [ ! -e /cow/ubuntu_rw ]; then
mkdir -p /cow/ubuntu_rw
fi
mkdir -p /rofs
if [ "$(get_fstype $backdev)" = "unknown" ]; then
panic "Unknown file system type on $backdev"
fi
mount -t $(get_fstype "$backdev") -o ro "$backdev" /rofs || panic "Can not mount $backdev on /rofs"
mount -t unionfs -o dirs=/cow/ubuntu_rw=rw:/rofs=ro unionfs "$rootmnt"
if grep -q show-cow /proc/cmdline; then
mkdir -p "$rootmnt/cow"
mount -o bind /cow/ubuntu_rw "$rootmnt/cow"
fi
mkdir -p "$rootmnt/rofs"
mount -o bind /rofs "$rootmnt/rofs"
}
-
gnix_oag
- 帖子: 1994
- 注册时间: 2005-05-19 18:38
- 来自: 湖南永州
-
联系:
#15
帖子
由 gnix_oag » 2006-07-07 23:19
在 mountroot() 的
setup_cow "$overlay_method" "$(get_backing_device $live_image)" "$rootmnt"
加上
cp -r /lib "$rootmnt/lib"
可以起动不同LiveCD上内核的 LiveCD