Linux的发布

        有时候希望将定制好的Linux移植到其他的机器上使用,所以我们将定制好的Linux制作

成安装光盘的形式,可以方便在其他机器上安装。

为此我们要先制作一个引导系统,由引导系统引导我们进行一步步的安装。其中引导系统

有grub、initramfs、内核三部分组成,相当于一个微型linux,下面我们详细介绍制作过程。

必要的准备

1、安装cdrtools-2.01

安装这个包是为了使用其包含的命令mkisofs,这个是建立光盘镜像的工具。该

包的编译安装命令为:

tar xvf cdrtools-2.01.tar.bz2

cd cdrtools-2.01

patch -Np1 -i ../cdrtools-2.01-mkisofs_iconv-1.patch

patch -Np1 -i ../cdrtools-2.01-ascii-2.patch

make INS_BASE=/usr DEFINSUSR=root DEFINSGRP=root

make INS_BASE=/usr DEFINSUSR=root DEFINSGRP=root install &&

install -v -m755 -d /usr/share/doc/cdrtools-2.01 &&

install -v -m644 README* ABOUT doc/*.ps  /usr/share/doc/cdrtools-2.01

2、安装cpio

用来生成initramfs.igz。编译安装命令为:

patch -Np1 -i ../cpio-2.9-gcc43_inline-1.patch &&

./configure CPIO_MT_PROG=mt \
           
--prefix=/usr \
            --bindir=/bin \
            --libexecdir=/tmp
\
            --with-rmt=/usr/sbin/rmt &&

make

安装脚本

安装脚本的内容为:

1、分区硬盘并格式化

2、解压缩定制的linux系统压缩包

3、调整grub

/install/INSTALL文件:

#!/bin/sh
#create partitions
fdisk /dev/sda <<
"EOF"
n
p
1
1
+512M
n
p
2

w
q
EOF
#setup swap
mkswap /dev/sda1
swapon
/dev/sda1
#prepare partition
mkfs -t ext3 /dev/sda2
mount /dev/sda2
$LFS
#extract the lfs
cd $LFS
tar xvf /install/lfs.tar.gz
#setup
grub
mount --bind /dev $LFS/dev
chroot $LFS
grub
grub> root (hd0,
1)
grub> setup (hd0)
grub> quit
exit
umount
$LFS/dev
#end
cd /
umount $LFS
reboot

Initramfs构建

Initramfs简介

在2.6版本的linux内核中,都包含一个压缩过的cpio格式的打包文件。当内核启

动时,会从这个打包文件中导出文件到内核的rootfs文件系统,然后内核检查rootfs

中是否包含有init文件,如果有则执行它,作为PID为1的第一个进程。这个init进程负

责启动系统后续的工作,包括定位、挂载“真正的”根文件系统设备(如果有的话)。

如果内核没有在rootfs中找到init文件,则内核会按以前版本的方式定位、挂载根分区,

然后执行/sbin/init程序完成系统的后续初始化工作。这个压缩过的cpio格式的打包文件

就是initramfs。

Initramfs的文件和目录

1、确定需要的可执行文件,如:ls, cat, tar, fdisk, mount等常用命令

的可执行文件,并查找这些可执行文件所依赖的库文件,将它们复制到initramfs对应

的目录中。可以在网上找一些抓库脚本程序,根据实际情况稍做修改,运行脚本即可自动

完成上述功能。也可参考本例的脚步文件。

2、init文件

#!/bin/sh

/etc/rc.d/init.d/rc
sysinit

/bin/bash --rcfile /etc/profile

3、 rc 启动脚本

使用如下命令将启动脚本复制到initramfs下对应的目录:

cp /etc/udev initramfs/etc/
-a

mkdir -p
initramfs/etc/rc.d/init.d

cp -a
/etc/rc.d/init.d/{functions,mountfs,mountkernfs,rc,udev,udev_retry}
initramfs/etc/rc.d/init.d/

mkdir -p
initramfs/etc/rc.d/rcsysinit.d

cp
-a /etc/rc.d/rcsysinit.d/{S00mountkernfs,S10udev,S40mountfs,S50udev_retry}   initramfs/etc/rc.d/rcsysinit.d/

mkdir -p
initramfs/etc/sysconfig

cp -a /etc/sysconfig/rc
initramfs/etc/sysconfig/rc

4、一些配置文件和目录

创建挂载目录/proc, /sys,
/media/cdrom;

复制udev 相关的文件: cp -a /lib/udev/devices
$WORK/tmpfs/lib/udev/,并让udev 自动创建/dev/cdrom 链接;

/etc/fstab文件:

/dev/root     /                   
ext2      defaults        0     0
/dev/cdrom  /media/cdrom  iso9660 
defaults        0     0
proc           /proc               proc     
defaults        0     0
sysfs         /sys                 sysfs    
defaults        0     0
devpts       /dev/pts           devpts  
defaults        0     0

/etc/profile文件:

export
PATH=/bin:/usr/bin:/sbin:/usr/sbin
export TERM=xterm
export
HISTSIZE=1000
export PS1="\w# "
alias ls="ls --color"
alias ll="ls
-lh"
alias la="ll -a"

生成Initramfs

    find . | cpio -H newc -o | gzip > $WORK/iso/boot/initramfs.igz

grub启动

/boot/grub/menu.lst 文件如下:

default 0
timeout 5
color green/black
light-green/black
title bootcd
  root(cd)
  kernel /boot/kernel
 
initrd /boot/initramfs.igz

root (cd)表示从光盘启动;

kernel /boot/kernel 表示kernel文件的位置;

initrd  /boot/initramfs.igz
表示initramfs.igz文件的位置。

结束

生成ISO文件

mkisofs                        \
 
-R                           \
  -b boot/grub/stage2_eltorito \
 
-no-emul-boot                \
  -boot-load-size 4            \
 
-boot-info-table             \
  -o $WORK/bootcd.iso          \
 
$WORK/iso

测试

gwlinux1.0_setup.iso 在vmware6.5上测试安装通过。安装方法简单描述如下:

1、  在vmware6.5中安装时默认硬盘驱动为LSI logic,请设置为BUS logic;

2、  该版本linux的网络暂时没有配置,请设置为不使用网络连接;

3、  使用iso引导进入安装界面

4、  命令提示符中输入:/install/INSTALL,执行完后如果不能自动重启,手动重启即可。

5、  重启进入gwlinux1.0

Gwlinux1.0_setupk可在以下硬件平台上正常安装:e5000+g31+WD160G硬盘+dvd-rom。

但仍存在一些遗留问题:

1、  启动盘启动时会提示cdrom不存在,这时,需要先输入:mount /dev/sr0 /media/cdrom,再按步骤安装;

2、  安装结束时reboot命令不起作用,要手动重启;

3、  硬盘分区方式固定,缺乏灵活性;

4、  其他硬件平台还未验证,对某些硬件可能不支持。

下载:linux的定制和发布.zip

      

linux的定制和发布(二)的更多相关文章

  1. linux的定制和发布(一)

    如果总是仰视高山,就会挫伤我们攀登的勇气,使我们固步自封.我们需要做的就 是迈开自己的脚步,踏出第一步,let's go!       Linux的裁剪一般有三种方法: 1.以一个已经安装好的系统为基 ...

  2. 在Linux下使用linuxdeployqt发布Qt程序

    一.简介 linuxdeployqt 是Linux下的qt打包工具,可以将应用程序使用的资源(如库,图形和插件)复制到二进制运行文件所在的文件夹中. 二.安装linuxdeployqt 去github ...

  3. 阿里云服务器Linux CentOS安装配置(二)yum安装svn

    阿里云服务器Linux CentOS安装配置(二)yum安装svn 1.secureCRT连接服务器 2.先创建一个文件夹,用来按自己的习惯来,用来存放数据 mkdir /data 3.yum安装sv ...

  4. Frugalware Linux 1.9 RC1 发布

    Frugalware Linux 1.9 RC1 发布了,下载地址:fvbe-1.9rc1-full-x86_64.iso (1,874MB, SHA1). 发行通知:http://www.fruga ...

  5. [原创]linux简单之美(二)

    原文链接:linux简单之美(二) 我们在前一章中看到了如何仅仅用syscall做一些简单的事,现在我们看能不能直接调用C标准库中的函数快速做一些"复杂"的事: section . ...

  6. Linux内核启动代码分析二之开发板相关驱动程序加载分析

    Linux内核启动代码分析二之开发板相关驱动程序加载分析 1 从linux开始启动的函数start_kernel开始分析,该函数位于linux-2.6.22/init/main.c  start_ke ...

  7. Linux学习总结(十二)—— CentOS用户管理:创建用户、修改用户、修改密码、密码有效期、禁用账户、解锁账户、删除用户、查看所有用户信息

    文章首发于Linux学习总结(十二)-- CentOS用户管理,请尊重原创保留原文链接. 创建用户 useradd -g webadmin -d /home/zhangsan zhangsan pas ...

  8. Linux时间子系统之(二):软件架构

    专题文档汇总目录 Notes:从框架上讲解了时间子系统,从底向上包括CPU Local TImer.Global Counter.Clock Souce/Clock Events模块管理.Tick D ...

  9. Linux集群架构(二)

    Linux集群架构(二) 目录 八.LVS DR模式搭建 九.keepalived + LVS 十.扩展 八.LVS DR模式搭建 1.实验环境: 四台机器: client: 10.0.1.50 Di ...

随机推荐

  1. python3.6 实现AES加密的示例(pyCryptodome)

    当然我也是通过官方推荐,使用下面命令去下载安装的,pip就是好用...    pip install pycryptodome 撸码开始 废话不多说,直接上demo # from Crypto.Has ...

  2. Quartz实现JAVA定时任务的动态配置

    什么是动态配置定时任务? 首先说下这次主题,动态配置.没接触过定时任务的同学可以先看下此篇:JAVA定时任务实现的几种方式 定时任务实现方式千人千种,不过基础的无外乎 1.JDK 的Timer类 2. ...

  3. django-给外键关系传值,删除外键关系

    反查: 在表关系里 related_name = '反查name',自己不设置,django也会默认设置为class的小写名字+_set  , ex: book_set. 一对一关系赋值: class ...

  4. 原生态Vim使用快捷键

    我的第一篇博客,凌晨2点加班不想睡,随便写点.本人菜鸟一个,努力学习,争取成为大神.. 第一篇写点什么东西呢,我目前是搞运维的,俗话说"工欲善其事必先利其器",Vim作为最基本的工 ...

  5. 34.TokenInterceptor防止表单重复提交

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 由于某些原因,用户在进行类似表单提交的操作后,以为表单未被提交,会进行多次的 ...

  6. delphi使用 DockForm DesignEditors F2613 Unit 'DockForm' not found

    DockForm [dcc32 Fatal Error] ToolsAPI.pas(18): F2613 Unit 'DockForm' not found. 这样解决了XE7. http://doc ...

  7. MySQL GTID (四)

    七. GTID的限制以及解决方案 7.1 事务中混合多个存储引擎,会产生多个GTID. 当使用GTID,在同一个事务中,更新包括了非事务引擎(MyISAM)和事务引擎(InnoDB)表的操作,就会导致 ...

  8. //todo 的用处

    在代码中添加 //todo 以后要做的事 可以暂时打上标记,以后再来处理. 光有这个没什么用,关键是IDE要支持,比如VS2017,只要按下 ctrl+w,t 就可以在输出窗口中显示出所有 todo的 ...

  9. codeforces:Michael and Charging Stations分析和实现

    题目大意 迈克尔接下来n天里分别需要支付C[1], C[2], ... , C[n]费用,但是每次支付费用可以选择使用优惠或不使用优惠,每次使用价值X的优惠那么迈克尔所能使用的优惠余量将减少X并且当天 ...

  10. 10-SSH综合案例:前台用户模块:邮箱服务器配置

    之前发邮件是自己发到服务器还是?是自己搭建一个还是注册一个163啊?自己可以搭建一个邮箱的服务器然后去发送邮件.就是你必须得在这上面有了账户才能发,你也可以往网络上发.你的主机就是一台邮箱服务器了.你 ...