Linux学习40 运维必备技能-Linux软件包管理yum企业实战
一、yum其它功能
1、如何使用光盘当作本地yum仓库
a、挂载光盘至某目录,例如/media/cdrom
# mount -r -t iso9660 /dev/cdrom /media/cdrom
b、创建配置文件
[CentOS7]
name=
baseurl=
gpgcheck=
enabled=
2、常用的命令选项
--nogpgcheck:禁止进行gpg check
-y: 自动回答为"yes":
-q:静默模式,相当于不打印信息到屏幕
--disablerepo=repoidglob :表示临时禁用此次指定的某个repo或这一类repo
--enablerepo=repoidglob:临时启用此处指定的repo
--noplugins:禁用所有插件
3、yum的repo配置文件中可用的变量:
$releasever: 当前OS的发行版的主版本号
$arch:平台类型
$basearch:基础平台
$YUM0-$-YUM9
a、一般的链接会是这样
标准的链接可以这样写:
http://mirrors.magedu.com/centos/$releasever/$basearch/os
4、创建yum仓库
a、首先我们需要安装创建yum仓库的命令 createrepo
b、然后我们将我们镜像中的rpm包复制到 /application/yum/Packages中
c、接下来我们开始创建
[root@localhost Packages]# createrepo /application/yum/Packages/
d、创建过后我们可以在Packages目录下看到一个repodata目录
[root@localhost Packages]# ls -ld /application/yum/Packages/repodata/* -rw-r--r-- 1 root root 1353408 Feb 26 19:34 /application/yum/Packages/repodata/018e9bc732f76918da880c1eab0daa54b576aaca01147c9bf5bfce20600f0b0a-other.sqlite.bz2 -rw-r--r-- 1 root root 3263267 Feb 26 19:34 /application/yum/Packages/repodata/140cdb441118a5219bc6ce2069f9b22a30e017bf73aa9df97140cbc85bc2cd22-primary.sqlite.bz2 -rw-r--r-- 1 root root 3246286 Feb 26 19:34 /application/yum/Packages/repodata/3787f2b5b084c56f39ca7cfaeb99f556c39862c13e689adc2ff7d20a48ea3568-filelists.sqlite.bz2 -rw-r--r-- 1 root root 1548896 Feb 26 19:34 /application/yum/Packages/repodata/5c668718ef4e4149c6df072702605363ddd4407c94838b41c5daefff7bb871ae-primary.xml.gz #主元数据数据,包括每一个包的包名,版本号,依赖关系 -rw-r--r-- 1 root root 987503 Feb 26 19:34 /application/yum/Packages/repodata/64148ea1f1a720283b6ceb9db49bd01491903a336fc864f7e038b7a46ff55b6b-other.xml.gz -rw-r--r-- 1 root root 3194578 Feb 26 19:34 /application/yum/Packages/repodata/d85ec63d569619a208145d8f93a7cc459f91de04bc0e556d00717310e78ec4ca-filelists.xml.gz #每一个包都会生成多少文件 -rw-r--r-- 1 root root 3008 Feb 26 19:34 /application/yum/Packages/repodata/repomd.xml #存放了前面几个文件的校验码
e、然后我们编辑/etc/yum.repos.d/local.repo文件,将baseurl路径指向repodata所在的路径即可
[root@localhost yum.repos.d]# cat /etc/yum.repos.d/local.repo [base-local] name=CentOS 7 Release 7 baseurl=file:///application/yum/Packages enable=1 gpgcheck=0 [root@localhost yum.repos.d]# yum repolist Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile repo id repo name status base-local CentOS 7 Release 7 3,971 repolist: 3,971
注意,此处的repodata文件夹不是说非要在 /application/yum/Packages 路径下,可以将repodata文件夹移动至任何目录,我们在配置baseurl的时候只要配置到repodata所在目录就可以使用我们的仓库了
二、程序包编译安装
1、testapp-VERSION-release.src.rpm #这种格式的rpm包是rpm包但是其中的源代码是没有经过编译的,我们需要经过编译后才能进行使用。安装后使用rpm包制作命令rpmbuild命令制作成二进制格式的rpm包,而后再安装;
2、源代码的组织格式
a、多文件:文件中的代码之间,很可能存在跨文件依赖关系。
b、编译过程
源代码 --> 预处理 --> 编译(gcc) --> 汇编 --> 链接 --> 执行
c、项目管理器(项目打包构建组织管理工具)他们并不是编译器,而是项目管理工具而已
C、C++: make(configure --> Makefile.in --> makefile)
(1)、make并不是编译器,他只是一个项目管理工具,他是调用gcc来完成编译的。make针对每一个源代码都有一个专用的配置文件,在make时他们依据这个配置文件做出决定,比如调用哪个预处理器如何预处理。调用哪个编译器如何进行编译,先编译哪个文件后编译哪个文件等,而这个文件就叫 makefile。
(2)、那么我们的二进制文件和库文件要装到哪儿去呢?因此makefile文件并不是写死的,它是由 Makefile.in这个文件生成的,可以认为这是makefile文件的模板,我们基于这个模板可以生成makefile文件,他可以根据根据用户的需要来由模板文件生成makefile,他允许用户在make之前指明要装在哪儿,二进制文件装在哪儿,库文件装在哪儿等一切路径,以及编译的程序如果有20个功能,我们要启用哪些功能我们都可以指明,当指明以后他就利用这个模板套用你所指明的选项来生成这个makefile文件。那么谁来帮你把Makefile.in这个模板最终生成可用的 makefile文件呢?我们还有一个工具就叫configure,也就是configure脚本,他允许用户传递给这个脚本一堆的选项用来指明程序包的编译参数,启用特性,还有安装路径等等,都指明完后一回车,这个脚本能结合Makefile.in文件来生成makefile
(3)、一般 configure脚本和Makefile.in文件都是源码中自带的,但是有时候有可能其不会自带,这时候就需要我们自动去生成。其实严格意义上来说这两个文件并不是自带的而是项目构建工具生成的,这个项目构建工具就是:
autoconf(用于生成configure文件)
automake(用于生成Makefile.in文件)
我们autoconf不可能生成固定内容的configure,因为每个程序的功能是不一样的,因此我们autoconf需要结合一个额外的配置文件去生成config脚本,这个配置文件用于告诉autoconf我当前的代码大概有哪些功能,是用来做特性使用的。而后autoconf才会生成configure脚本
同样的automake要生成automake.in我们程序员必须要告诉automake我们有多少个程序文件,程序文件的依赖关系是什么,以及我们要使用哪一种特定版本编译器进行编译。而后automake才会结合对应配置文件生成Makefile.in。当然,这个配置文件不用管他是什么。
3、C语言源代码编译安装有以下步骤
a、./configure
(1)、通过选项传递参数,指定启用特性,安装路径等;执行时会参考用户的指定以及Makefile.in文件生成makefile
(2)、检查依赖到的外部环境
b、make
(1)、根据makefile文件,构建应用程序
c、make install
(1)、这个其实是一些脚本,这个脚本把构建的二进制应用程序的二进制文件扔到所指定的二进制路径下去,库文件扔到所指定的库文件目录下去,这一步其实我们不做使用copy命令也是完全可以实现的,他相当于使用了install命令。
4、建议:安装前查看INSTALL或者README文件
5、开源程序源代码的获取:
(1)、官方自建站点
apache.org(ASF)
mariadb.org
...
(2)、代码托管:
SourceForge
Github.com
code.google.com
6、如何编译c源代码
a、编译器c/c++ :gcc(GNU C Complier)
b、前提:提供开发工具及开发环境
(1)、开发工具:make,gcc等
(2)、开发环境:开发库,头文件。
glibc:标准库
(3)、通过“包组”提供开发组件
CentOS 6:"Development Tools","Server Platform Development"
7、编译过程
a、第一步:configure脚本
(1)、选项:指定安装位置,指定启用的特性。
--help:获取其支持使用的选项
选项分类:
1)、安装路径设定(Installation directories):
--prefix=/PATH/TO/SOMEWHERE:指定默认安装位置,默认为/usr/local/
--sysconfdir=/PATH/TO/SOMEWHERE:配置文件安装位置
2)、系统类型(System types)
3)、可选特性(Optional Features)
--disable-FEATURE :我们在安装时有可能有些特性是默认启用的,如果我们安装时默认不想启用就使用此参数
--enable-FEATURE[=ARG]:默认有些没有启用的特性我们想启用的话就使用此参数。
4)、可选程序包(Optional Packages)
--with-PACKAGE[=ARG] #定义依赖关系包位置
--without-PACKAGE #禁用依赖关系包
(2)、现在我们下载一个httpd文件源码包进行编译安装
[root@localhost bianyi]# ls httpd-2.2.29.tar.bz2 [root@localhost bianyi]# tar -jxf httpd-2.2.29.tar.bz2 [root@localhost bianyi]# ls httpd-2.2.29 httpd-2.2.29.tar.bz2 [root@localhost bianyi]# ls -lhtr httpd-2.2.29 total 1.2M -rw-r--r-- 1 500 500 403 Nov 22 2004 emacs-style -rw-r--r-- 1 500 500 15K Nov 22 2004 ABOUT_APACHE -rw-r--r-- 1 500 500 10K Mar 14 2005 ROADMAP -rw-r--r-- 1 500 500 8.0K Oct 18 2005 VERSIONING -rw-r--r-- 1 500 500 5.1K Nov 29 2005 LAYOUT -rw-r--r-- 1 500 500 2.9K Dec 8 2006 InstallBin.dsp -rw-r--r-- 1 500 500 5.9K Jan 10 2007 README -rw-r--r-- 1 500 500 17K Jan 12 2007 libhttpd.dsp -rw-r--r-- 1 500 500 2.6K Aug 24 2007 BuildAll.dsp -rw-r--r-- 1 500 500 29K Jan 19 2008 LICENSE -rw-r--r-- 1 500 500 4.1K Jun 12 2008 httpd.dsp -rw-r--r-- 1 500 500 8.6K Nov 26 2008 Makefile.in -rw-r--r-- 1 500 500 2.7K Jul 30 2009 BuildBin.dsp -rw-r--r-- 1 500 500 5.3K Oct 14 2009 README.platforms -rw-r--r-- 1 500 500 56K Oct 6 2010 Apache.dsw -rw-r--r-- 1 500 500 2.5K Dec 21 2010 README-win32.txt -rw-r--r-- 1 500 500 28K May 7 2011 libhttpd.mak -rw-r--r-- 1 500 500 8.8K May 7 2011 httpd.mak -rw-r--r-- 1 500 500 30K May 7 2011 libhttpd.dep -rw-r--r-- 1 500 500 1.3K May 7 2011 httpd.dep -rw-r--r-- 1 500 500 4.3K Jan 18 2012 INSTALL -rw-r--r-- 1 500 500 12K Feb 28 2012 config.layout -rw-r--r-- 1 500 500 13K Mar 16 2012 NWGNUmakefile -rw-r--r-- 1 500 500 19K Jul 6 2012 acinclude.m4 -rwxr-xr-x 1 500 500 5.7K Sep 19 2012 buildconf -rw-r--r-- 1 500 500 25K Jun 28 2013 configure.in -rw-r--r-- 1 500 500 828 Jan 3 2014 NOTICE -rw-r--r-- 1 500 500 34K Jan 20 2014 Makefile.win -rw-r--r-- 1 500 500 134K Aug 22 2014 CHANGES drwxr-xr-x 4 500 500 4.0K Aug 23 2014 support drwxr-xr-x 2 500 500 248 Aug 23 2014 test drwxr-xr-x 20 500 500 325 Aug 23 2014 modules drwxr-xr-x 9 500 500 149 Aug 23 2014 os drwxr-xr-x 3 500 500 4.0K Aug 23 2014 server drwxr-xr-x 5 500 500 64 Aug 23 2014 srclib drwxr-xr-x 9 500 500 124 Aug 23 2014 docs drwxr-xr-x 2 500 500 4.0K Aug 23 2014 include drwxr-xr-x 6 500 500 4.0K Aug 23 2014 build -rw-r--r-- 1 500 500 12K Aug 23 2014 httpd.spec -rwxr-xr-x 1 500 500 560K Aug 23 2014 configure
(3)、解压源码包后我们可以查看INSTALL文件内容,会有相应的安装教程。还有我们可以使用configure --help命令进行查看相应的选项。此时我们来开始编译安装httpd
1)、首先我们最好安装开发工具包组 "Development Tools"
[root@localhost httpd-2.2.29]# yum groupinstall -y "Development Tools"
2)、然后我们开始执行configure脚本生成Makefile文件
[root@localhost httpd-2.2.29]# ./configure --prefix=/application/apache2 --sysconfdir=/etc/httpd2 #将主目录安装至/application/apache2下,将配置文件安装至/etc/httpd2文件夹下
3)、然后我们执行make命令开始进行编译
[root@localhost httpd-2.2.29]# ls -lstr |grep -i make 12 -rw-r--r-- 1 500 500 8739 Nov 26 2008 Makefile.in 16 -rw-r--r-- 1 500 500 12894 Mar 16 2012 NWGNUmakefile 36 -rw-r--r-- 1 500 500 34759 Jan 20 2014 Makefile.win 12 -rw-r--r-- 1 root root 8979 Feb 27 02:16 Makefile [root@localhost httpd-2.2.29]# make
可以看到我们目录下已经生成了相应的各个文件
[root@localhost httpd-2.2.29]# ls -lhtr total 1.3M -rw-r--r-- 1 500 500 403 Nov 22 2004 emacs-style -rw-r--r-- 1 500 500 15K Nov 22 2004 ABOUT_APACHE -rw-r--r-- 1 500 500 10K Mar 14 2005 ROADMAP -rw-r--r-- 1 500 500 8.0K Oct 18 2005 VERSIONING -rw-r--r-- 1 500 500 5.1K Nov 29 2005 LAYOUT -rw-r--r-- 1 500 500 2.9K Dec 8 2006 InstallBin.dsp -rw-r--r-- 1 500 500 5.9K Jan 10 2007 README -rw-r--r-- 1 500 500 17K Jan 12 2007 libhttpd.dsp -rw-r--r-- 1 500 500 2.6K Aug 24 2007 BuildAll.dsp -rw-r--r-- 1 500 500 29K Jan 19 2008 LICENSE -rw-r--r-- 1 500 500 4.1K Jun 12 2008 httpd.dsp -rw-r--r-- 1 500 500 8.6K Nov 26 2008 Makefile.in -rw-r--r-- 1 500 500 2.7K Jul 30 2009 BuildBin.dsp -rw-r--r-- 1 500 500 5.3K Oct 14 2009 README.platforms -rw-r--r-- 1 500 500 56K Oct 6 2010 Apache.dsw -rw-r--r-- 1 500 500 2.5K Dec 21 2010 README-win32.txt -rw-r--r-- 1 500 500 28K May 7 2011 libhttpd.mak -rw-r--r-- 1 500 500 8.8K May 7 2011 httpd.mak -rw-r--r-- 1 500 500 30K May 7 2011 libhttpd.dep -rw-r--r-- 1 500 500 1.3K May 7 2011 httpd.dep -rw-r--r-- 1 500 500 4.3K Jan 18 2012 INSTALL -rw-r--r-- 1 500 500 12K Feb 28 2012 config.layout -rw-r--r-- 1 500 500 13K Mar 16 2012 NWGNUmakefile -rw-r--r-- 1 500 500 19K Jul 6 2012 acinclude.m4 -rwxr-xr-x 1 500 500 5.7K Sep 19 2012 buildconf -rw-r--r-- 1 500 500 25K Jun 28 2013 configure.in -rw-r--r-- 1 500 500 828 Jan 3 2014 NOTICE -rw-r--r-- 1 500 500 34K Jan 20 2014 Makefile.win -rw-r--r-- 1 500 500 134K Aug 22 2014 CHANGES drwxr-xr-x 9 500 500 124 Aug 23 2014 docs -rw-r--r-- 1 500 500 12K Aug 23 2014 httpd.spec -rwxr-xr-x 1 500 500 560K Aug 23 2014 configure -rwxr-xr-x 1 root root 121 Feb 27 02:16 config.nice -rw-r--r-- 1 root root 3.8K Feb 27 02:16 modules.c -rwxr-xr-x 1 root root 41K Feb 27 02:16 config.status -rw-r--r-- 1 root root 8.8K Feb 27 02:16 Makefile drwxr-xr-x 20 500 500 4.0K Feb 27 02:16 modules drwxr-xr-x 5 500 500 93 Feb 27 02:16 srclib drwxr-xr-x 9 500 500 178 Feb 27 02:16 os drwxr-xr-x 2 500 500 277 Feb 27 02:16 test drwxr-xr-x 6 500 500 4.0K Feb 27 02:16 build drwxr-xr-x 2 500 500 4.0K Feb 27 02:16 include -rw-r--r-- 1 root root 54K Feb 27 02:16 config.log drwxr-xr-x 4 500 500 4.0K Feb 27 02:20 server drwxr-xr-x 5 500 500 4.0K Feb 27 02:21 support -rw-r--r-- 1 root root 21K Feb 27 02:21 modules.o -rw-r--r-- 1 root root 312 Feb 27 02:21 modules.lo -rw-r--r-- 1 root root 5.6K Feb 27 02:21 buildmark.o -rwxr-xr-x 1 root root 6.6K Feb 27 02:21 httpd
我们查看/application目录下可以看到还没有相应apache2文件夹
[root@localhost httpd-2.2.29]# ls /application/ bianyi script test1 yum
4)、然后我们开始执行make install命令,可以看到相应的目录文件已经生成
[root@localhost httpd-2.2.29]# make install [root@localhost httpd-2.2.29]# ls /application/apache2/ bin build cgi-bin error htdocs icons include lib logs man manual modules [root@localhost httpd-2.2.29]# ls -ld /etc/httpd2/ drwxr-xr-x 4 root root 84 Feb 27 02:25 /etc/httpd2/
5)、然后我们尝试启动httpd并查看相应服务
[root@localhost /]# /application/apache2/bin/apachectl start httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName [root@localhost /]# netstat -anpt|grep 80 tcp6 0 0 :::80 :::* LISTEN 1145/httpd
(4)、安装后的配置
1)、导出二进制程序目录至PATH环境变量中:
编辑文件 /etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
2)、导出库文件路径
编辑/etc/ld.so.conf.d/NAME.conf
添加新的库文件所在目录至此文件中
让系统重新生成缓存:
ldconfig [-v]
3)、导出头文件,基于链接的方式实现即可
ln -sv
4)、导出帮助手册
编辑/etc/man.config文件(centos7为/etc/man_db.conf)
添加一条MANPATH参数并指定新路径即可
[root@localhost /]# cat /etc/man_db.conf |grep apach MANDATORY_MANPATH /application/apache2/man
8、练习
a、yum的配置和使用,包括yum repository的创建
b、编译安装apache2.2,启动此服务