当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 22 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : [分享]不解压 iso 硬盘启动 ubuntu-6.06-desktop.iso (即livecd版)
帖子发表于 : 2006-06-19 1:53 
头像

注册: 2006-02-23 14:46
帖子: 436
地址: 上海
送出感谢: 0 次
接收感谢: 1
原 创: 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_boot-2.6.15-23-386.zip
为 2.6.15-23 686 内核准备:
http://ftp.ubuntu.org.cn/dubuntu/hd_boot-2.6.15-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


另请参阅:
http://forum.ubuntu.org.cn/viewtopic.php?t=16590&highlight=
http://forum.ubuntu.org.cn/viewtopic.php?t=11906&highlight=


_________________
====
dubuntu-6.06-livecd-i386正式版正式完工!
====
*支持LiveCD硬盘启动
*Linux 2.6.15-23-686
*永中Office 2007
*LumaQQ+OpenQ+cycloneQQ
**N 多的编程及调试工具**


最后由 lvjinhua 编辑于 2006-06-21 1:05,总共编辑了 5 次

页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2006-06-19 13:29 

注册: 2005-05-31 9:42
帖子: 31
送出感谢: 0 次
接收感谢: 0 次
用户名及密码不对


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2006-06-19 21:34 

注册: 2005-05-31 9:42
帖子: 31
送出感谢: 0 次
接收感谢: 0 次
楼主能不能去掉用户和密码啊?我试过很多次了,是不是有空格或者搞错了?很郁闷。


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2006-06-19 22:14 
头像

注册: 2006-02-23 14:46
帖子: 436
地址: 上海
送出感谢: 0 次
接收感谢: 1
确实密码不对,我马上修正并上传。


_________________
====
dubuntu-6.06-livecd-i386正式版正式完工!
====
*支持LiveCD硬盘启动
*Linux 2.6.15-23-686
*永中Office 2007
*LumaQQ+OpenQ+cycloneQQ
**N 多的编程及调试工具**


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2006-06-21 0:54 
头像

注册: 2006-02-23 14:46
帖子: 436
地址: 上海
送出感谢: 0 次
接收感谢: 1
终于修改完成了, 由于 initrd.gz 文件系统中的 bash 同真实系统的 bash 不太一样,导致像 if 语句这此常用语法也不太一样,导致自己白忙了一天的时间。
哎,吸取教训。


_________________
====
dubuntu-6.06-livecd-i386正式版正式完工!
====
*支持LiveCD硬盘启动
*Linux 2.6.15-23-686
*永中Office 2007
*LumaQQ+OpenQ+cycloneQQ
**N 多的编程及调试工具**


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2006-06-21 20:45 

注册: 2005-05-31 9:42
帖子: 31
送出感谢: 0 次
接收感谢: 0 次
多谢,可以使用了,但是进一步安装ubuntu时发现没有办法挂载/分区,无论自动空闲分区还是用gparter,都在格式化后没有办法挂载根分区。自动空闲分区后起码开始安装后还复制了一部分文件才报告安装崩溃,我好像没有发现其它人有这个问题,应该是用分区工具后就可以安装了,难道这个只能启动不能进一步安装?
另外我的鼠标在这个环境不能使用,普通的三键鼠标啊。安装时区设置上选择上海东8区后怎么显示的时间是桌面右上角正确的系统时间加上8小时,这个没有理由啊,怎么搞出两个时间了。


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2006-06-24 12:12 
头像

注册: 2006-02-23 14:46
帖子: 436
地址: 上海
送出感谢: 0 次
接收感谢: 1
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 多的编程及调试工具**


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2006-06-24 15:08 

注册: 2005-05-31 9:42
帖子: 31
送出感谢: 0 次
接收感谢: 0 次
iso文件我已经放在第一个分区了,等正式版出来我试试dubuntu,不过好像带了很多编程和调试工具。


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2006-06-24 18:57 

注册: 2006-05-07 23:51
帖子: 20
送出感谢: 0 次
接收感谢: 0 次
这个能起动你的DUBUNTU么??


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2006-06-24 22:33 
头像

注册: 2005-05-19 18:38
帖子: 1991
地址: 湖南永州
送出感谢: 0 次
接收感谢: 1
要安装的话可以先在WinXP下用分区工具留一空的分区

我在笔记本上成功安装了官方的 xubuntu-desktop

ubuntu-desktop 用起来很慢(主要是内存太小),不建义用这个安装。


页首
 用户资料  
 
11 楼 
 文章标题 :
帖子发表于 : 2006-06-24 22:42 
头像

注册: 2005-05-19 18:38
帖子: 1991
地址: 湖南永州
送出感谢: 0 次
接收感谢: 1
建议:

硬盘的挂载可去掉只读属性 (去掉-o ro )
挂载vfat ntfs 时加上中文持 (加上-o utf8)


页首
 用户资料  
 
12 楼 
 文章标题 :
帖子发表于 : 2006-06-25 15:26 
头像

注册: 2006-02-23 14:46
帖子: 436
地址: 上海
送出感谢: 0 次
接收感谢: 1
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 多的编程及调试工具**


页首
 用户资料  
 
13 楼 
 文章标题 :
帖子发表于 : 2006-07-07 20:55 
头像

注册: 2005-05-19 18:38
帖子: 1991
地址: 湖南永州
送出感谢: 0 次
接收感谢: 1
代码:
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 次

页首
 用户资料  
 
14 楼 
 文章标题 :
帖子发表于 : 2006-07-07 23:11 
头像

注册: 2005-05-19 18:38
帖子: 1991
地址: 湖南永州
送出感谢: 0 次
接收感谢: 1
使用硬盘作联合文件系统 (加 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"
}


页首
 用户资料  
 
15 楼 
 文章标题 :
帖子发表于 : 2006-07-07 23:19 
头像

注册: 2005-05-19 18:38
帖子: 1991
地址: 湖南永州
送出感谢: 0 次
接收感谢: 1
在 mountroot() 的

setup_cow "$overlay_method" "$(get_backing_device $live_image)" "$rootmnt"
加上
cp -r /lib "$rootmnt/lib"

可以起动不同LiveCD上内核的 LiveCD


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 22 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 4 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译