当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 18 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : [原创]制作从硬盘起动 ubuntu live_cd 的 initrd.gz
帖子发表于 : 2006-03-25 22:40 
头像

注册: 2005-05-19 18:38
帖子: 1991
地址: 湖南永州
送出感谢: 0 次
接收感谢: 1
制作从硬盘起动 ubuntu live_cd 的 initrd.gz

由于内核版本不一样,所有做出来的 initrd.gz 不一定通用。
故将制作从硬盘起动 ubuntu live_cd 的initrd.gz的方法介绍如下:

原理:修改起动脚本,使其挂载硬盘上的分区,而不是光盘。

首先把光盘里的 casper 和 install 目录复制到根目录里:

代码:
sudo mount */ubuntu.iso /mnt -o loop
sudo cp -R /mnt/casper / 
sudo cp -R /mnt/install /
sudo umount /mnt

再挂载压缩的文件系统:
代码:
sudo mount /casper/filesystem.squashfs  /mnt -t squashfs -o loop


由于是只读的,所以把要修改的内容考贝过来:
代码:
sudo cp -R  /mnt/usr/share/initramfs-tools /

修改/initramfs-tools/scripts/casper
代码:
sudo gedit /initramfs-tools/scripts/casper


找到 find_cd() {*}

把它改为:(或者为自己的)

代码:
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
}

现在再挂载回去:

sudo mount --bind /initramfs-tools /mnt/usr/share/initramfs-tools

由于 /mnt/tmp 不能写,所以也要挂载一个能写的过去:

mkdir /gaoxing
sudo mount --bind /gaoxing /mnt/tmp

好了准备好了就可以制作了:(很简单的)
代码:
sudo chroot /mnt /bin/bash
mkinitramfs -o /tmp/initrd.gz /lib/modules/2.6*

好了,大功告成,用它来起动吧(理论上可以从硬盘的vfat ntfs etx3 reiserfs分区上起动,也可从光盘起动)

从硬盘起动如下:(以前说过)

把 iso 里面的 casper 文件夹解压到一个盘的根目录下

再用光盘中的 inistall/vmlinuz 和我的这个 initrd.gz 起动

在 grub 的 menu.lst 配置文件中加入

代码:
引用:
title Kubuntu livecd

kernel */vmlinuz append boot=casper ramdisk_size=1048576 root=/dev/ram rw quiet debian-installer/locale=zh_CN splash

initrd */kubuntu_initrd.gz

boot

*/ 为你自己的路径

重起就行了

已经成功的使很多live_cd 从硬盘起动了,包括 6.06 中文件制定版。


相关内容: 修改 initrd.gz 文件 (法二) http://forum.ubuntu.org.cn/viewtopic.php?p=98012#98012

.


最后由 gnix_oag 编辑于 2006-07-09 10:12,总共编辑了 3 次

页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2006-03-25 22:46 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
好贴。

似乎没有找到检查版本的部分。是不是也可以把版本检查的限制去掉。


_________________
● 鸣学


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2006-03-25 22:54 
头像

注册: 2005-05-19 18:38
帖子: 1991
地址: 湖南永州
送出感谢: 0 次
接收感谢: 1
如果有脚本高手就好了,

我看这个脚本看了好久,才搞清楚这个部分。


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2006-04-05 20:17 

注册: 2006-03-21 3:03
帖子: 87
送出感谢: 0 次
接收感谢: 0 次
不是很明白,只有自己去实践了....
请问这些命令要用livecd去启动之后执行了,这样还是要刻盘先了...
直接装不了,我郁闷死...


页首
 用户资料  
 
5 楼 
 文章标题 : 我修改了一下,可以不解压缩 iso 文件即可启动,并且支持 ntfs 分区
帖子发表于 : 2006-06-21 0:57 
头像

注册: 2006-02-23 14:46
帖子: 436
地址: 上海
送出感谢: 0 次
接收感谢: 1
我修改了一下,可以不解压缩 iso 文件即可启动,并且支持 ntfs 分区:
http://forum.ubuntu.org.cn/viewtopic.php?t=17909


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


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

注册: 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"
}


最后由 gnix_oag 编辑于 2006-07-07 23:09,总共编辑了 1 次

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

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


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

注册: 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


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2006-07-08 0:26 
头像

注册: 2005-05-19 18:38
帖子: 1991
地址: 湖南永州
送出感谢: 0 次
接收感谢: 1
改一下:即 ext2|ext3|reiserfs|jfs|xfs|minix 分区上有 /ubuntu_rw 文件夹就用它来保存
或者有根目上有 ubuntu.img 文件 就用它来保存

