Linux程序包管理

API:Application Programming Interface
    POSIX:Portable OS
程序源代码-->预处理-->编译-->汇编
    静态编译:
    共享编译:.so

ABI:Application Binary Interface
    Windows与linux不兼容
    库级别的虚拟化:
        liunx:WINE
        Windows:Cywin
静态和动态链接
    链接主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能
    够正确地衔接,分为静态链接和动态链接
    静态链接
        把程序对应的依赖库复制一份到包
        libxxx.a
        嵌入程序包
        升级难,需重新编译
        占用较多空间,迁移容易
    动态链接
        只把依赖加做一个动态链接
        libxxx.so
        连接指向
        占用较少空间,升级方便
系统级开发:
    C
    C++
应用级开发:
    java
    Python
    php
二进制应用程序包的组成部分:
    二进制文件、库文件、配置文件、帮助文件

    程序包管理器:
        debian:deb,dpt,dpkg包管理器
        redhat:rpm,rpm
            rpm:Redhat Package Manager
                RPM is Package Manager
        Gentoo
        Archlinux

    file命令:查看文件类型

    开放源码:就是程序代码,写给人类看的程序语言,但机器并不认识,所以无法执行;
    编译程序:将程序代码转译为机器看得懂的语言,就类似翻译者的角色;
    可执行文件:经过编译程序变成二进制程序后,机器看的懂所以可以执行的文件;
    函式库:就类似子程序的角色,可以被呼叫来执行的一段功能函数;

    安装gcc等软件开发工具:
        yum groupinstall 'Development Tools'

    编译安装步骤:
        解压:tar
        ./configure
        make clean      非必要步骤
        make
        make install    安装到预定的目录中

    ldconfig -p:列出目前有的所有函式库资料内容(在/etc/ld.so.cache内的资料!)
        ldconfig [-f conf] [-C cache]
            /etc/ld.so.conf
            /etc/ld.co.cache

    ldd:判断某个可执行的binary文件还有什么动态函式库

        ldd [-vdr] [filename]
            -v:列出所有内容信息;
            -d:重新将资料有遗失的link点绣出来;
            -r:将ELF有关的错误内容绣出来;

    md5sum/sha1sum/sha256sum [-bct] filename
    md5sum/sha1sum/sha256sum [--status|--warn] --check filename
        -b:使用binary的读档方式,默认为Windows/DOS文件型态的读取方式;
        -c:校验文件指纹;
        -t:以文字型态来读取文件指纹;
