Skip to content
This repository has been archived by the owner on Mar 22, 2022. It is now read-only.

ruleless/CentOS_Conf

Repository files navigation

安装 CentOS 后的系统配置及软件安装备忘

Linux 自举过程

启动第一步(加载BIOS)

当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。

启动第二步(读取MBR)

硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,别看地方不大,可里面却存放了预启动信息、分区表信息。

系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0x7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。

启动第三步(Boot Loader / Grub)

Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。

Boot Loader有若干种,其中Grub、lilo和spfdisk是常见的Loader。

我们以grub为例来讲解吧,毕竟用lilo和spfdisk的人并不多。

系统读取内存中的grub配置信息(一般为menu.lst或grub.lst),并依照此配置信息来启动不同的操作系统。

启动第四步(加载内核)

根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。

系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。

启动第五步(用户层init依据inittab文件来设定运行等级)

内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。

其实/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。Linux的运行等级设定如下:

  • 0: 关机
  • 1: 单用户模式
  • 2:无网络支持的多用户模式
  • 3:有网络支持的多用户模式
  • 4:保留,未使用
  • 5:有网络支持有X-Window支持的多用户模式
  • 6:重新引导系统,即重启

启动第六步(init进程执行rc.sysinit)

在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。如果你有兴趣,可以到/etc/rc.d中查看一下rc.sysinit文件,里面的脚本够你看几天的。

启动第七步(启动内核模块)

具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。

