基于LFS制作Nginx服务器的Linux发行版.docx
- 文档编号:26773600
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:45
- 大小:545.56KB
基于LFS制作Nginx服务器的Linux发行版.docx
《基于LFS制作Nginx服务器的Linux发行版.docx》由会员分享,可在线阅读,更多相关《基于LFS制作Nginx服务器的Linux发行版.docx(45页珍藏版)》请在冰豆网上搜索。
基于LFS制作Nginx服务器的Linux发行版
《Linux操作系统》课程设计报告
题目:
基于LFS制作Nginx服务器的Linux发行版
完成日期:
2012年12月31日
目录
1.课程设计题目概述………………………………………………………………………………4
2.研究内容与目的4
3.研究方法5
4.研究报告6
4.1.1下载LFS和LiveCD……………………………………………………………………………………6
4.1.2新建虚拟主机…………………………………………………………………………………………6
4.1.3设置时区和语言…………………………………………………………………………………………6
4.1.4使用ssh连接LiveCD………………………………………………………………………………6
4.1.5检查宿主系统工具和版本号……………………………………………………………………7
4.1.6硬盘分区………………………………………………………………………………………………….7
4.1.7硬盘格式化………………………………………………………………………………………………7
4.1.8挂载分区…………………………………………………………………………………………………7
4.1.9查看挂在分区………………………………………………………………………………………….8
4.1.10配置环境………………………………………………………………………………………………….8
4.2.1交叉编译Binutils………………………………………………………………………………….9
4.2.2编译GCC…………………………………………………………………………………………………10
4.2.3Linux内核头件………………………………………………………………………………………10
4.2.4安装Gblic………………………………………………………………………………………………11
4.2.5调整工具链……………………………………………………………………………………………11
4.2.6编译Tcl…………………………………………………………………………………………………13
4.2.7编译Expect……………………………………………………………………………………………13
4.2.8编译DejaGUN……………………………………………………………………………………………13
4.2.9第二次编译GCC…………………………………………………………………………………………13
4.2.10第二次编译Binutils……………………………………………………………………………14
4.2.11编译工具…………………………………………………………………………………………………15
4.2.12编译VIM…………………………………………………………………………………………………21
4.3.1切换系统…………………………………………………………………………………………………22
4.3.2创建系统目录结构…………………………………………………………………………………23
4.3.3安装Linux内核头文件………………………………………………………………………25
4.3.4安装man-pages…………………………………………………………………………………….25
4.3.5安装Glibc………………………………………………………………………………………….26
4.3.6再次调整工具链……………………………………………………………………………………27
4.3.7安装Binutils和Gcc…………………………………………………………………………….28
4.3.8安装其他软件包…………………………………………………………………………………….29
4.3.9搭建Nginx服务器…………………………………………………………………………………31
4.4.1安装LFS-Bootscripts6.3……………………………………………………………………32
4.4.2配置脚本……………………………………………………………………………………………….32
4.4.3编译Linux内核………………………………………………………………………………….35
4.4.4配置GRUB引导系统………………………………………………………………………………37
4.4.5重启系统………………………………………………………………………………………………38
5.测试报告/实验报告39
6.课题研究结论40
7.总结41
1.课程设计题目概述
首先系统是基于LFS-LinuxfromSearch来编译制作的,需要从头编译Linux,在编译时我们实现安装时用户对网络的配置、指定root用户、选择硬盘和分区方式、选择时区、选择语言等;编译实现安装系统中自动安装Nginx,实现初始化完成相关配置,提供一个Web服务;编译实现安装中系统自动安装FTPServer,实现初始化完成相关配置,可以通过默认账户访问,直接修改Web服务的目录内容;系统安装完成后,可以通过ssh远程访问操作系统,可以通过Web方式默认访问默认网站,可以通过FTP方式访问网站目录。
将做好的系统制作成iso的镜像文件并刻录成光盘,这样就制作了属于个人的Linux操作系统发行版。
【关键词】LFS制作Linux发行版Nginx
2.研究内容与目的
LinuxFromScratch项目简称LFS,它提供具体的步骤、特定的补丁、必须的脚本,从而提供一个简便的创建Linux发行版的途径。
LFS并不是一个发行版,但是它可以作为制作初级发行版的良好练习,它指导你如何制作一个以Linux作为内核的操作系统。
这个操作系统的所有代码都来自于开源项目,通过编译这些源代码来组成一个实用的操作系统。
对于这样的一个系统,其中的每一个地方都是自己编译完成的,不仅可以查看它的源代码实现,而且还可以随意修改,形成一个你自己专属的操作系统版本。
一个完全属于你自己的,独一无二的操作系统,更重要的是,在构建这个系统的过程中,我们将会学到许多的知识。
制作Linux发行版的意义不在于机械地编译,在于让使用者理解编译参数的作用,理解补丁的作用,理解LFS附带的脚本的工作过程,从而达到脱离LFS、独立制作并完善发行版的目的。
在制作过程中我们需要搭建FTP服务器,需要搭建Nginx服务器,需要提供Web服务,需要实现使用ssh进行远程连接的功能,作为一个独立的操作系统它的基本功能都需要我们进行预先编译安装,比如需要安装浏览器、压缩软件和解压缩软件,虽然这些功能我们在使用Linux系统时是使用的命令,但是它的背后是需要软件的支持。
通过搭建这些服务器,编译安装一些软件,最终实现的是用户在安装我们的操作系统后系统自带安装有Nginx服务器、FTPServer服务器。
3.研究方法
3.1研究方法
实验法、文献研究法
3.2实验方法
在本地主机上安装虚拟机,加载LFS,使用ssh进行远程连接,然后编译安装。
3.3可行性分析
通过虚拟机软件,可以在一台物理计算机上模拟出二台或多台虚拟的计算机,这些虚拟机完全就像真正的计算机那样进行工作,可以安装操作系统、安装应用程序、访问网络资源等等。
在电脑上安装LFS是有风险的,操作失误有可能会破坏自己的系统,造成你电脑上的资料丢失。
使用虚拟机来安装LFS系统,就算是打算在真实的电脑上使用LFS系统。
LFS提供具体的安装步骤、特定的补丁、必须的脚本,从而提供一个简便的创建Linux发行版的途径。
下载LFS-LiveCD的镜像文件,在虚拟机中进行安装,这样不会对真实的系统造成损坏。
另外在这里我们需要考虑每次启动后都能恢复到之前做过的工作,即使出错也不至于从头开始编译,幸运的是在VMWare中有快照这个功能,在完成某一阶段后我们可以创建一个快照,如果后面的编译出错了我们可以从创建的快照的中恢复,方便找出错误的地方,更重要的是节省时间,待完成编译后,删除这些快照。
AnyToISO是一个镜像文件创建转换工具,能够创建CD/DVD/蓝光光盘,本地文件夹的镜像,支持将BIN,MDF,PDI,CDI,NRG,B5I,IMG,DAA,UIFCD/DVD-ROM等镜像文件转成我们都熟悉的ISO格式,还可以提取任何网上能找到的CD/DVD镜像文件.很多程序只能创建自身格式的镜像文件可以将这些格式的镜像转换成ISO格式,以便装载到Parallels/VMWare虚拟机或烧录它。
4.研究报告
制作过程
第一章:
准备阶段
4.1.1下载LFS和LiveCD
下载LFS网址为:
ftp:
//anduin.linuxfromscratch.org/LFS-LiveCD/lfslivecd-x86-6.3-r2160.iso
这里我选择的版本是lfslivecd-x86-6.3-r2160
4.1.2新建虚拟机
(1)选择Workstation为Workstation8
(2)选择Guestoperatingsystem为Linux,选择Version为OtherLinux2.6.xkernel
(3)输入Virtualmachinename为mylinux
(4)选择CPU为1个单核
(5)选择网络设置为Usenetworkaddresstranslation(NAT)
(6)选择IO类型为LSILogic(Recommended)
(8)选择硬盘设置为Createanewvirtualdisk
(9)选择硬盘类型为SCSI(recommended)
(10)设置硬盘大小为80G,不选择Allocatealldiskspacenow,设置保存硬盘文件名为mylinux_sda
(11)确认信息后选择镜像文件加载路径,然后启动虚拟机。
4.1.3设置时区和语言
(1)选择时区为Asia/Chongqing
(2)选择时钟为Localtime
(3)选择语言为Chinese(Simplifiled,UTF-8)
4.1.4使用ssh连接LiveCD
(1)启动ssh服务
root[~]#/etc/rc.d/init.d/sshdstart
(2)修改root的密码
root[~]#passwd
课程设计中出于方便的需要我的密码全设置为123456
(3)查看主机IP地址
root[~]#ifconfigeth0|grep‘inetaddr’
显示结果为:
inetaddr10.20.93.89Bcast:
10.20.93.255Mask:
255.255.255.0
(4)在Windows下使用ping命令测试本地主机与虚拟机之间的连接状况。
由于我使用的是校园网,随机分配到本地主机的IP地址为10.20.93.243,本地主机与虚拟机在同一个网段,所以不但能够连接成功,而且在虚拟机中还能够登录外网,这样的好处就是方便了我从网上下载安装penSSl、PCRE、Nginx。
(5)使用putty登录,HostName为10.20.93.89
4.1.5检查宿主系统工具和版本号
root[~]#wget_6.3.sh.txt-host_check.sh
root[~]#sourcehost_check.sh
4.1.6硬盘分区
将硬盘分四个区
第一个分区:
/boot分区,大小为1G,存放启动系统所需的文件。
第二个分区:
/root分区(根分区),大小为40G,存放系统的根目录。
第三个分区:
/use/src分区,大小为35G,存放源代码。
第四个分区:
/swap分区,大小为4G,操作系统的虚拟内存。
分区命令:
root[~]#fdisk-l
root[~]#fdisk/dev/sda
4.1.7硬盘格式化
前三个分区格式化成ext3格式,最后一个分区格式化成swap格式
root[~]#mke2fs-jv/dev/sda1
root[~]#mke2fs-jv/dev/sda2
root[~]#mke2fs-jv/dev/sda3
root[~]#mkswap/dev/sda4
4.1.8挂载分区
为了能够在系统上访问这些分区,需要挂载这些分区,挂载之前先创建一个目录/mnt/lfs,并且设置一个环境变量LFS=/mnt/lfs。
root[~]#mkdir/mnt/lfs
root[~]#exportLFS=/mnt/lfs
开始挂载分区
root[~]#mount-v-text3/dev/sda2$LFS
root[~]#mkdir-pv$LFS{/boot,/usr/src}
root[~]#mount-v-text3/dev/sda1$LFS/boot
root[~]#mount-v-text3/dev/sda3$LFS/usr/src
root[~]#/sbin/swapon-v/dev/sda4
4.1.9查看挂载分区
root[~]#df–h
4.1.10配置环境
将源代码从光盘拷贝到硬盘上,由于之前已经将硬盘挂载到了/mnt/lfs上面了,所以:
root[~]#mkdir-v$LFS/sources
root[~]#chmod-va+wt$LFS/sources
root[~]#cp/lfs-sources/*$LFS/sources/
编译正式系统之前,先编译一套工具,现在就创建好存放这些工具的目录:
root[~]#mkdir-v$LFS/tools
root[~]#ln-sv$LFS/tools/
创建一个用来完成编译工作的用户(同样设置密码为123456):
root[~]#groupaddlfs
root[~]#useradd-s/bin/bash-glfs-m-k/dev/nulllfs
root[~]#passwdlfs
root[~]#chown-vlfs$LFS/tools
root[~]#chown-vlfs$LFS/sources
root[~]#su-lfs
lfs[~]$
创建两个脚本来设置工作的环境变量,第一个~/.bash_profile是用户登时自动执行的,我们创建并编译这个文件为:
execenv-iHOME=$HOMETERM=$TERMPS1='\u:
\w\$'/bin/bash
set+h
umask022
LFS=/mnt/lfs
LC_ALL=POSIX
PATH=/tools/bin:
/bin:
/usr/bin
exportLFSLC_ALLPATH
W(W用来保存对环境变量的配置)
第二章:
构建临时工具
要构建一个操作系统,需要有一些工具,其中最重要的就是编译器。
gcc支持一种交叉编译的方法,即编译出和当前编译器所在环境不同的环境的目标代码,通过反复编译、逐步将构建出的目标代码和宿主系统环境分离开来。
4.2.1交叉编译Binutils
binutils包含了汇编器,连接器等工具。
gcc依赖于这些工具,在编译的时候就会对这些工具做检测。
编译过程如下:
lfs:
~$cd$LFS/sources
lfs:
/mnt/lfs/sources$tarxvfbinutils-2.17.tar.bz2
lfs:
/mnt/lfs/sources$mkdirbinutils-build
lfs:
/mnt/lfs/sources$cdbinutils-build
lfs:
/mnt/lfs/sources/binutils-build$CC="gcc-B/usr/bin/"../binutils-2.17/configure--prefix=/tools--disable-nls--disable-werror
lfs:
/mnt/lfs/sources/binutils-build$makeinstall
lfs:
/mnt/lfs/sources/binutils-build$make-Cldclean
lfs:
/mnt/lfs/sources/binutils-build$make-CldLIB_PATH=/tools/lib
lfs:
/mnt/lfs/sources/binutils-build$cp-vld/ld-new/tools/bin
4.2.2编译GCC
先将命令写入脚本,然后直接运行脚本来完成所有的编译。
lfs:
~$cat>build_gcc.sh<<"EOF"
>cd$LFS/sources
>tarxvfgcc-4.1.2.tar.bz2
>mkdirgcc-build
>cdgcc-build
>CC="gcc-B/usr/bin/"../gcc-4.1.2/configure--prefix=/tools
--with-local-prefix=/tools--disable-nls--enable-shared--enable-languages=c
>makebootstrap
>makeinstall
>ln-vsgcc/tools/bin/cc
>EOF
lfs:
~$sourcebuild_gcc.sh
4.2.3Linux内核头文件
lfs:
~$cat>build_linux_header.sh<<"EOF"
>cd$LFS/sources
>tarxvflinux-2.6.22.5.tar.bz2
>cdlinux-2.6.22.5
>makemrproper
>makeheaders_check
>makeINSTALL_HDR_PATH=destheaders_install
>cp-rvdest/include/*/tools/include
>EOF
lfs:
~$sourcebuild_linux_header.sh
4.2.4安装Gblic
lfs:
~$cat>build_glibc.sh<<"EOF"
>cd$LFS/sources
>tarxvfglibc-2.5.1.tar.bz2
>mkdirglibc-build
>cdglibc-build
>../glibc-2.5.1/configure--prefix=/tools--disable-profile--enable-add-ons
--enable-kernel=2.6.0--with-binutils=/tools/bin--without-gd
--with-headers=/tools/include--without-selinux
>make
>makecheck
>mkdir-v/tools/etc
>touch/tools/etc/ld.so.conf
>makeinstall
>EOF
lfs:
~$sourcebuild_glibc.sh
4.2.5调整工具链
现在,有了连接器,汇编器,GCC编译器,还有Glibc库,一个基本的C编译环境所需要的内容已经齐备了。
下面要做一些设置,让之后的编译都在我们创建的工具上进行。
首先需要调整的是第一个Binutils中的连接器,它需要重命名才能被找到和使用。
在进行备份之后,用调整后的连接器替换之前的,并且创建一个连接到/tools/$(gcc-dumpmachine)/bin下面:
lfs:
~$mv-v/tools/bin/{ld,ld-old}
lfs:
~$mv-v/tools/$(gcc-dumpmachine)/bin/{ld,ld-old}
lfs:
~$mv-v/tools/bin/{ld-new,ld}
lfs:
~$ln-sv/tools/bin/ld/tools/$(gcc-dumpmachine)/bin/ld
下面通过修改gcc的specs文件来调整gcc所使用的动态连接器。
lfs:
~$gcc-dumpspecs|sed's@^/lib/ld-linux.so.2@/tools&@g'>`dirname$(gcc-print-libgcc-file-name)`/specs
调整完成后需要进行一次测试,通过编译一个.c文件,然后分析生成的二进制文件来查看它所连接的库是否指向了我们的工具下。
lfs:
~$echo"main(){}">dummy.c
lfs:
~$ccdummy.c
lfs:
~$readelf-la.out|grep'/tools'
lfs:
~$rm-vdummy.ca.out
4.2.6编译Tcl
gcc和binutils的测试需要用到Tcl,为了之后的测试能够运行我们先要编译它:
lfs:
~$cat>build_tcl.sh<<"EOF"
>cd$LFS/sources
>tarxvftcl8.4.15-src.tar.gz
>cdtcl8.4.15/unix
>./configure--prefix=/tools
>make
>makeinstall
>makeinstall–private-headers
>ln-svtclsh8.4/tools/bin/tclsh
>EOF
lfs:
~$sourcebuild_tcl.sh
4.2.7编译Expect
expect提供了在脚本中和需要交互的程序进行对话的功能。
lfs:
~$cat>build_expect.sh<<"EOF"
>cd$LFS/sources
>tarxvfexpect-5.43.0.tar.gz
>cdexpect-5.43
>patch-Np1-i../expect-5.43.0-spawn-1.patch
>cpconfigure{,.bak}
>sed's:
/usr/local/bin:
/bin:
'configure.bak>configure
>./configure--prefix=/tools-with-tcl=/tools/lib--with-tclinclude=/too
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 LFS 制作 Nginx 服务器 Linux 发行