包命名
    源代码:name-VERSION.tar.gz
        VERSION:major.minor.release
    rpm包命名方式:
        name-VERSION-release.ARCH.rpm
            VERSION:major.minor.release
            ARCH:release.os.arch
            release.arch:
                release:release.OS
            常见的arch:
                x86:i386,i486,i586,i686
                x86_64:x64,x86_64,amd64
                powerpc:ppc
                跟平台无关:noarch
    包工具
        testapp:分类和拆包
            testapp-VERSION-ARCH.rpm:主包
            testapp-devel-VERSION-ARCH.rpm:开发子包
            Application-utils-VERSION-ARHC.rpm 其它子包
            Application-libs-VERSION-ARHC.rpm 其它子包
        包之间:可能存在依赖关系,甚至循环依赖
            X,Y,Z
        解决依赖包管理工具:
            yum:rpm包管理器的前端工具;
            apt-get:deb包管理器前端工具;
            zypper:suse上的rpm前端管理工具;
            dnf:Fedora 22+ rpm包管理器前端管理工具;
    库文件
        查看二进制程序所依赖的库文件:
            ldd /path/to/BINARY_FILE
        管理及查看本机已经转载的库文件:
            ldconfig:
                -p:显示本机已经缓存的所有可用库文件及文件路径映射关系;

                配置文件为:/etc/ld.so.conf  /etc/ld.so.conf.d/*.conf
                缓存文件:/etc/ld.so.cache
        映射关系
            配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
            缓存文件:/etc/ld.so.cache

    程序包管理:
        功能:将编译好的应用程序的各组文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作;
        1、程序包文件的组成清单(每个包独有)
            RPM包内的文件清单
            RPM的元数据,如名称,版本,依赖性,描述等
            安装或卸载时运行的脚本
        2、数据库(公共)
            程序包名称及版本
            依赖关系
            功能说明
            安装生成的各文件的文件路径及校验码信息

    管理程序包的方式:
        使用包管理器:rpm
        使用前端工具:yum,dnf

    获取程序包的途径:
        1、系统发版的光盘或官方的服务器:
            CentOS镜像:
            https://opsx.alibaba.com/mirror
            http://mirrors.aliyun.com
            http://mirrors.163.com/
            http://mirrors.sohu.com/
        2、项目官方站点
        3、第三方组织:
            Fedora-EPEL
                Extra Packages for Enterprise Linux
            Rpmforge:RHEL推荐,包很全
            搜索引擎:
                http://pkgs.org
                http://rpmfind.net
                http://rpm.pbone.net
                https://sourceforge.net/
        4、自己制作
        建议:第三方包建议要检查其合法性,来源合法性,程序包的完整性

CentOS系统上rpm命令管理程序包:
    安装、卸载、升级、查询、校验、数据库维护

    安装:
        rpm {-i|--install} [install-options] PACKAGE_FILE ...
            rpm -ivh package_name
            -i:install的意思
            -v:verbose,查看更详细的安装信息画面
            -vv:更详细的安装信息
            -h:以#显示程序包管理执行进度:每个#表示2%的进度,以安装信息列显示安装进度

            rpm -ivh PACKAGE_FILE ...
                [install-options]
                    --test:测试安装,但不真正执行安装过程;dry run模式;
                    强制安装时的参数:
                    --nodeps:忽略依赖关系;
                    --replacepkgs:重新安装;重新安装某个已经安装过的软件!可使用这个选项来重复安装!
                    --replacefiles:如果在安装的过程当中出现了[某个文件已经被安装在你的系统上面]的信息,
                        又或许出现版本不合的讯息(confilcting files)时,可以使用这个参数来直接覆盖文件。
                    --nosignatue:不检查来源合法性;
                    --nodigest:不检查包完整性
                    --noscripts:不执行程序包脚本片段;
                        %pre:安装前脚本;   --nopre
                        %post:安装后脚本;    --nopost
                        %preun:卸载前脚本   --nopreun
                        %postun:卸载后脚本  --nopostun
    升级:
        -Uvh:如果没有安装过,系统将予以直接安装;如果有安装过旧版软件,则系统自动更新至新版;
        -Fvh:只有安装在linux系统内的软件才会被升级;
        rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
        rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
            upgrade:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则“安装”;
            freshen:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则不执行升级操作;

            rpm -Uvh PACKAGE_FILE ...
            rpm -FVH PACKAGE_FILE ...
            --oldpackage:降级;
            --force:强制升级;这个参数其实就是 --replacefiles 与 --replacepkgs的综合体;

        注意: 1、不要对内核做升级操作:linux支持多内核版本并存,因此,直接安装新版本内核;
              2、如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一配置文件并不会直接覆盖老版本的配置文件,
                 而把新版本的文件重命名(FILENAME,rpmnew)后保留;

    查询:
        rpm {-q|--query} [select-options] [query-options]
            rpm -qa
            rpm -q[lcdR] 已安装的软件名称
            rpm -qf 存在于系统上面的某个文件名
            rpm -qp[licdR] 未安装的某个文件名

            -q:仅查询,后面接的软件名称是否有安装;
            -qa:列出所有的,已经安装在本机Linux系统上面的所有软件名称;
            -qi:列出该软件的详细信息(information),包含开发商、版本与说明等;
            -ql:列出该软件所有的文件与目录所在完整文件名(list);
            -qc:列出该软件的所有配置文件(找出在/etc/底下的档名而已);
            -qd:列出该软件的所有说明文件(找出与man有关的文件而已);
            -qR:列出与该软件有关的相依软件所含的文件(Required的意思);
            -qf:由后面接的文件名,找出该文件属于哪一个已安装的软件;
            -q --scripts:列出是否含有安装后需要执行的脚本档,可用以debug喔!
            查询某个RPM文件内含有的信息:
            -qp[icdlR]:注意-qp后面接的所有参数以上面的说明一致。但用途仅在于找出某个RPM文件内的信息,而非已安装的软件信息!注意!

        [select-options]:
            -a:所有包
            -f:查询指定的文件由那个程序包安装生成
            -p /PARH/TO/PACKAGE_FILE:针对尚未安装的程序包文件做查询操作;
            --whatprovides CAPABILITY:查询指定的CAPABILITY由那个包所提供;
            --whatrequires CAPABILITY:查询指定的CAPABILITY由那个包所依赖;
        rpm2cpio 包文件|cpio –itv 预览包内文件
        rpm2cpio 包文件|cpio –id “*.conf” 释放包内文件
        [query-options]:
            --changelog:查询rpm包的changelog;
            -c:查询程序包的配置文件;
            -d:查询程序的文档;
            -i:information;
            -l:查看指定的程序包安装后生成的所有文件;
            --scripts:程序包自带的脚本片段;
            -R:查询指定的程序包所依赖的CAPABILITY;
            --provides:列出指定程序包所提供的CAPABILITY;

    用法:
        -qi PACKAGE,-qf FILE,-qc PACKAGE,-ql PACKAGE,-qd PACKAGE
        -qpi PACKAGE_FILE,-qpl PACKAGE_FILE,...
        -qa

    卸载:rpm -e:移除,注意移除的依赖问题
        rpm {-e|--erase} [--allmatches] [--justdb] [--nodeps] [--noscripts]
       [--notriggers] [--test] PACKAGE_NAME ...
       当包卸载时,对应的配置文件不会删除, 以FILENAME.rpmsave形式保留

    校验:
        rpm {-V|--verify} [select-options] [verify-options]

           S file Size differs
           M Mode differs (includes permissions and file type)
           5 digest (formerly MD5 sum) differs
           D Device major/minor number mismatch
           L readLink(2) path mismatch
           U User ownership differs
           G Group ownership differs
           T mTime differs
           P caPabilities differ

    包来源合法性验证及完整性验证:
        完整性检查:SHA256
        来源合法性验证:RSA

        公钥加密:
            对称加密:加密、解密使用同意密钥
            非对称加密:密钥是成对儿的,
                public key:公钥,公开
                secret key:私钥,不公开
        导入所需要公钥:
            rpm --import /PATH/FROM/GPG-PUBKEY-FILE
            Centos 7发行版光盘提供的密钥文件:RPM-GPG-KEY-CentOS-7
            rpm -K|checksig rpmfile 检查包的完整性和签名
            rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
            CentOS 7发行版光盘提供:RPM-GPG-KEY-CentOS-7
            rpm -qa “gpg-pubkey*”
    数据库重建:
    /var/lib/rpm/:目录,RPM文件被安装到系统上,该软件的信息就会被写入/var/lib/rpm/目录下的数据库文件中了
        rpm {--initdb|--rebuilddb}
            initdb:初始化
                如果事先不存在数据库,则新建之;否则,不执行任何操作;
            rebuilddb:重建数据库,重建已安装的包头的数据库索引目录(/var/lib/rpm/内的文件破损)
                无论当前存在与否,直接重新创建数据库;
        下面大括号的部分暂时未找到相关资料,建议暂时不要关注这部分内容
            {
            --prefix 新路径:

            验证与数字签名(Verify/signature)

            rpm -Va
            rpm -V 已安装的软件名称
            rpm -Vp 某个RPM文件的档名
            rpm -Vf 在系统上面的某个文件

            选项与参数:
            -V:后面加的是软件名称,若该软件所含的文件被更动过,才会列出来;
            -Va:列出目前系统上面所有可能被更动过的文件;
            -Vp:后面加的是文件名,列出该软件内可能被更动过的文件;
            -Vf:列出某个文件是否被更动过;
            }

CentOS:yum,dnf

YUM:yellow dog,yellowdog update modifier
    rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具
yum repository:yum repo
    存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录下:repodata):
    文件服务器:
        ftp://
        http://
        nfs://
        file:///

yum客户端:
    配置文件:
        /etc/yum.conf:为所有仓库提供公共配置
        /etc/yum.repos.d/*.repo:为仓库的指向提供配置
            列出目前yum server所使用的软件库:yum repolist all  显示结果中最右边有写enabled才是有激活的。
        修改软件库产生的问题与解决之道
            由于使用的软件库版本有新旧之分,yum会先下载软件库的清单到本机的/var/cache/yum里面去!
            注意:由于修改了网址却没有修改软件库名称(中括号内的文字),可能机会造成本机的列表与yum服务器的列表不同步,此时就会出现无法更新的问题了!

            此时,需要清除掉本机上面的旧数据即可!
                yum clean [packages|headers|all]
                    packages:将已下载的软件文件删除
                    headers :将下载的软件文件头删除
                    all     :将所有软件库数据都删除

    仓库的定义:
        [repositoryid]
        name=Some name for this repository
        baseurl=url://path/to/repository/
        enabled=[1|0]
        gpgcheck=[1|0]
        gpgkey=URL
        enablegroups={1|0}
        failovermethod={roundrobin|priority}
            默认为roundrobin即随机挑选
            priority:按顺序访问
        cost=
            开销数字,默认为1000
    yum仓库
        yum的repo配置文件中可用的变量:
            $releasever: 当前OS的发行版的主版本号
            $arch: 平台,i386,i486,i586,x86_64等
            $basearch:基础平台;i386, x86_64
            $YUM0-$YUM9:自定义变量
            http://mirrors.magedu.com/centos/$releaserver/$basearch/os
        示例:
            http://server/centos/$releasever/$basearch/
            http://server/centos/7/x86_64
            http://server/centos/6/i386

        yum源
            阿里云repo文件
            http://mirrors.aliyun.com/repo/
            CentOS系统的yum源
            阿里云:https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
            清华大学:https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/x86_64/
            EPEL的yum源
            阿里云:https://mirrors.aliyun.com/epel/$releasever/x86_64
            阿里巴巴开源软件
            https://opsx.alibaba.com/
        yum-config-manager
            生成172.16.0.1_cobbler_ks_mirror_CentOS-X-x86_64_.repo
            yum-config-manager --add-repo= http://172.16.0.1/cobbler/ks_mirror/7/
            yum-config-manager --disable “仓库名" 禁用仓库
            yum-config-manager --enable “仓库名” 启用仓库

yum命令的用法:
    yum [options] [command] [package ...]
    yum [option] [查询工作项目] [相关参数]

    * install package1 [package2] [...]
    * update [package1] [package2] [...]
    * update-to [package1] [package2] [...]
    * update-minimal [package1] [package2] [...]
    * check-update
    * upgrade [package1] [package2] [...]
    * upgrade-to [package1] [package2] [...]
    * distribution-synchronization [package1] [package2] [...]
    * remove | erase package1 [package2] [...]
    * autoremove [package1] [...]
    * list [...]
    * info [...]
    * provides | whatprovides feature1 [feature2] [...]
    * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
    * makecache [fast]
    * groups [...]
    * search string1 [string2] [...]
    * shell [filename]
    * resolvedep dep1 [dep2] [...]
       (maintained for legacy reasons only - use repoquery or yum provides)
    * localinstall rpmfile1 [rpmfile2] [...]
       (maintained for legacy reasons only - use install)
    * localupdate rpmfile1 [rpmfile2] [...]
       (maintained for legacy reasons only - use update)
    * reinstall package1 [package2] [...]
    * downgrade package1 [package2] [...]
    * deplist package1 [package2] [...]
    * repolist [all|enabled|disabled]
    * repoinfo [all|enabled|disabled]
    *  repository-packages     [package2] [...]
    * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
    * history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
    * load-transaction [txfile]
    * updateinfo [summary | list | info | remove-pkgs-ts | exclude-updates | exclude-all | check-running-ker‐
   nel]
    * fssnapshot [summary | list | have-space | create | delete]
    * fs [filters | refilter | refilter-cleanup | du]
    * check
    * help [command]

显示仓库列表:
    * repolist [all|enabled|disabled]
显示程序包:列出目前yum所管理的所有的软件名称与版本,有点类似rpm -qa;
    * list [...]
        yum list [all | glob_exp1] [glob_exp2] [...]
        yum list available [glob_exp1] [...]
        yum list updates [glob_exp1] [...]
        yum list installed [glob_exp1] [...]
安装程序包:
    * install package1 [package2] [...]
重新安装程序包:
    * reinstall package1 [package2] [...]
升级程序包:
    * update [package1] [package2] [...]
        若要整个系统都升级,就直接update即可
降级:
    * downgrade package1 [package2] [...]
检查可用升级:
    * check-update
卸载程序包:移除功能
    * remove | erase package1 [package2] [...]
查看程序包information   有点类似rpm -qai的执行结果;
    * info [...]
查看指定的特性(可以使某文件)是由哪个程序包所提供:从文件去搜寻软件!类似rpm -qf的功能;
    * provides | whatprovides feature1 [feature2] [...]
清理本地缓存:
    * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
构建缓存:
    * makecache [fast]
搜索:搜寻某个软件名称或者是描述(description)的重要关键字;
    * search string1 [string2] [...]
    以指定的关键字搜索程序包名及summary信息;
查看指定包所依赖的capabilities:
    * deplist package1 [package2] [...]
查看yum事务历史:
    * history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
        yum history undo 任务ID 撤销ID对应的任务
        yum history redo 任务ID 重做ID对应的任务
安装及升级本地程序包:
    * localinstall rpmfile1 [rpmfile2] [...]
       (maintained for legacy reasons only - use install)
    * localupdate rpmfile1 [rpmfile2] [...]
       (maintained for legacy reasons only - use update)

包组管理的相关命令:
    * groupinstall group1 [group2] [...]
    * groupupdate group1 [group2] [...]
    * grouplist [hidden] [groupwildcard] [...]
    * groupremove group1 [group2] [...]
    * groupinfo group1 [...]

如何使用光盘当做本地yum仓库:
    1、挂载光盘至某目录,例如/media/cdrom
        mount -r -t iso9660 /dev/cdrom /media/cdrom
    2、创建设置文件
    #注意[]中的名称不能有空格,如果有空格,使用yum repolist时会提示Bad id
    [CentOS7]
    name=
    baseurl=
    gpgcheck=
    enabled=

yum的命令行选项:
    --nogpgcheck:禁止进行gpg check;
    -y:自动回答为“yes”;当yum要等待用户输入时,这个选项可以自动提供yes的响应;
    -q:静默模式;
    --disablerepo=repoidglob:临时禁用此处指定的repo;
    --enablerepo=repoidglob:临时启用此处指定的repo;
    --noplugins:禁用所有插件;
    ######## --installlroot=/some/path:将该软件安装在/some/path而不使用默认路径

创建yum仓库:
    yum -y install createrepo
    用法:
    createrepo [options] 

DNF:
        DNF 介绍:新一代的RPM软件包管理器。DNF 发行日期是2015年5月11日,DNF 包管理器采用Python 编写,发行许可为GPL v2,首先出现在Fedora 18 发行版中。在 RHEL 8.0 版本正式取代了 YUM,DNF包管理器克服了YUM包管理器的一些瓶颈,提升了包括用户体验,内存占用,依赖分析,运行速度等
        安装所需软件包,依赖epel源
            wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/dnf-conf-0.6.4-2.sdl7.noarch.rpm
            wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64//dnf-0.6.4-2.sdl7.noarch.rpm
            wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/python-dnf-0.6.4-2.sdl7.noarch.rpm
            yum install python-dnf-0.6.4-2.sdl7.noarch.rpm dnf-0.6.4-2.sdl7.noarch.rpm dnf-conf-0.6.4-2.sdl7.noarch.rpm
        配置文件:/etc/dnf/dnf.conf
        仓库文件:/etc/yum.repos.d/ *.repo
        日志: /var/log/dnf.rpm.log
        帮助:man dnf
    dnf 用法:与yum一致
        dnf [options]  [...]
        dnf --version
        dnf repolist
        dnf clean all
        dnf makecache
        dnf list installed
        dnf list available
        dnf search nano
        dnf history
        dnf history undo 1

程序包的编译安装:
    testapp-VERSION-release.src.rpm --> 安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装;

    源代码——预处理——编译(编译器gcc)——汇编——链接——执行

    源代码组织格式:
        多文件:文件中的代码之间,很可能存在跨文件依赖关系;

        C、C++:make 项目管理器
            make(configure脚本 --> Makefile.in --> makefile)
        java:maven

    C语言源代码编译安装三步骤:
        ./configure
            a、通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及makefile.in文件生成makefile;
            b、检查依赖到的外部环境;
        make
            根据makefile文件,构建应用程序
        make install
            复制文件到相应路径

        开发工具:
            autoconf:生成configure脚本;
            automake:生成Makefile.in

        建议:安装前查看INSTALL,README

    开源程序源代码的获取:
        官方自建站点;
            apache.org(ASF:Apache Software Foundation))
            mariadb.org
        代码托管:
            SourceForge
            Github.com
            code.google.com

    c、c++编译器:gcc(GNU C Complier)

    编译C源代码:
        前提:提供开发工具及开发环境
            开发工具:make,gcc等
            开发环境:开发库,头文件
                glibc:标准库

            实现:通过“包组”提供开发组件
                CentOS6:Development tools  Server Platform Development
                CentOS7:Development tools
        生产实践:(基于最小化安装的系统)
            yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel vim lrzsz tree screen lsof tcpdump wget ntpdate net-tools iotop bc zip unzip nfs-utils
    编译安装:
        第一步:configure脚本
            选项:指定安装位置、指定启用的特性
            --help:获取其支持的选项
                选项分类:
                    安装路径设定:
                        --prefix=/path/to/somewhere:指定默认安装位置:默认为/usr/local
                        --sysconfdir=/path/to/somewhere:配置文件安装位置;
                System types:支持交叉编译

                Optional Features:可选特性
                      --disable-FEATURE
                      --enable-FEATURE[=ARG]

                Optional Packages:可选包
                    --with-PACKAGE[=ARG] 依赖包
                    --without-PACKAGE 禁用依赖关系
                注意:通常被编译操作依赖的程序包,需要安装此程序包的“开发”组件,其包名一般类似于name-devel-VERSION
        第二步:make
        第三步:make install

    安装后的配置:
        a、导出二进制程序目录至PATH环境变量中:
            编辑/etc/profile.d/NAME.sh
                export PATH=/PATH/TO/BIN:$PATH
        b、导出库文件路径
            编辑/etc/ld.so.conf.d/NAME.conf
                添加新的库文件所在目录至此文件中;
            让系统重新生成缓存:
                ldconfig [-v]
        c、导出头文件
            基于链接的方式实现:
                ln -sv
        d、导出帮助手册
            编辑/etc/man.config文件
                添加一个MANPATH
练习:
    1、yum的配置和使用:保罗yum repository的创建;
    2、编译安装apache2.4;启动此服务;
博客作业:程序包管理:rpm、yum、编译

yum实验:
1、关闭selinux和firewalld
1.1、关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
1.2、关闭firewalld
centos7:设置为开机禁止启动和关闭防火墙(重启的话不需要关闭也可以)
systemctl disable firewalld
systemctl stop firewalld
centos6:设置为开机禁止启动和关闭防火墙iptables(重启的话不需要关闭也可以)
chkconfig iptables off
service iptables stop
2、安装httpd
yum -y install httpd
浏览器可以访问即为成功
网站默认的存放目录为:
/var/www/html
根据阿里云等的源配置创建目录:mkdir -pv /var/www/html/centos/{6,7}/os/x86_64/
3、挂载centos7和centos6的光盘
注意在虚拟机中设置6和7的镜像后,如果无法识别,请执行以下命令
一般执行第一个中的host0即可,如果不行再执行host1,host2,执行完毕后,可以使用lsblk命令查看分区
echo '- - -' > /sys/class/scsi_host/host0/scan
echo '- - -' > /sys/class/scsi_host/host1/scan
echo '- - -' > /sys/class/scsi_host/host2/scan
光盘挂载
mount /dev/sr0 /var/www/html/centos/7/os/x86_64/
mount /dev/sr1 /var/www/html/centos/6/os/x86_64/

4、配置yum源
    centos7:
        备份/etc/yum.repos.d下的所有文件
            mkdir /etc/yum.repos.d/backup
            mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
        创建/etc/yum.repos.d/base.repo文件
            [Centos7]
            name=Centos7
            baseurl=http://192.168.41.151/centos/7/os/x86_64/
            gpgcheck=0
    centos6:
        备份/etc/yum.repos.d下的所有文件
            mkdir /etc/yum.repos.d/backup
            mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
        创建/etc/yum.repos.d/base.repo文件
            [base]
            name=base
            baseurl=http://192.168.41.151/centos/6/os/x86_64/
            gpgcheck=0

    配置完成后,使用yum repolist查看是否成功。

扩展:
    一、配置yum源
        1、yum源配置:以centos7为例
            编辑/etc/yum.repos.d/base.repo文件,注意baseurl的位置
            [Centos7]
            name=Centos7
            baseurl=file:///var/www/html/centos/7/os/x86_64/
                    http://192.168.41.151/centos/7/os/x86_64/
            gpgcheck=0
        2:创建一个文件
            vim /root/yumlise.txt
            内容如下:
                file:///var/www/html/centos/7/os/x86_64/
                http://192.168.41.151/centos/7/os/x86_64/
            修改/etc/yum.repos.d/base.repo文件,使用mirrorlist配置
                [Centos7]
                name=Centos7
                #baseurl=file:///var/www/html/centos/7/os/x86_64/
                                http://192.168.41.151/centos/7/os/x86_64/
                mirrorlist=file:///root/yumlise.txt
                gpgcheck=0

        注意:
            删除虚拟除了eth0、ens33、lo之外的等其他网卡
                yum remove libvirt-daemon
            类似pan0的需要设置虚拟机USB设备中与蓝牙有关的选项取消勾选
    二、强制卸载rpm还原方法
        rpm -e rpm --nodeps:忽略依赖关系,强制卸载
        虚拟机启动滚动条按ESC键一次,只能按一次,否则不能进入选择CD-ROM的界面
        选择cd-rom启动后,进入营救模式,输入1继续
        键入rpm命令看是否能否使用,继续查看光盘是否挂载没,如果没有挂载,请重新挂载
        重新安装rpm:需要使用--root参数指定root根目录的位置
            rpm -ivh /run/install/repo/Packages/rpm-4.11.3-35.el7.x86_64.rpm --root=/mnt/sysimage/