代码:
find_cow_device() {
    for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop); do
        for dev in $(subdevices "${sysblock}"); do
            devname=$(sys2dev "${dev}")

                    case $(get_fstype "${devname}") in   
                        ext2|ext3|reiserfs|jfs|xfs|minix)
                            modprobe $(get_fstype "${devname}")
                            mount -t $(get_fstype "${devname}") -o rw "${devname}" /cow_tmp || continue
                             if [ -e /cow_tmp/ubuntu_rw ] ; then
                                 mount -o bind /cow_tmp /cow
                                 return
                             elif [ -f /cow_tmp/ubuntu.img ]; then
                                 modprobe loop
                                 mount -t $(get_fstype /cow_tmp/ubuntu.img ) -o loop /cow_tmp/ubuntu.img /cow
                                 return
                             else
                                 umount /cow_tmp
                             fi
                                                                         ;;
                         vfat|ntfs)
                             modprobe $(get_fstype "${devname}")
                             mount -t $(get_fstype "${devname}") -o utf8 "${devname}" /cow_tmp || continue
                             if [ -f /cow_tmp/ubuntu.img ]; then
                                 modprobe loop
                                 mount -t $(get_fstype /cow_tmp/ubuntu.img ) -o loop /cow_tmp/ubuntu.img /cow
                                 return
                             eles
                                 umount /cow_tmp
                             fi
                                                                  ;;
                                                               *)
                                                                 ;;
                    esac
        done
    done
    return 1   
}

setup_unionfs() {
   backdev="$1"
   rootmnt="$2"
        modprobe -Qb unionfs
        mkdir -p /cow

        if grep -q use_hd_unionfs /proc/cmdline; then
            mkdir -p /cow_tmp
            i=0
            # We love udev and the kernel!
            while [ "$i" -lt 10 ]; do
                cowdevice=$(find_cow_device)
                sleep 1
                i=$(( $i + 1 ))
            done
        else
            mount -t tmpfs tmpfs /cow
        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=rw:/rofs=ro unionfs "$rootmnt"
        if grep -q show-cow /proc/cmdline; then
            mkdir -p "$rootmnt/cow"
            mount -o bind /cow "$rootmnt/cow"
        fi
        mkdir -p "$rootmnt/rofs"
        mount -o bind /rofs "$rootmnt/rofs"
}


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2006-07-12 9:24 

注册: 2006-07-05 16:34
帖子: 26
送出感谢: 0 次
接收感谢: 0 次
/install下没有vmliuz 怎么办? /casper下有vmliuz 可以用不?
要在移动硬盘上启动应该怎么改?


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

注册: 2005-05-19 18:38
帖子: 1991
地址: 湖南永州
送出感谢: 0 次
接收感谢: 1
6.06的位置改了,就用/casper下的vmliuz


页首
 用户资料  
 
12 楼 
 文章标题 :
帖子发表于 : 2006-07-14 8:18 

注册: 2006-07-05 16:34
帖子: 26
送出感谢: 0 次
接收感谢: 0 次
改了后,在移动硬盘上启动,只出现了启动屏幕,进度条就没反应了?是怎么回事啊?


页首
 用户资料  
 
13 楼 
 文章标题 :
帖子发表于 : 2007-02-28 9:51 

注册: 2007-02-26 17:39
帖子: 9
送出感谢: 0 次
接收感谢: 0 次
可以整理一下吗,新手,不是很明白,但用你的方法下载后启动成功,但不会修改,启动后更新文件后有时会进不了系统,在启动进度条开始后停止,键盘不起作用


页首
 用户资料  
 
14 楼 
 文章标题 :
帖子发表于 : 2007-02-28 9:53 
头像

注册: 2006-12-23 13:46
帖子: 9203
地址: Azores Islands
送出感谢: 0 次
接收感谢: 1
wgzht2003 写道:
可以整理一下吗,新手,不是很明白,但用你的方法下载后启动成功,但不会修改,启动后更新文件后有时会进不了系统,在启动进度条开始后停止,键盘不起作用


gnix_oag发了新脚本,也可直接上ftp下载引导


_________________
no security measure is worth anything if an attacker has physical access to the machine


页首
 用户资料  
 
15 楼 
 文章标题 :
帖子发表于 : 2007-03-03 13:42 

注册: 2007-02-26 17:39
帖子: 9
送出感谢: 0 次
接收感谢: 0 次
6.10 安装成功,但7.04 h4 不能成功启动,用gnix_oag的7.04 可以启动到桌面,但鼠标不能用 不知怎么用快捷键安装,呵呵,有好些快捷方式不会用,搜也搜不出来。


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

当前时区为 UTC + 8 小时


在线用户

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


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

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

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