美文网首页Linux 课堂笔记
2018-05-28 课堂笔记

2018-05-28 课堂笔记

作者: chocolee911 | 来源:发表于2018-05-30 09:10 被阅读0次

    目录

    1. 概述
    2. 源码安装
    3. RPM 安装
    4. YUM 安装
    5. 使用 ISO 建立 YUN 库
    6. 搭建局域网 Repo

    1. 概述

    CentOS 下安装软件常用的方法有以下3种:

    • 源码包安装:
      过程:下载软件的源码,手动进行环境配置以及编译。
      缺点:过程繁琐,存在较多依赖性问题
      优点:最适配自己的主机环境。
    • rpm 包安装:
      过程:源码包的编译版本,不再需要繁琐的安装过程,根据 rpm 包名挑选适合自己环境的包进行安装即可
      缺点:依旧未解决依赖性问题,软件安装必须先手动下载 rpm 包
      优点:比起源码包安装,过程简单很多
    • YUM 安装:
      过程:本地建立依赖关系的数据库,并通过URL连接至互联网上的 rpm 库,安装时一次性解决依赖性关系
      缺点:暂无
      优点:简单、方便

    2. 源码安装

    最复杂的安装方式,可能会遇到各种各样的问题
    而最多会遇到的就是依赖性问题

    以下是安装源码的常规操作(以安装 apache2 为例)

    2.1 进入指定目录

    [root@choco-01 src]# cd /usr/local/src/ #约定俗成,下载到该目录

    2.2 下载源码包

    [root@choco-01 src]# pwd
    /usr/local/src
    [root@choco-01 src]# wget http://mirrors.shu.edu.cn/apache//httpd/httpd-2.4.33.tar.bz2
    --2018-05-29 16:35:00--  http://mirrors.shu.edu.cn/apache//httpd/httpd-2.4.33.tar.bz2
    正在解析主机 mirrors.shu.edu.cn (mirrors.shu.edu.cn)... 202.121.199.235
    正在连接 mirrors.shu.edu.cn (mirrors.shu.edu.cn)|202.121.199.235|:80... 已连接。
    已发出 HTTP 请求,正在等待回应... 200 OK
    长度:6934765 (6.6M) [application/x-bzip2]
    正在保存至: “httpd-2.4.33.tar.bz2”
    
    100%[=================================>] 6,934,765   1.75MB/s 用时 4.2s   
    
    2018-05-29 16:35:05 (1.58 MB/s) - 已保存 “httpd-2.4.33.tar.bz2”     [6934765/6934765])
    

    2.3 解压缩

    [root@choco-01 src]# ls
    httpd-2.4.33.tar.bz2
    [root@choco-01 src]# tar -xjvf httpd-2.4.33.tar.bz2 
    

    2.4 查看安装说明

    安装说明一般为 README 或 INSTALL

    [root@choco-01 src]# cd httpd-2.4.33
    [root@choco-01 httpd-2.4.33]# ls
    ABOUT_APACHE     CMakeLists.txt  INSTALL         NWGNUmakefile
    acinclude.m4     config.layout   InstallBin.dsp  os
    Apache-apr2.dsw  configure       LAYOUT          README
    Apache.dsw       configure.in    libhttpd.dep    README.cmake
    apache_probes.d  docs            libhttpd.dsp    README.platforms
    ap.d             emacs-style     libhttpd.mak    ROADMAP
    build            httpd.dep       LICENSE         server
    BuildAll.dsp     httpd.dsp       Makefile.in     srclib
    BuildBin.dsp     httpd.mak       Makefile.win    support
    buildconf        httpd.spec      modules         test
    CHANGES          include         NOTICE          VERSIONING
    
    
    ## 看一眼 INSTALL
    
    [root@choco-01 httpd-2.4.33]#  cat INSTALL 
    
      APACHE INSTALLATION OVERVIEW
    
      Quick Start - Unix
      ------------------
    
      For complete installation documentation, see [ht]docs/manual/install.html or
      http://httpd.apache.org/docs/2.4/install.html
    
         $ ./configure --prefix=PREFIX
         $ make
         $ make install
         $ PREFIX/bin/apachectl start
    

    2.5 检测环境并指定个别参数

    依赖性问题往往在此处出现
    ./configure 有相当多的用法,你不可能记得住,而./configure --help能够帮助到你
    检测结束后,会根据检测结果以及指定的选项,生成 MAKEFILE 文件,后续的编译以该文件为指导

    ps.由于源码安装往往会在屏幕上显示大量信息,有时难以找到报错或警告信息,可以在执行一条命令后echo $? 一下,$?变量代表了上一条命令的执行情况,返回0代表成功,其他则为失败。

    [root@choco-01 httpd-2.4.33]# ./configure --prefix=/usr/local/apache2
    checking for chosen layout... Apache
    checking for working mkdir -p... yes
    checking for grep that handles long lines and -e... /usr/bin/grep
    checking for egrep... /usr/bin/grep -E
    checking build system type... x86_64-pc-linux-gnu
    checking host system type... x86_64-pc-linux-gnu
    checking target system type... x86_64-pc-linux-gnu
    configure: 
    configure: Configuring Apache Portable Runtime library...
    configure: 
    checking for APR... yes
      setting CC to "gcc"
      setting CPP to "gcc -E"
      setting CFLAGS to "  -pthread"
      setting CPPFLAGS to " -DLINUX -D_REENTRANT -D_GNU_SOURCE"
      setting LDFLAGS to " "
    configure: 
    configure: Configuring Apache Portable Runtime Utility library...
    configure: 
    checking for APR-util... yes
    checking for gcc... gcc
    checking whether the C compiler works... no                                #缺gcc?那就装一下
    configure: error: in `/usr/local/src/httpd-2.4.33':
    configure: error: C compiler cannot create executables
    See `config.log' for more details
    
    
    [root@choco-01 httpd-2.4.33]# yum -y install gcc
    
    ## 装完后,再次检查环境
    [root@choco-01 httpd-2.4.33]# ./configure --prefix=/usr/local/apache2
    checking for chosen layout... Apache
    checking for working mkdir -p... yes
    checking for grep that handles long lines and -e... /usr/bin/grep
    checking for egrep... /usr/bin/grep -E
    checking build system type... x86_64-pc-linux-gnu
    checking host system type... x86_64-pc-linux-gnu
    checking target system type... x86_64-pc-linux-gnu
    configure: 
    configure: Configuring Apache Portable Runtime library...
    configure: 
    checking for APR... yes
      setting CC to "gcc"
      setting CPP to "gcc -E"
      setting CFLAGS to "  -pthread"
      setting CPPFLAGS to " -DLINUX -D_REENTRANT -D_GNU_SOURCE"
      setting LDFLAGS to " "
    configure: 
    configure: Configuring Apache Portable Runtime Utility library...
    configure: 
    checking for APR-util... yes
    checking for gcc... gcc
    checking whether the C compiler works... yes
    checking for C compiler default output file name... a.out
    checking for suffix of executables... 
    checking whether we are cross compiling... no
    checking for suffix of object files... o
    checking whether we are using the GNU C compiler... yes
    checking whether gcc accepts -g... yes
    checking for gcc option to accept ISO C89... none needed
    checking how to run the C preprocessor... gcc -E
    checking for gcc option to accept ISO C99... -std=gnu99
    checking for pcre-config... false
    configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/      # 又缺 libpcre 了?继续装吧。
    
    
    [root@choco-01 httpd-2.4.33]# yum -y install pcre-devel pcre
    
    ## 再次执行环境检查,终于不报错了,看一下 /usr/local/src/httpd-2.4.33 下是不是有了个 Makefile
    
    
    [root@choco-01 httpd-2.4.33]# ls | grep Makefile
    Makefile
    Makefile.in
    Makefile.win
    

    2.6 编译(make

    不铺代码了,太长了;
    make的时候也经常会报错,无非也就是说缺东少西的
    怎么办呢?一句话,缺啥补啥吧

    2.7 将可执行文件、配置文件等分发至正确的路径(make install

    make 完之后,所有文件都还在当前目录,还记的检测环境时指定的 /usr/local/apache2 目录吗?现在该目录还没被建立起来,必须make install 一下

    [root@choco-01 httpd-2.4.33]# ls /usr/local/apache2
    ls: 无法访问/usr/local/apache2: 没有那个文件或目录
    
    
    [root@choco-01 httpd-2.4.33]# make install
    Making install in srclib
    .
    .
    .
    
    
    
    [root@choco-01 httpd-2.4.33]# ls /usr/local/apache2
    bin    cgi-bin  error   icons    logs  manual
    build  conf     htdocs  include  man   modules
    

    2.8 后续

    此时,apahce2 相关的文件都跑到 /usr/local/apache2 这个目录中去了,但是该目录并不包含在 PATH 变量中,执行该程序的相关命令基本都得靠绝对路径。怎么办?
    ——改 PATH 或者在 PATH 包含的目录中做软链接吧。


    3. RPM 安装

    还记的源码安装过程中,./configure这一步吗?这就是在对环境进行检查以及配置
    源码安装过程中会根据主机的硬件、系统、软件配置,编译出最适合当前主机的程序,但如果每个程序都靠源码编辑,那不得累死?
    所以出现了 rpm 包,发行者提前根据系统的硬件、系统等条件编译好程序,并将编译好的程序打包发布

    3.1 RPM 包的命名规则

    既然 RPM 是根据不同的条件进行提前编译的,那么如何查看某个 RPM 到底是针对哪种环境的?
    ——当然就是 RPM 包的文件名咯!

    以 vim 为例
    vim-enhanced-7.4.160-1.el7.x86_64.rpm

    vim-enhanced 7.4.160 -1 el7 x86_64 .rpm
    软件名 版本号 发行次数 对应 OS 对应硬件平台 后缀

    3.2 rpm 命令解析

    • 安装:rpm -ivh vim-enhanced-7.4.160-1.el7.x86_64.rpm
    • 升级:rpm -Uvh vim-enhanced-7.4.160-1.el7.x86_64.rpm
    • 删除:rpm -e vim-enhanced
    • 查全部已安装的:rpm -qa
    • 查某个程序是否安装:rpm -q vim-enhanced
    • 查某个已安装程序的详细信息:rpm -qi vim-enhanced
    • 查某个已安装程序包含哪些文件:rpm -ql vim-enhanced
    • 查某个文件来自哪个包:rpm -qf /usr/bin/vim 也可以 rpm -qf `which vim`

    3.3 其他

    • 系统 ISO 镜像中的 Packages 包中包含了大量 rpm 包
    • rpm 安装程时,程序的相关文件会被按照 FHS 原则,放在各个目录下,而源码安装往往是放在一个文件夹下,因为容易删

    4. YUM

    相当于 rpm 包的仓库,还提供解决方案,一次性解决软件依赖性问题

    4.1 配置文档

    /etc/yum.repos.d/*:所有的仓库的访问方式都在该目录下

    4.2 命令

    • 安装:yum install [-y] vim
    • 罗列软件(相当于 rpm -qa):yum list
    • 搜索软件-1:yum search vim
    • 搜索软件-2(推荐,有颜色):yum list | grep vim
    • 卸载:yum remove [-y] vim #不推荐用 -y
    • 单个升级:yum update [-y] vim
    • 全部升级:yum update
    • 反查文件:yum provides "/*/vim"
    • 罗列套件:yum grouplist
    • 安装套件:yum groupinstall 'virtualization Host' # 名称有空格的套件需要加引号
    • 仅下载 rpm 包 - 1:yumdownloader vim #该程序需要单独安装
    • 仅下载 rpm 包 - 2:yum install --downloadonly --downloaddir=<dir_to_store> vim
    [root@choco-01 packages]#  yum install --downloadonly --downloaddir=/tmp nano
    已加载插件:fastestmirror
    Loading mirror speeds from cached hostfile
     * epel: mirrors.ustc.edu.cn
    正在解决依赖关系
    --> 正在检查事务
    ---> 软件包 nano.x86_64.0.2.3.1-10.el7 将被 安装
    --> 解决依赖关系完成
    
    依赖关系解决
    
    ===============================================================================    ==============================================================================
     Package                            架构                                 版本                                       源                                      大小
    ===============================================================================    ==============================================================================
    正在安装:
     nano                               x86_64                               2.3.1-10.el7                               base                                   440 k
    
    事务概要
    ===============================================================================    ==============================================================================
    安装  1 软件包
    
    总下载量:440 k
    安装大小:1.6 M
    Background downloading packages, then exiting:
    nano-2.3.1-10.el7.x86_64.rpm                                                                                                          | 440 kB  00:00:00     
    exiting because "Download Only" specified
    [root@choco-01 packages]# which nano
    /usr/bin/which: no nano in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
    [root@choco-01 packages]# ls /t
    ls: 无法访问/t: 没有那个文件或目录
    [root@choco-01 packages]# ls /tmp/
    nano-2.3.1-10.el7.x86_64.rpm                                             systemd-private-d383309a1de54c9ebb1a3239f711e60a-vmtoolsd.service-GOCCAx
    systemd-private-d383309a1de54c9ebb1a3239f711e60a-chronyd.service-cTeIlQ  yum_save_tx.2018-05-30.09-24.ehBdYd.yumtx
    systemd-private-d383309a1de54c9ebb1a3239f711e60a-vgauthd.service-1xucWb
    
    • 安装的同时留存 rpm 包:
    [root@choco-01 ~]# vim /etc/yum.conf 
    
    [main]
    cachedir=/var/cache/yum/$basearch/$releasever
    keepcache=1               # 将 keeptcache 设置为1
    ## 最终 rpm 包保留在 /var/cache/yum/x86_64/7/base/packages 中
    

    5. 更改 YUM 源

    其实就是改 /etc/yum.repo.d/ 下的文件

    5.1 删掉不要的

    rm -f /etc/yum.repos.d/*

    5.2 下载想要的

    cd /etc/yum.repos.d/
    wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
    或者
    curl -O http://mirrors.163.com/.help/CentOS7-Base-163.repo

    5.3 重建数据库

    yum clean all

    5.4 效果

    yum list


    6. 使用 ISO 建立 YUN 库

    没网咋办?别忘了 ISO 下的 Packages 目录下都是 RPM 包!

    6.1 挂载 ISO

    mount /dev/cdrom /mnt

    6.2 备份当前 repo 文件

    cp -r /etc/yum.repo.d /etc/yum.repo.d.bak
    rm -f /etc/yum.repos.d/*

    6.3 编辑新的 repo 文件(后缀必须为 .repo)

    vim /etc/yum.repos.d/dvd.repo

    [dvd]
    name=install dvd
    baseurl=file:///mnt
    enable=1
    gpcheck=0
    

    6.4 重新建立数据库

    yum clean all

    6.5 效果

    使用yum list


    7. 搭建局域网 Repo

    公司出口带宽有限?
    公司研发没法上外网?
    自行搭建 YUM 源服务吧

    步骤

    1. 创建目录、拷贝 rpm 包
    2. 创建 repository
    3. 安装 nginx
    4. 客户端上配置 repo 文件
    5. 从知名镜像站同步 rpm 包
    6. 后续

    7.1 创建目录、拷贝rpm包

    7.1.1 创建一个目录,用于存放 rpm 包
    mkdir <repo_dir>

    [root@choco-01 /]# mkdir /YUM ; ll | grep YUM
    drwxr-xr-x    2 root root    6 May 29 10:55 YUM
    

    7.1.2 放点 ISO 中的 rpm
    mount /dev/cdrom /mnt
    cp /mnt/Packages/a* <repo_dir>

    [root@choco-01 /]# mount /dev/cdrom /mnt/ ; ls /mnt/
    mount: /dev/sr0 is write-protected, mounting read-only
    CentOS_BuildTag  GPL       RPM-GPG-KEY-CentOS-7          images
    EFI              LiveOS    RPM-GPG-KEY-CentOS-Testing-7  isolinux
    EULA             Packages  TRANS.TBL                     repodata
    
    
    
    
    [root@choco-01 /]# cp /mnt/Packages/a*rpm /YUM/ ;  ls /YUM/
    abattis-cantarell-fonts-0.0.25-1.el7.noarch.rpm
    abrt-2.1.11-48.el7.centos.x86_64.rpm
    abrt-addon-ccpp-2.1.11-48.el7.centos.x86_64.rpm
    abrt-addon-kerneloops-2.1.11-48.el7.centos.x86_64.rpm
    abrt-addon-pstoreoops-2.1.11-48.el7.centos.x86_64.rpm
    abrt-addon-python-2.1.11-48.el7.centos.x86_64.rpm
    abrt-addon-vmcore-2.1.11-48.el7.centos.x86_64.rpm
    .
    .
    .
    

    7.2. 创建 repository

    **7.2.1 安装 createrepo **
    yum -y install createrepo

    [root@choco-01 yum.repos.d]# yum list | grep createrepo
    Failed to set locale, defaulting to C
    createrepo.noarch                        0.9.9-28.el7                  @base    
    createrepo_c.x86_64                      0.10.0-6.el7                  epel     
    createrepo_c-devel.x86_64                0.10.0-6.el7                  epel     
    createrepo_c-libs.x86_64                 0.10.0-6.el7                  epel     
    python-createrepo_c.x86_64               0.9.0-1.el7.centos            extras   
    python2-createrepo_c.x86_64              0.10.0-6.el7                  epe
    [root@choco-01 yum.repos.d]# yum install -y createrepo
    

    7.2.2 创建 repository
    createrepo <repo_dir> #在<repo_dir>中产生元数据

    [root@choco-01 yum.repos.d]# createrepo /YUM/
    Spawning worker 0 with 137 pkgs
    Workers Finished
    Saving Primary metadata
    Saving file lists metadata
    Saving other metadata
    Generating sqlite DBs
    Sqlite DBs complete
    [root@choco-01 yum.repos.d]# ll /YUM/  | grep repodata
    drwxr-xr-x 2 root root     4096 May 29 13:00 repodata
    

    7.2.3 仓库变更后,更新 repository
    如果 rpm 包有增加或减少,需要执行以下命令
    createrepo --update <repo_dir>

    7.3 安装nginx

    7.3.1 安装 nginx*
    yum -y install epel-release

    yum -y install nginx

    7.3.2 修改 nginx 配置文件 /etc/nginx/nginx.conf

        server {
            listen       80 default_server;
            listen       [::]:80 default_server;
            server_name  _;
            root         /data/yumdata;
    
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
    
            location / {
                    autoindex on;                      #这个必须有,为了能提供目录浏览
            }
    
            error_page 404 /404.html;
                location = /40x.html {
            }
    
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
            }
        }
    

    7.3.3 启动 nginx 服务
    systemctl start nginx

    7.3.4 iptables、DNS 等

    • 关闭或调整 iptables
      systemctl stop firewalld.service

    • 必要时将该服务器 IP 配上 DNS

    7.4 客户端上配置repo文件

    • 备份原有 repo 文件
    [root@choco-01 yum.repos.d]# pwd
    /etc/yum.repos.d
    [root@choco-01 yum.repos.d]# mkdir bak
    [root@choco-01 yum.repos.d]# ls
    CentOS-Base.repo       CentOS-Media.repo      bak
    CentOS-Base.repo.bak   CentOS-Sources.repo    epel-testing.repo
    CentOS-CR.repo         CentOS-Vault.repo      epel.repo
    CentOS-Debuginfo.repo  CentOS-fasttrack.repo
    [root@choco-01 yum.repos.d]# mv *.repo* bak ; ls
    bak
    
    • 新建 repo 文件
    [root@choco-01 yum.repos.d]# vim my.repo
    
    [my-repo]
    name=myrepo
    baseurl=http://192.168.1.101
    gpgcheck=0
    enabled=1
    

    7.5 从知名镜像站同步 rpm 包

    [root@choco-01 yum.repos.d]# rsync -av rsync://mirrors.ustc.edu.cn/centos/7/os/x86_64/Packages/ /YUM/


    7.6 后续

    同步后,往往需要进行 repo 的更新,所以可以将同步&更新,写入同一个脚本,并加入 crontab
    rsync -av rsync://mirrors.ustc.edu.cn/centos/7/os/x86_64/Packages/ /YUM/ ; createrepo --update /YUM/

    (The End)

    相关文章

      网友评论

        本文标题:2018-05-28 课堂笔记

        本文链接:https://www.haomeiwen.com/subject/vagnjftx.html