启动第八步(执行不同运行级别的脚本程序(/etc/rc.d/rc.$RUNLEVEL # $RUNLEVEL为缺省的运行模式))

根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。

启动第九步(执行/etc/rc.d/rc.local)

你如果打开了此文件,里面有一句话,读过之后,你就会对此命令的作用一目了然:

rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。

启动第十步(执行/bin/login程序,进入登录状态)

此时,系统已经进入到了等待用户输入username和password的时候了,你已经可以用自己的帐号登入系统了。

Linux 重要目录说明

根目录(/)下一般有如下目录

  • bin/ 可执行文件目录
  • sbin/ 与/bin/目录一样放置可执行文件,不过一般是root用户才用到的可执行文件。
  • usr/
  • boot/
  • etc/
  • proc/
  • dev/ 设备文件目录。
  • home/ 用户目录。
  • lib/ 或 lib64/ 库文件目录。
  • lost+found/ 回收目录。
  • media/
  • mnt/ 挂载设备对应的设备文件。
  • opt/
  • root/ root用户的用户目录。
  • selinux/
  • srv/
  • sys/ 系统目录。
  • tmp/ 临时目录。该目录的访问权限为0777,也就是说任何用户对该目录都有全部的访问权限。
  • var/

Make工具

我们可以利用 Make 工具帮助我们自动完成大部分繁琐且重复的配置及安装工作。大致上, Make 程序依如下流程工作:

if target is a leaf then
    return
fi

bExecuteCommand = false
if target isn not exists then
    bExecuteCommand = true
fi

for file in all dependency files; do
    make(file)
    if file is newer than target then
        bExecuteCommand = true
    fi
done

if bExecuteCommand then
    Execute Command
fi

操作系统安装

安装镜像获取

可从 https://www.centos.org/download/ 下载 CentOS 安装镜像。我用的是 CentOS 7。

操作系统安装

可选方式有:

  1. DVD光盘安装
  2. USB安装
  3. 安装到虚拟机中

镜像地址设置

可从 https://www.centos.org/download/mirrors/ 官网上查看有哪些可用的镜像地址。下面以将镜像地址设置为阿里云镜像来说明设置步骤:

  • step 1. 备份 当镜像失效时,可重新使用原始镜像
    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
        
  • step 2. 下载新的CentOS-Base.repo 到/etc/yum.repos.d/ 此处用的是阿里云镜像
    # CentOS 5
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
    # CentOS 6
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    # CentOS 7
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
        
  • step 3. 之后运行 yum clean all && yum makecache 生成缓存

另外需要说明的是,很多系统镜像在安装完成后默认是没有开启网络功能的,我们需要配置并开启网络功能后才能执行此步操作。

网络配置和管理

配置IP地址

目录/etc/sysconfig/network-scripts下有名为ifcfg-eth0的脚本,它配置了网络接口eth0的各项属性

HWADDR=00:0C:29:D4:D9:DD
TYPE=Ethernet
UUID=b9736563-22f5-42d5-9f41-9cd6c3e22683
ONBOOT=yes # 操作系统安装完成时,该选项默认为no,我们需要手工改为yes才能启用系统的网络功能
NM_CONTROLLED=yes
BOOTPROTO=static # 指定IP地址为静态IP(static)或动态IP(DHCP)
IPADDR=192.168.1.109 # IP地址(BOOTPROTO=static时有效)
NETMASK=255.255.255.0 # 子网掩码
GATEWAY=192.168.1.1 # 网关
DNS1=202.96.128.86
DNS2=202.96.134.33

配置DNS

/etc目录下有名为resolv.conf的脚本,由它来指定本机的DNS服务器

; generated by /sbin/dhclient-script
nameserver 202.96.128.166
nameserver 202.96.134.133

在 dhcp 模式下我们不用关注该文件,因为会系统会自动帮我们找到合适的DNS域名服务器;但在 static 模式下,我们就需要自己来维护该脚本了。

主机名称配置及IP映射

一般来说,我们可以通过文件 /etc/sysconfig/network 来永久地配置本机的主机名称,内容如下:

NETWORKING=yes
HOSTNAME=centos66

不过在 CentOS7 中,主机名称的配置放到了 /etc/hostname 文件中。

在完成上面的配置之后,我们的主机名称除了能在命令提示符中显示之外,似乎没有其他用处。我们希望主机名能替代具体的IP地址来使用,这就需要将主机名映射到具体的IP地址了。主机在请求域名解析服务的时候会先查看本机的 /etc/hosts 文件,如果请求的域名在该文件中有匹配行,那就直接返回该匹配行中的IP地址。/etc/hosts 文件中的内容形如:

127.0.0.1   rhel
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

常用命令

注意事项

安装 CentOS 7 时,选择了 minimal install 的话,是没有安装网络组件的。所以,ifconfig 之类的命令式没有的,在配置好网络功能后可以通过如下命令来安装网络组件:

yum install -y net-tools

另外也可以用 ip 命令来替代 ifconfig 使用。

/etc/init.d/network restart

若重新配置了IP和DNS可使用该命令使修改生效。

netstat

netstat命令用于显示网络连接、路由表和网络接口的信息,可以让用户查看系统当前的网络连接情况。

network命令各选项所对应的功能:

-a显示所有套接字的状态
-n打印数字IP地址
-o显示关联进程
-o打印路由选择表

traceroute

traceroute命令用于追踪网络包的发送路径。

tcpdump

用于网络抓包。

用户管理

在安装好操作系统并配置完网络地址后,接下来,我们在系统中添加普通用户。

添加用户的命令如下:

useradd user

之后为该用户设置密码:

passwd user

如果我们需要查看系统下的所有用户或组信息可用如下命令:

cat /etc/passwd查看所有用户信息
cat /etc/group查看所有组信息

有时候,普通用户需要临时做一些超级用户才有权限做的事情,例如,安装软件。我们可以通过赋予普通用户 sudoer 身份的方式来达到此目的。赋予普通用户 sudoer 身份只需在 /etc/sudoer 添加一行:

user    ALL=(ALL)    ALL

软件安装

版本管理软件

Git安装

yum install -y git

将本机的 SSH Key 注册到 GitHub

具体步骤如下:

  • step 1. 查看本机是否已有 SSH Keys 如果在目录 ~/.ssh 下有 id_rsa.pub 文件,则表明本机已有 SSH Keys,此时可以跳过第 2 步。
  • step 2. 生成新的 SSH Key 输入如下命令:
    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
        

    按照提示一步步往下走即可。

  • step 3. 将 SSH Key 添加到 ssh-agent
    ssh-add ~/.ssh/id_rsa
        
  • step 4. 将 SSH Key 添加到你的 GitHub 账户

执行完上面的操作我们就可以连接到个人的 GitHub 仓库了,我们可以先用如下命令测试一下:

ssh -T git@github.com

编译器

  • gcc/g++ 安装命令:
    yum install -y gcc gcc-g++
        
  • clang 早期的 CentOS 版本不能通过 yum 的方式安装 clang,所以只能通过源码安装。通过源码安装 clang 比较繁琐,依赖库多,编译也慢。而在 CentOS 7 中我们通过下面的命令就能完成 clang 的安装:
    yum install -y clang
        

Emacs

Emacs安装

  • 源码安装
    • step 1. 源码下载 打开链接 https://www.gnu.org/software/emacs/history.html ,下载 24.3 的版本。
    • step 2. 依赖库安装 Emacs24.3 所需的依赖库如下:
      yum -y groupinstall "Development Tools"
      yum -y install gtk+-devel gtk2-devel
      yum -y install libXpm-devel
      yum -y install libpng-devel
      yum -y install giflib-devel
      yum -y install libtiff-devel libjpeg-devel
      yum -y install ncurses-devel
      yum -y install gpm-devel dbus-devel dbus-glib-devel dbus-python
      yum -y install GConf2-devel pkgconfig
      yum -y install libXft-devel
              
    • step 3. 编译、安装 跟大部分 Linux 下开源软件的源码安装步骤一样:./configure && make && make install
  • yum 安装
    yum install -y emacs
        

Emacs 配置

参见 https://github.com/ruleless/emacscfg

一键安装

我们可以通过 Make 实现软件的一键安装,包括 Emacs 的自动配置。下面给出 Makefile 脚本:

.Phony:all
all:software

software:
    yum install -y gcc gcc-g++
    yum install -y clang
    yum install -y emacs

emacs:
    cd emacscfg && $(MAKE)

观察到,我们并没有在 Makefile 中写入 Git 的安装脚本。这是因为我们的 Makefile 文件是托管到 GitHub 中的,所以,我们需要先安装好 Git 之后才能签出该脚本文件;所以在执行该脚本文件的时候 Git 已安装到了系统中。

用户自定义配置

bash脚本

当我们执行命令 la ~ 时,会发下如下几个文件:

  • .bash\_profile .bash\_profile是关联具体用户的,它会在相关用户登录时被执行。我们可以在该文件中写入脚本程序来实现个性化配置。另外,使用 source 命令可使变更立即生效。
    # .bash_profile
    
    # Get the aliases and functions
    if [ -f ~/.bashrc ]; then
            . ~/.bashrc
    fi
    
    # User specific environment and startup programs
    PATH=$PATH:$HOME/bin:.
    export PATH
    
    # ssh start
    eval $(ssh-agent -s)
    ssh-add ~/.ssh/id_rsa
        
  • .bashrc 该文件实际是通过.bash\_profile来加载的,主要用于加载系统 /etc/bashrc 脚本以及配置命令别名等。
    # .bashrc
    
    # Source global definitions
    if [ -f /etc/bashrc ]; then
            . /etc/bashrc
    fi
    
    alias ll="ls -ls"
    alias la="ls -a"
    alias pa="ps -ejf"
    alias g="git"
    
    # User specific aliases and functions
        
  • .bash\_logout
    # ~/.bash_logout
        
  • .bash\_history 记录相关用户的历史命令。
    git st
    git add -A .
    git st
        

git

用户目录下有一个 .gitconfig 文件,我们可以通过修改该文件来实现我们的个性化定制。

一键配置

我们事先定义好个人的配置文件,然后,在 Makefile 写入安装程序,跟一键配置相关的 Makefile 脚本如下:

.Phony:all
all:conf

conf:
    cp ./bash/.bash_profile ~/
    cp ./bash/.bashrc ~/
    cp ./bash/.bash_logout ~/
    cp ./gitconf/.gitconfig ~/

总结

CentOS 是目前生产环境中常用的服务器系统,本文从开发人员角度出发,旨在构建基于 CentOS 7 的开发环境。本文所涉及的各个操作,步骤总结如下:

  • step 1. 网络配置。 CentOS 7 在 minimal 模式下安装完成时默认是关闭了网络功能的,我们需要将其打开并配置好网络地址,以便完成接下来的操作。
  • step 2. yum 镜像地址设置。 此步骤为可选,但在大陆使用原始的国外镜像地址貌似有点慢,所以强烈推荐使用国内镜像。
  • step 3. 添加普通用户。 就算是自己用来练习的操作系统也不要总是工作在 root 用户下,一是可以避免误操作,二是在生产环境下大部分人都没有服务器的根用户密码。添加了普通用户之后,我们可以通过远程工具连接服务器来完成接下来的操作。
  • step 4. 手工安装 Git,并将本机的 SSH Key 注册到 GitHub 上的个人账户上。
  • step 5. 签出我个人的 CentOS_Conf 仓库 地址: https://github.com/ruleless/CentOS_Conf ,该仓库下有我已经写好的 Makefile 安装脚本,执行 Make 即可进入自动安装。

执行完上面的操作之后,我们还需要手工安装一些必须得通过源码安装的软件。当前主要包括:

  • GNU Global GNU GLOBAL is a source code tagging system that works the same way across diverse environments, such as Emacs editor, Vi editor, Less viewer, Bash shell, various web browsers, etc.

About

CentOS 操作系统配置以及软件安装

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published