• Linux操作系统安装与gcc和内核升级


    一、Linux操作系统安装

    RHEL 8 安装

    进入安装界面:

    语言建议选择英文:

    设置磁盘空间分配策略

    选择自定义分区:

    可以选择标准分区与LVM分区形式,标准分区会将磁盘做成标准分区,LVM会将磁盘做成逻辑卷,建议选择LVM形式,将来空间不够可以增加磁盘进行扩容:

     Linux分区要根据服务器应用类型进行划分,有Web服务器、FTP服务器、数据库服务器等等。

    注意:如果没有对/home或/var等目录单独分区,/home等分区默认使用的就是根分区的内容。

    根分区至少预留50G:

    Linux的根分区和boot分区必须要创建,/boot分区存放系统系统引导和内核文件,最少1G:

     因此,在Red Hat Enterprise Linux 中,以下是设置合适的交换分区大小的规则:

    物理内存交换分区(SWAP)
    <= 4G至少4G
    4~16G至少8G
    16G~64G至少16G
    64G~256G至少32G

     点击Done继续安装:

    分区后要进行格式化,点击接收改变即可。

    配置网络:

    先是默认DHCP,因此我们不动它,直接Done:

    设定时区:

    指定安装包组:

    可以安装图形去了解一下,生产环境只会用最小化系统进行安装,可安装一些工具包:

     一直下一步:

    设置root密码以及创建普通用户(可以不建):

     安装完成。

    CentOS和RHEL的区别:

    a. RHEL:Red Hat Enterprise Linux(企业级的Linux系统)
    b. CentOS:Community Enterprise Operating System(也是红帽的产品,社区版本)
    c. 两者区别:

    (1)企业版本RHEL:如果你购买了订阅,可以得到技术支持!但是CentOS没有此服务:400
    (2)CentOS作为一个社区版本,有些新的特性(不稳定)也是在社区版本优先进行发布,但在RHEL中,它不包含这些。
    (3)关于漏洞(BUG)修复RHEL的企业级用户:400电话,也是最先响应的;BUG一定会在红帽社区中进行公布,一般会较长一段时间后,BUG的修复才会被公布出来。
    (4)关于命令及操作:两者在同期的版本的情况下相同。
    (5)支持周期:RHEL为最近的3个大版本(现在是RHEL6/7/8),CentOS通常只有18个月。

    因为centos8的系统将要结束支持,后期维护的是CentOS Stream项目。

    二、PXE+Kickstart批量安装Linux操作系统

    1. PXE环境概述

    作为一名运维人员,在一些中小公司经常会遇到一些机械式的重复工作,比如:批量一次大批量的进行操作系统的安装等等。为了实现自动化运维,减少人员负担我们可以部署以下服务:Kickstart(PXE+DHCP+TFTP+HTTP)或Cobbler

    2. 批量装机软件介绍

    Redhat系通主要有两种方式:Kickstart和Cobbler。

    Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在自动安装过程中出现要填写参数的情况,安装程序首先会去查找ks.cfg文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便会弹出对话框让安装者手工填写。所以,如果ks.cfg文件涵盖了安装过程中所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处下载ks.cfg文件。等安装完毕,安装程序会根据ks.cfg中的设置重启/关闭系统,并结束安装。

    Cobbler集中和简化了通过网络安装操作系统需要使用到的DHCP、TFTP和DNS服务的配置。Cobbler不仅有一个命令行界面,还提供了一个Web界面,大大降低了使用者的入门水平。Cobbler内置了一个轻量级配置管理系统,但它也支持和其它配置管理系统集成。

    3. 什么是PXE?

    PXE,全名Pre-boot Execution Environment,预启动执行环境;简单的说,Cobbler是对kickstart的封装,简化安装步骤、使用流程,并降低使用者的门槛。而kickstart实现方式依赖于PXE环境,通过网络接口启动计算机,不依赖本地存储设备(如硬盘)或本地已安装的操作系统;它是由Intel和Systemsoft公司于1999年9月20日公布的技术,运行在Client/Server的工作模式;PXE客户端会调用网际协议(IP)、用户数据报协议(UDP)、动态主机设定协议(DHCP)、小型文件传输协议(TFTP)等网络协议;PXE客户端(client)这个术语是指机器在PXE启动过程中的角色。一个PXE客户端可以是一台服务器、笔记本电脑或者其他装有PXE启动代码的机器(我们电脑的网卡)。

    4. PXE工作流程及相关介绍

    PXE client是需要安装Linux的计算机;

    TFTP Server、DHCP Server及HTTPD Server都是部署在PXE Server端的服务;Bootstrap文件、配置文件以及Linux根文件系统都需要放置在Linux Server的TFTP服务器根目录下;

    ks.cfg 及系统内核文件都需要放置在在Httpd server目录。

    4.1 PXE必要条件

    4.1.1 pxe client必须支持pxe用户端功能,并且开机时选择网络启动,这样系统才能以网络的方式进入pxe启动程序;

    4.1.2 pxe服务器必须至少提供DHCP及TFTP的服务才行,且其中DHCP服务器必须能够除为pxe client分配ip地址外,还需告知tftp所在的位置(即pxelinux.0的文件位置);

    4.1.3 TFTP服务器则为pxe client 提供bootloader 及 kernel 等重要文件下载服务;

    4.1.4 使用NFS/HTTP/FTP之一的服务器提供pxe client所需程序及软件来源等通讯协议;

    4.2 PXE工作流程

    1. PXE Client向DHCP发送请求 PXE Client从自己的PXE网卡启动,通过PXE BootROM(自启动芯片)会以UDP(简单用户数据报协议)发送一个广播请求,向本网络中的DHCP服务器索取IP。

    2. DHCP服务器提供信息 DHCP服务器收到客户端的请求,验证是否来至合法的PXE Client的请求,验证通过它将给客户端一个“提供”响应,这个“提供”响应中包含了为客户端分配的IP地址、pxelinux启动程序(TFTP)位置,以及配置文件所在位置。

    3. PXE客户端请求下载启动文件 客户端收到服务器的“回应”后,会回应一个帧,以请求传送启动所需文件。这些启动文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。

    4. Boot Server响应客户端请求并传送文件 当服务器收到客户端的请求后,他们之间之后将有更多的信息在客户端与服务器之间作应答, 用以决定启动参数。BootROM由TFTP通讯协议从Boot Server下载启动安装程序所必须的文件(pxelinux.0、pxelinux.cfg/default)。default文件下载完成后,会根据该文件中定义的引导顺序,启动Linux安装程序的引导内核。

    5. 请求下载自动应答文件 客户端通过pxelinux.cfg/default文件成功的引导Linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装linux,如果是通过网络安装(NFS, FTP, HTTP),则会在这个时候初始化网络,并定位安装源位置。接着会读取default文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。

    6. 客户端安装操作系统 将ks.cfg文件下载回来后,通过该文件找到OS Server,并按照该文件的配置请求下载安装过程需要的软件包。 OS Server和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机。  

    4.3 PXE服务中重要目录介绍

    TFTP根目录:

    /var/lib/tftpboot/

    该目录用于存放客户端的配置文件,比如菜单选项、安装源等等配置:

    1. /var/lib/tftpboot/pxelinux.cfg
    2. pxelinux.0:引导文件
    3. pxelinux.cfg/default:开机时的选项菜单,pxelinux.cfg是启动菜单目录
    4. vesamenu.c32:是光盘启动后的安装图形界面,也属于SYSLINUX项目,
    5. menu.c32版本是纯文本的菜单
    6. Memtest:内存检测,这是一个独立的程序
    7. splash.jgp:光盘启动界面的背景图
    8. vmlinuz:是内核映像
    9. initrd.img:是ramfs (先cpio,再gzip压缩)
    10. ks.cfg :是Kickstart自动应答配置文件,默认是没有的

    5. PXE环境部署

    5.1 安装DHCP

    安装dhcp server:

    yum install dhcp

    查看dhcpd配置文件安装路径:

    rpm –ql dhcp

    修改dhcp配置文件,用于PXE只要改这几个:

    1. vim /etc/dhcp/dhcpd.conf
    2. subnet 192.168.1.0 netmask 255.255.255.0 { #定义子网
    3. range 192.168.1.100 192.168.1.200; #可分配的起始IP-结束IP
    4. option subnet-mask 255.255.255.0; #分配给客户端的子网掩码
    5. default-lease-time 21600; #设置默认的IP租用期限
    6. max-lease-time 43200; #最大租期
    7. next-server 192.168.4.150; #添加tftp服务器地址
    8. filename="pxelinux.0"; #告知客户端从TFTP根目录下载pxelinux.0这个启动引导文件
    9. }

    启动DHCP服务:

    1. systemctl start dhcpd.service    #启动DHCP服务
    2. systemctl status dhcpd.service   #查看DHCP服务状态
    3. systemctl enable dhcpd.service   #设置开机自动启动DHCP服务
    4. netstat -lntup |grep dhcpd       #查看DHCP服务端口的侦听状态
    5. udp 0 0 0.0.0.0:67 0.0.0.0:*
    6. tailf /var/log/messages          #查看DHCP日志状态

     注意:

    • 本来软件安装完成后都要加入开机自启,但这个Kickstart系统不能开机自启,而且用完后服务都要关闭,防止未来重启服务器后自动重装系统。
    • 如果机器数量过多的话,注意dhcp服务器的地址池,不要因为耗尽IP而导致dhcp服务器没有IP地址分配的情况。

    DHCP指定监听网卡:

    如果是多网卡模式,默认是监听eth0网卡,需手动指定监听网卡。

    1. # vim /etc/sysconfig/dhcpd 在这个文件中,不是/etc/dhcp/dhcpd.conf
    2. # Command line options here
    3. DHCPDARGS=eth1 # 指定监听网卡

    5.2 安装TFTP

    TFTP服务端口 69。

    安装tftp服务器:

    yum install tftp-server –y

    把disable参数改成no,启用tftp服务:

    1. vim /etc/xinetd.d/tftp    
    2. service tftp
    3. {
    4. socket_type = dgram
    5. protocol = udp
    6. wait = yes
    7. user = root
    8. server = /usr/sbin/in.tftpd
    9. server_args = -s /var/lib/tftpboot //指定目录,保持默认
    10. disable = no //将yes改为no
    11. per_source = 11
    12. cps = 100 2
    13. flags = IPv4
    14. }
    15. systemctl start tftp.socket
    16. systemctl status tftp.socket 
    17. systemctl enable tftp.socket
    18. Or
    19. [root@elk-1 ~]# systemctl start xinetd.service
    20. [root@elk-1 ~]# netstat -lntup|grep 69
    21. udp 0 0 0.0.0.0:69 0.0.0.0:*

    5.3 使用 syslinux 提供的bootstart

    syslinux是一个功能强大的引导加载程序,而且兼容各种介质。

    syslinux是一个小型的linux操作系统,它的目的是简化首次安装linux的时间,并建立维护或其它特殊用途的启动盘。

    1. [root@PXE ~]# yum install syslinux
    2. [root@PXE ~]# rpm -ql syslinux /usr/share/syslinux # pxelinux.0 文件存储目录
    3. [root@PXE ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ # 复制启动菜单程序文件pxelinux.0到/var/lib/tftpboot 目录
    4. [root@PXE boot]# mount /dev/cdrom /media/ # 挂载光盘 mount: block device /dev/sr0 is write-protected, mounting read-only

    5.4 配置pxelinux.cfg 文件

    创建pxelinux.cfg 文件夹

    [root@PXE  ~]# mkdir /var/lib/tftpboot/pxelinux.cfg

    把isolinux.cfg引导文件拷贝到tftpd存储目录下的pxelinux.cfg文件中,并命名为default:

    [root@PXE ~]# cp isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default 

    修改linux内核引导文件:

    1. [root@PXE ~]# vi /var/lib/tftpboot/pxelinux.cfg/default
    2. default vesamenu.c32 # 默认启动界面,该文件需要拷贝到tftp存储目录中。
    3. #prompt 1
    4. timeout 600 # 倒计时 600就是60 秒,改数字为秒数的10倍
    5. display boot.msg # 将额外信息写入到boot.msg文件中,该文件需要拷贝到tftp存储目录中。
    6. menu background splash.jpg # 菜单背景图,该文件需要拷贝到tftp存储目录中。
    7. menu title Welcome to CentOS 7! # 菜单主标题
    8. label linux
    9. menu label ^Install or upgrade an PXE system #菜单項目
    10. menu default # 预设项目
    11. kernel vmlinuz # 内核 vmlinuz,该文件需要拷贝到tftp存储目录中。
    12. append initrd=initrd.img ks=http://服务器ip地址/ks.cfg
    13. # 核心参数,指定initrd 核心文件,该文件需要拷贝到tftp存储目录中。另指定ks文件目录,这儿使用的http协议

    把内核及根文件拷贝到tftpd存储目录 :参照上菜单配置信息,包括 vesamenu.c32,boot.msg,splash.jpg,vmlinuz,initrd.img 文件做拷贝:

    1. [root@PXE ~]# cp /media/images/pxeboot/{initrd.img,vmlinuz} /var/lib/tftpboot/  
    2. [root@PXE ~]# cp /media/isolinux/{boot.msg,vesamenu.c32,splash.jpg} /var/lib/tftpboot/

    最简单方式,直接复制整个CentOS引导程序到tftp目录:

    [root@elk-1 ~]# cp -a /var/www/html/CentOS7/isolinux/* /var/lib/tftpboot/

    这里有一个很大的坑

    若不给tftpboot目录下所有文件执行权限的话,后面启动界面安装系统的时候会报错:PXE-T00 permission denied.

    chmod -R 777 /var/lib/tftpboot/

    创建一个pxelinux.cfg的目录,存放客户端的配置文件:

    1. [root@elk-1 ~]# mkdir -p /var/lib/tftpboot/pxelinux.cfg
    2. [root@elk-1 ~]# cp /var/www/html/CentOS-7.6/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

    5.5 配置HTTP服务

    安装HTTP服务:

    1. yum install httpd –y
    2. [root@elk-1 ~]# sed -i "95i ServerName 127.0.0.1:80" /etc/httpd/conf/httpd.conf #在95行插入ServerName 127.0.0.1:80,否则启动报错。
    3. systemctl start httpd.service
    4. systemctl status httpd.service
    5. systemctl enable httpd.service
    6. rpm -ql httpd
    7. netstat -nltup |grep 80

    httpd配置文件:

    1. /etc/httpd/conf/httpd.conf   # httpd 配置文件
    2. /var/www/html     # httpd 默认存储目录

    内核文件、虚拟根文件以及菜单文件,我们都是通过tftp服务来提供的,由于系统及版本的不同,对于一个比较复制机群来说,我们需要准备不同系统,不同版本的内核文件,initrd.img文件。菜单文件只需要一份即可。

    光盘挂载:

    1. mkdir -p /var/www/html/CentOS7  #创建CentOS7目录用于存放光盘中的文件
    2. mount /dev/cdrom /var/www/html/CentOS7 #这里采用挂载光盘的方式等等

    如果是镜像文件已上传到linux中,可以这样挂:

    1. #mount -o loop /opt/CentOS-7-x86_64-Minimal-1511.iso /var/www/html/centos7
    2. # ls /var/www/html/centos7
    3. -rw-rw-r-- 3 root root 14 9月 5 2017 CentOS_BuildTag
    4. drwxr-xr-x 3 root root 2048 95 2017 EFI
    5. -rw-rw-r-- 3 root root 227 8月 30 2017 EULA
    6. -rw-rw-r-- 3 root root 18009 12月 10 2015 GPL
    7. drwxr-xr-x 3 root root 2048 95 2017 images
    8. drwxr-xr-x 2 root root 2048 95 2017 isolinux
    9. drwxr-xr-x 2 root root 2048 95 2017 LiveOS
    10. drwxrwxr-x 2 root root 641024 95 2017 Packages
    11. drwxr-xr-x 2 root root 4096 95 2017 repodata
    12. -rw-rw-r-- 3 root root 1690 12月 10 2015 RPM-GPG-KEY-CentOS-7
    13. -rw-rw-r-- 3 root root 1690 12月 10 2015 RPM-GPG-KEY-CentOS-Testing-7
    14. -r--r--r-- 1 root root 2883 9月 6 2017 TRANS.TBL

    不管怎么弄,只要把安装光盘内容能通过web发布即可。如果复制镜像就有点浪费时间,但生产环境就一定要复制了,光盘读取速度优先。

    挂载或者拷贝完成之后打开浏览器查看网页是否正常显示:

    1. http://web服务器的地址/CentOS7/
    2. curl http://web服务器的地址/CentOS7/    #命令行检查

    5.6 配置无人值守文件ks.cfg

    每安装好一台CentOS机器,系统都会生成并记录真实的安装配置,生成的文件名为 anaconda-ks.cfg,位于/root/下。

    拷贝模板到/var/www/html 目录,并重命名为ks.cfg:

    1. [root@PXE ~]# cp /root/anaconda-ks.cfg /var/www/html/ks.cfg   
    2. [root@PXE ~]# chmod o+r /var/www/html/ks.cfg #分配权限为pxe client引导安装使用

     ks.cfg文件组成

    • 命令段 键盘类型、语言、安装方式等系统配置,有必须项和可选项;若缺少必选项,安装时会中断并提示手动选择。
    • 软件包段
    1. %packages:软件包开头的标识位
    2. @groupname:指定安装的包组
    3. package_name:指定安装的包
    4. -package_name:指定不安装的包
    • 脚本段(可选段)
    1. %pre:安装系统前执行的命令或脚本(由于只依赖于启动镜像,支持的命令很少)
    2. %post:安装系统后执行的命令或脚本(基本支持所有命令)

    参数说明:

    1. 关键字    含义
    2. install    告知安装程序,这是一次全新安装,而不是升级upgrade。
    3. url --url=" "    通过FTP或HTTP从远程服务器上的安装树中安装。
    4. url --url="http://10.0.0.7/CentOS-6.7/"
    5. url --url ftp://:@/
    6. nfs    从指定的NFS服务器安装。
    7. nfs --server=nfsserver.example.com --dir=/tmp/install-tree
    8. text    使用文本模式安装。
    9. lang    设置在安装过程中使用的语言以及系统的缺省语言。lang en_US.UTF-8
    10. keyboard    设置系统键盘类型。keyboard us
    11. zerombr    清除mbr引导信息。
    12. bootloader    系统引导相关配置。
    13. bootloader --location=mbr --driveorder=sda --append=“crashkernel=auto rhgb quiet”
    14. –location=,指定引导记录被写入的位置.有效的值如下:mbr(缺省),partition(在包含内核的分区的第一个扇区安装引导装载程序)或none(不安装引导装载程序)。
    15. –driveorder,指定在BIOS引导顺序中居首的驱动器。
    16. –append=,指定内核参数.要指定多个参数,使用空格分隔它们。
    17. network    为通过网络的kickstart安装以及所安装的系统配置联网信息。
    18. network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6 --hostname=CentOS6
    19. –bootproto=[dhcp/bootp/static]中的一种,缺省值是dhcp。bootp和dhcp被认为是相同的。
    20. static方法要求在kickstart文件里输入所有的网络信息。
    21. network --bootproto=static --ip=10.0.0.100 --netmask=255.255.255.0 --gateway=10.0.0.2 --nameserver=10.0.0.2
    22. 请注意所有配置信息都必须在一行上指定,不能使用反斜线来换行。
    23. –ip=,要安装的机器的IP地址.
    24. –gateway=,IP地址格式的默认网关.
    25. –netmask=,安装的系统的子网掩码.
    26. –hostname=,安装的系统的主机名.
    27. –onboot=,是否在引导时启用该设备.
    28. –noipv6=,禁用此设备的IPv6.
    29. –nameserver=,配置dns解析.
    30. timezone    设置系统时区。timezone --utc Asia/Shanghai
    31. authconfig    系统认证信息。authconfig --enableshadow --passalgo=sha512
    32. 设置密码加密方式为sha512 启用shadow文件。
    33. rootpw    root密码
    34. clearpart    清空分区。clearpart --all --initlabel
    35. --all 从系统中清除所有分区,--initlable 初始化磁盘标签
    36. part    磁盘分区。
    37. part /boot --fstype=ext4 --asprimary --size=200
    38. part swap --size=1024
    39. part / --fstype=ext4 --grow --asprimary --size=200
    40. –fstype=,为分区设置文件系统类型.有效的类型为ext2,ext3,swap和vfat。
    41. –asprimary,强迫把分区分配为主分区,否则提示分区失败。
    42. –size=,以MB为单位的分区最小值.在此处指定一个整数值,如500.不要在数字后面加MB。
    43. –grow,告诉分区使用所有可用空间(若有),或使用设置的最大值。
    44. firstboot    负责协助配置redhat一些重要的信息。
    45. firstboot --disable
    46. selinux    关闭selinux。selinux --disabled
    47. firewall    关闭防火墙。firewall --disabled
    48. logging    设置日志级别。logging --level=info
    49. reboot    设定安装完成后重启,此选项必须存在,不然kickstart显示一条消息,并等待用户按任意键后才重新引导,也可以选择halt关机。

    ks配置文件1:

    1. [root@PXE ~]# vi /var/www/html/ks.cfg
    2. # Kickstart file automatically generated by anaconda.
    3. #version=DEVEL
    4. install                                           # 命令段  ,安装
    5. url --url=http://192.168.4.150/centos/os/        # 指定网络url安装目录
    6. lang en_US.UTF-8                                 # 默认字体
    7. keyboard us                                      # 键盘类型
    8. network --onboot yes --device eth0 --bootproto dhcp  --noipv6 
    9. # 指定开机自启,网络接口eth0 ,dhcp获取网络地址,ipv6 禁用
    10. rootpw  --iscrypted $6$ZOGP2tA0PI/6SI/X$MlC5bJyXfP9TBN5/0vwoc6dqAqIijOQthEbAZUnIXft85Tj9n4sKWB2PfxrsVfkZ2ibqX63apu8ElmdEvBo9o/  
    11. # root 加密密码,使用grub-crypt 生成的字符串替代
    12. reboot         # 配置完毕后,重启内核
    13. firewall --disabled    # 防火墙禁用
    14. authconfig --enableshadow --passalgo=sha512  # 登录身份使用 sha1 的 512bits 加密算法
    15. selinux --disabled     # selinux 功能禁用
    16. timezone Asia/Shanghai # 定义上海时区
    17. bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"  
    18. # 定义bootloader,grub安装mbr ,安装在sda磁盘
    19. # The following is the partition information you requested
    20. # Note that any partitions you deleted are not expressed
    21. # here so unless you clear all partitions first, this is
    22. # not guaranteed to work
    23. clearpart --all         # 清除磁盘分区表
    24. text                     # 纯文本格式安装显示
    25. zerombr                  # 对磁盘进行初始化
    26. part /boot --fstype=ext4 --asprimary --size=2000  # 分区信息 ,定义boot分区 ,格式为ext4 ,大小为2G
    27. part swap --size=4096          # 分区信息 ,定义swap分区 ,大小为4G
    28. part pv.008003  --size=80000  # 分区信息 ,定义lv分区 pv.008003,大小为80G
    29. volgroup vg0 --pesize=8192 pv.008003   # 分区信息 ,在lv分区pv.008003定义vg0卷组 ,pe大小为8M
    30. logvol / --fstype=ext4 --name=root --vgname=vg0 --size=15000
    31. logvol /usr --fstype=ext4 --name=/usr --vgname=vg0 --size=30000
    32. logvol /var --fstype=ext4 --name=/var --vgname=vg0 --size=20000
    33. logvol /home --fstype=ext4 --name=/home --vgname=vg0 --size=12000
    34. repo --name="CentOS-6.6"  --baseurl=http://192.168.4.150/centos/os/  --cost=100 
    35. # 定义yum仓库 ,类别为bashurl ,名称为CentOS-6.6
    36. %packages             # 包组段,安装包组及程序包
    37. @core                
    38. @server-policy           
    39. @workstation-policy
    40. %end

    ks配置文件2:

    1. # mkdir /var/www/html/ks_config
    2. [root@elk-1 /var/www/html/ks_config]# cat ks.cfg
    3. # 告知安装程序,这是一次全新安装,而不是升级
    4. install
    5. # 通过http下载安装镜像
    6. url --url="http://100.100.100.2/Centos7"
    7. # 以文本格式安装
    8. text
    9. # Run the Setup Agent on first boot
    10. firstboot --disable
    11. ignoredisk --only-use=sda
    12. # 键盘和语言
    13. # Keyboard layouts
    14. keyboard --vckeymap=us --xlayouts='us'
    15. # System language
    16. lang en_US.UTF-8
    17. # 网络配置
    18. # Network information
    19. network --bootproto=dhcp --device=ens33 --ipv6=auto --activate
    20. network --hostname=localhost.localdomain
    21. # 设置用户密码123456
    22. # Root password
    23. auth --enableshadow --passalgo=sha512
    24. rootpw --iscrypted $6$0Hu4r5pwNdX1zdsJ$Y58jOsbs0kSlplbtVf3lacoA7Etbf8tHH6BwxR78VT74Ut6D1Q/g.rS5GSwYZD5rAZpA4NmNlTBSZkyNZP3JZ0
    25. # 启动服务
    26. # System services
    27. services --enabled="chronyd"
    28. selinux --disabled
    29. firewall --disabled
    30. # 时区
    31. # System timezone
    32. timezone Asia/Shanghai --isUtc --nontp
    33. #添加内核参数 指定mbr引导 选择sda启动
    34. # System bootloader configuration
    35. bootloader --append="crashkernel=auto rhgb quiet" --location=mbr --boot-drive=sda
    36. # Clear the Master Boot Record清除mbr引导信息。
    37. zerombr
    38. ##清空分区
    39. clearpart --all --initlabel
    40. ##分区
    41. part /boot --fstype=ext4 --asprimary --size=500
    42. part swap --size=65536
    43. part / --fstype=ext4 --size=1 --grow --asprimary
    44. # 安装完成重启
    45. reboot
    46. # 最小化安装和指定的安装软件
    47. %packages
    48. @base
    49. @compat-libraries
    50. @development
    51. net-tools
    52. sysstat
    53. lrzsz
    54. telnet
    55. wget
    56. vim
    57. %end
    58. # KDUMP禁止
    59. %addon com_redhat_kdump --disable --reserve-mb='auto'
    60. %end
    61. # 安装完成后执行的命名,这里设置阿里云的yum源镜像
    62. %post
    63. /usr/bin/yum-config-manager --add-repo=http://mirrors.aliyun.com/repo/Centos-7.repo
    64. %end

    给配置文件执行权限: 

    # chmod 777 /var/www/html/ks_config/

    安装ksvalidator 软件:

    1. [root@PXE ~]# yum -y install pykickstart 
    2. [root@PXE ~]# ksvalidator /var/www/html/ks.cfg    # ksvalidator验证ks.cfg语法是否正确,如为空则表示没有语法错误。

    5.7 整合编辑default配置文件

    1. [root@elk-1 /var/lib/tftpboot/pxelinux.cfg]# cat default
    2. default ks
    3. prompt 0
    4. label ks
    5. kernel vmlinuz
    6. append initrd=initrd.img ks=http://10.0.0.114/ks_config/ks.cfg

    至此,PXE服务器环境部署完成,可以打开客户端安装系统试一试,如出现问题,一般需要查看系统日志,如:/var/log/messages, 通过日志报错信息进行解决 。 

    案例:

    dell服务器开机F12进行PXE装机后如果一直没反应,检查服务端的DHCP和PXE问题

    开机后进入PXE安装,但是出现下图问题:

    原因:

    /var/lib/tftpboot/pxelinux.cfg/default   #此文件中指定的 网卡名字和客户端的网卡名字不符,导致卡在这步,正常来说按照上面配置不会遇到这个

    开机后提示http://10.0.0.114/var/www/html/ks_config/ks.cfg not found 404

    这是因为default文件路径写错了,服务器获取不到ks.cfg文件,无法进行安装操作。

    5.8 kickstart图形化制作工具

    CentOS提供了图形化的kickstart配置工具。需要安装图形化界面才可以使用。

    配置工具命令为:

    开图形kickstart制作工具如下:

    1. 时区选择上海;填写超级用户密码;选择安装后自启;默认图形界面:

    2. 选择HTTP,其中HTTP server 为服务器ip,HTTP Directory 选择镜像的挂载点

    3. 选择第一个

    4. 均选择第一个,然后点击Add

    (1)设置/boot为200M:

    (2)设置/swap为500M:

    (3)设置剩下的硬盘均为/,这里表示为1:

    4. 增添网关,名取为eth0;选择DHCP

    5. 选择默认的即可。

    6. 选择关闭防火墙

    7. 这两步操作,选择默认

    8. 点击file,保存

    (二)配置脚本

    1、一定要复制,cp 到 /var/www/html

    2、kickstart资源共享

    安装httpd:

    开启httpd,设置开机自启;关闭防火墙,设置开机不自启。

     

     增加安装软件:

    三、gcc和Linux内核升级

    1、Linux内核升级

    查看系统版本号:

    1. lsb_release -a
    2. cat /etc/issue

    查看内核版本升级内核:

    1. rpm -qa | grep kernel
    2. rpm -qa | grep -i centos-release

    下载 centos 7.6 rpm 包:

    wget http://vault.centos.org/7.6.1810/os/x86_64/Packages/centos-release-7-6.1810.2.el7.centos.x86_64.rpm
    

    卸载kernel 3.10.0-1062 和相关包:

    yum remove kernel-3.10.0-1062.1.2.el7.x86_64 kernel-devel-3.10.0-1062.1.2.el7.x86_64

    安装下载的7.6 rpm 包:

    rpm -ivh centos-release-7-6.1810.2.el7.centos.x86_64.rpm --force
    

     这时重新运行 rpm -qa | grep -i centos-release 就可以看到两个发行版本:

    卸载掉7.7版本:

    rpm -ev centos-release-7-7.1908.0.el7.centos.x86_64

    这时再看内核版本和发行版版本:

    1. uname -a
    2. cat /etc/redhat-release

    最近这两天在更新CentOS7系统时,出现了Multilib version problems错误,出现了的错误信息:

    1. # yum update
    2. ...
    3. Protected multilib versions: glibc-2.17-196.el7.i686 != glibc-2.17-157.el7_3.1.x86_64
    4. Error: Protected multilib versions: pcre-8.32-17.el7.i686 != pcre-8.32-15.el7_2.1.x86_64
    5. Error: Protected multilib versions: elfutils-libs-0.168-8.el7.i686 != elfutils-libs-0.166-2.el7.x86_64

    解决过程如下:

    查询重复的软件包:

    1. # rpm -q systemd-libs
    2. systemd-libs-219-30.el7.x86_64
    3. systemd-libs-219-42.el7_4.1.x86_64

    删除旧版: 

    1. # rpm -e systemd-libs-219-30.el7.x86_64
    2. error: Failed dependencies:
    3. systemd-libs = 219-30.el7 is needed by (installed) libgudev1-219-30.el7.x86_64

    仍然出现依赖问题,继续查询libgudev1的版本信息:

    1. rpm -q libgudev1
    2. libgudev1-219-30.el7.x86_64

    发现只有一个版本,升级试一下

    1. yum update libgudev1 
    2. ...... 
    3. Updated: 
    4. libgudev1.x86_64 0:219-42.el7_4.1 
    5. Complete! 
    6. rpm -q libgudev1
    7. libgudev1-219-42.el7_4.1.x86_64

    升级完成后,删除旧版本的systemd-libs:

    1. # rpm -e systemd-libs-219-30.el7.x86_64
    2. # rpm -q systemd-libs
    3. systemd-libs-219-42.el7_4.1.x86_64

    最后查询发现只剩下最新版本的systemd-libs,其他重复版本包的解决,也是同样的过程。

    核心的命令主要是:

    1. rpm -q package-names
    2. rpm -e package-full-version

    2、gcc升级

    查看当前的gcc版本:

    1. [root@aarch64vm-centos74-011 ~]# gcc -v
    2. Using built-in specs.
    3. COLLECT_GCC=gcc
    4. COLLECT_LTO_WRAPPER=/usr/libexec/gcc/aarch64-redhat-linux/4.8.5/lto-wrapper
    5. Target: aarch64-redhat-linux
    6. Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-aarch64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-aarch64-redhat-linux/cloog-install --enable-gnu-indirect-function --build=aarch64-redhat-linux
    7. Thread model: posix
    8. gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)

    gcc官网:

    Index of /gnu/gcc

    删除gcc:

    sudo yum remove --skip-broken gcc
    

    安装gcc:

    sudo yum install --skip-broken gcc

    源码编译升级,下载gcc 7.4.0的源码:

    https://mirrors.ustc.edu.cn/gnu/gcc/gcc-7.4.0/gcc-7.4.0.tar.gz

    将源码上传至服务器然后解压:

    1. [root@aarch64vm-centos74-010 ~]# mkdir -p /usr/local/gcc
    2. [root@aarch64vm-centos74-010 ~]# ls /usr/local/
    3. bin boost cmake doc etc games gcc include lib lib64 libexec man maven mysql sbin share src tomcat
    4. [root@aarch64vm-centos74-010 ~]# ls
    5. anaconda-ks.cfg boost_1_59_0.tar.gz jdk1.8.0_161 mysql-5.7.19.tar.gz spark-1.6.1-bin-without-hadoop.tgz
    6. apache-maven-3.3.9-bin.tar.gz cmake-2.8.5.tar.gz jdk-8u161-linux-arm64-vfp-hflt.tar.gz scala-2.11.7.tgz spark-2.1.0-bin-hadoop2.7.tgz
    7. apache-tomcat-8.0.53.tar.gz gcc-7.4.0.tar.gz mysql-5.7.19 scala-2.12.6.tgz
    8. [root@aarch64vm-centos74-010 ~]# tar -xvf gcc-7.3.0.tar.gz -C /usr/local/gcc/

    解压完成后,编译安装gcc源码。

    (1)进入gcc 7.3.0目录,运行 download_prerequisites 脚本:

    1. [root@aarch64vm-centos74-010 ~]# cd /usr/local/gcc/
    2. [root@aarch64vm-centos74-010 gcc]# ls
    3. gcc-7.3.0
    4. [root@aarch64vm-centos74-010 gcc]# cd gcc-7.4.0/
    5. [root@aarch64vm-centos74-010 gcc-7.4.0]# ls
    6. ABOUT-NLS config-ml.in COPYING3 gnattools libada libffi libitm libstdc++-v3 lto-plugin Makefile.in NEWS
    7. ChangeLog config.rpath COPYING3.LIB gotools libatomic libgcc libmpx libtool-ldflags ltoptions.m4 Makefile.tpl README
    8. ChangeLog.jit config.sub COPYING.LIB include libbacktrace libgfortran libobjc libtool.m4 ltsugar.m4 MD5SUMS symlink-tree
    9. ChangeLog.tree-ssa configure COPYING.RUNTIME INSTALL libcc1 libgo liboffloadmic libvtv ltversion.m4 missing ylwrap
    10. compile configure.ac depcomp install-sh libcilkrts libgomp libquadmath ltgcc.m4 MAINTAINERS mkdep zlib
    11. config contrib fixincludes intl libcpp libhsail-rt libsanitizer ltmain.sh maintainer-scripts mkinstalldirs
    12. config.guess COPYING gcc LAST_UPDATED libdecnumber libiberty libssp lt~obsolete.m4 Makefile.def move-if-change
    13. [root@aarch64vm-centos74-010 gcc-7.4.0]# ./contrib/download_prerequisites
    14. 2018-07-18 16:06:03 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 [2383840] -> "./gmp-6.1.0.tar.bz2" [1]
    15. 2018-07-18 16:08:29 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 [1279284] -> "./mpfr-3.1.4.tar.bz2" [1]
    16. 2018-07-18 16:09:25 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz [669925] -> "./mpc-1.0.3.tar.gz" [1]
    17. 2018-07-18 16:12:42 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.16.1.tar.bz2 [1626446] -> "./isl-0.16.1.tar.bz2" [1]
    18. gmp-6.1.0.tar.bz2: OK
    19. mpfr-3.1.4.tar.bz2: OK
    20. mpc-1.0.3.tar.gz: OK
    21. isl-0.16.1.tar.bz2: OK
    22. All prerequisites downloaded successfully.
    23. [root@aarch64vm-centos74-010 gcc-7.4.0]#

    (2)建立编译输出目录,将所有的中间文件都放到该目录中:

    这里建目录的时候,在当前gcc解压目录下建,否则这里所有命令行的路径都要修改。

    获取这四个包时,可能有错误,无法识别这个包的状态啥的,没事,删了再来一遍就行了。

    1. [root@aarch64vm-centos74-010 gcc-7.4.0]# mkdir gcc-build-7.3.0
    2. [root@aarch64vm-centos74-010 gcc-7.4.0]# cd gcc-build-7.3.0/
    3. [root@aarch64vm-centos74-010 gcc-build-7.4.0]# cp ../gmp-6.1.0.tar.bz2 ./
    4. [root@aarch64vm-centos74-010 gcc-build-7.4.0]# cp ../mpfr-3.1.4.tar.bz2 ./
    5. [root@aarch64vm-centos74-010 gcc-build-7.4.0]# cp ../mpc-1.0.3.tar.gz ./
    6. [root@aarch64vm-centos74-010 gcc-build-7.4.0]# cp ../isl-0.16.1.tar.bz2 ./
    7. [root@aarch64vm-centos74-010 gcc-build-7.4.0]# ls
    8. gmp-6.1.0.tar.bz2 isl-0.16.1.tar.bz2 mpc-1.0.3.tar.gz mpfr-3.1.4.tar.bz2
    9. [root@aarch64vm-centos74-010 gcc-build-7.4.0]#

    (3)配置 :

    在当前目录执行,这个目录下gcc-build-7.3.0:

    ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib 
    

    参数解释: 

    1. --enable-checking=release           //增加一些检查,也可以–disable-checking生成的编译器在编译过程中不做检查;
    2. --enable-languages=c,c++          //让gcc支持的编程语言 ;
    3. --disable-multilib               //取消多目标库编译(取消32位库编译)。

    (4)make编译

    当前目录执行:

    make  -j4

    (编译时间较长,耐心等待!!!!!!!)

    (5)卸载旧版本的gcc,安装gcc7.3.0

    1. rpm -q gcc 
    2. rpm -q gcc-c++

    根据执行输出的包名执行:

    1. [root@localhost ~]# rpm -q gcc
    2. gcc-4.8.5-28.el7_5.1.aarch64
    3. [root@localhost ~]# rpm -q gcc-c++
    4. gcc-c++-4.8.5-28.el7_5.1.aarch64
    5. [root@localhost ~]# rpm -e gcc-c++-4.8.5-28.el7_5.1.aarch64
    6. [root@localhost ~]# rpm -e gcc-4.8.5-28.el7_5.1.aarch64

    进入make的gcc目录进行安装:

    make install -j8

    (6)验证

    1. [root@localhost ~]# gcc -v
    2. Using built-in specs.
    3. COLLECT_GCC=gcc
    4. COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/aarch64-unknown-linux-gnu/7.4.0/lto-wrapper
    5. Target: aarch64-unknown-linux-gnu
    6. Configured with: ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
    7. Thread model: posix
    8. gcc version 7.4.0 (GCC) 
    9. [root@localhost ~]# g++ -v
    10. Using built-in specs.
    11. COLLECT_GCC=g++
    12. COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/aarch64-unknown-linux-gnu/7.4.0/lto-wrapper
    13. Target: aarch64-unknown-linux-gnu
    14. Configured with: ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
    15. Thread model: posix
    16. gcc version 7.4.0 (GCC) 
    17. [root@localhost ~]# which gcc
    18. /usr/local/bin/gcc
    19. [root@localhost ~]# 

    安装成功!!!

    Linux下使用gcc编译和运行C程序的简单操作

    1. 编辑C程序文件,名字为main.c

    1. #include
    2. int main(void) {
    3. printf("Hello World.\n");
    4. return 0;
    5. }

    2. 编译与运行

    (1)简单直接的方式

    如下命令会在当前目录下生成a.out文件,使用./a.out运行

    1. gcc main.c
    2. ./main

    (2)分步骤

    1. //源文件编译为可执行文件,生成main.o
    2. gcc -c main.c
    3. //main.o编译为可执行文件main
    4. gcc -o main main.o
    5. //使用./main命令运行
    6. ./main

    (3)一步执行(可设置生成文件的名称)

    1. //hello是输出的文件名
    2. gcc main.c -o hello
    3. //运行
    4. ./hello

    四、Linux环境变量配置

    环境变量文件

    首先是设置全局环境变量,对所有用户都会生效:

    /etc/profile: 此文件为系统的每个用户设置环境信息。当用户登录时,该文件被执行一次,并从 /etc/profile.d 目录的配置文件中搜集shell 的设置。一般用于设置所有用户使用的全局变量。

    /etc/bashrc: 当 bash shell 被打开时,该文件被读取。也就是说,每次新打开一个终端 shell,该文件就会被读取。

    用户级别的环境变量,用户可以覆盖全局变量,只对单个用户生效:

    ~/.bash_profile或 ~/.profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。

    用户可使用该文件添加自己使用的 shell 变量信息。另外在不同的LINUX操作系统下,这个文件可能是不同的,可能是 ~/.bash_profile, ~/.bash_login 或 ~/.profile 其中的一种或几种,如果存在几种的话,那么执行的顺序便是:~/.bash_profile、 ~/.bash_login、 ~/.profile。比如 Ubuntu 系统一般是 ~/.profile 文件。

    ~/.bashrc:  只对单个用户生效,当登录以及每次打开新的 shell 时,该文件被读取。

    ~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件。

    /etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系。

    ~/.bash_profile 是交互式、login 方式进入 bash 运行的。

    ~/.bashrc 是交互式 non-login 方式进入 bash 运行的。

    通常二者设置大致相同,所以通常前者会调用后者。

    此外,修改 /etc/environment 这个文件也能实现环境变量的设置。/etc/environment 设置的也是全局变量,从文件本身的作用上来说, /etc/environment 设置的是整个系统的环境,而/etc/profile是设置所有用户的环境。有几点需注意:

    • 系统先读取 etc/profile 再读取 /etc/environment(还是反过来?)
    • /etc/environment 中不能包含命令,即直接通过 VAR="..." 的方式设置,不使用 export 。
    • 使用 source /etc/environment 可以使变量设置在当前窗口立即生效,需注销/重启之后,才能对每个新终端窗口都生效。

    Linux的变量种类

    按变量的生存周期来划分,Linux变量可分为两类:

    1、永久的:需要修改配置文件,变量永久生效。

    2、临时的:使用export命令声明即可,变量在关闭shell时失效。

    修改 Linux 环境变量实例

    设置变量的三种方法

    1、在/etc/profile文件中添加变量【对所有用户生效且永久的】

    1. 用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。
    2. 例如:编辑/etc/profile文件,添加CLASSPATH变量
    3. # vi /etc/profile
    4. export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
    5. 注:修改文件后要想马上生效还要运行# source /etc/profile不然只能在下次重进此用户时生效。

    2、在用户目录下的.bash_profile文件中增加变量【对单一用户生效且永久的】
     

    1. 用VI在用户目录下的.bash_profile文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。
    2. 例如:编辑guok用户目录(/home/guok)下的.bash_profile
    3. $ vi /home/guok/.bash.profile
    4. 添加如下内容:
    5. export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
    6. 注:修改文件后要想马上生效还要运行$ source /home/guok/.bash_profile不然只能在下次重进此用户时生效。

    查看:

    1. source ~/.profile
    2. echo $PATH

    3、直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】

    1. export PATH=$PATH:/usr/local/hadoop/bin
    2. 在shell的命令行下直接使用[export 变量名=变量值]
    3. 定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。

    PATH声明,其格式为:

    1. PATH=$PATH: 1>: 2>: 3>:------: N>
    2. 你可以自己加上指定的路径,中间用冒号隔开。环境变量更改后,在用户下次登陆时生效。
    3. 如果想立刻生效,则可执行下面的语句:$source .bash_profile
    4. 需要注意的是,最好不要把当前路径”./”放到PATH里,这样可能会受到意想不到的攻击。
    5. 完成后,可以通过$ echo $PATH查看当前的搜索路径。这样定制后,就可以避免频繁的启动位于shell搜索的路径之外的程序了。
  • 相关阅读:
    (算法设计与分析)第二章递归与分治策略-第二节:分治和典型分治问题
    C#西门子S7 协议通过偏移量的方式读写PLC DB块
    PMP®|对如何做好项目管理的几点建议
    推荐一个python、AI学习社区:ShowMeAI
    Windows Ubuntu子系统使用USB教程
    辅助驾驶功能开发-执行器篇(03)-Mobileye Control Requirements
    深信服SG上网优化管理系统存在任意文件读取漏洞 附POC
    UE5 - ArchvizExplorer - 数字孪生城市模板 -学习笔记
    maven的下载以及配置的详细教程(附网盘下载地址)
    Docker安装和配置nginx服务
  • 原文地址:https://blog.csdn.net/qq_35029061/article/details/126209999