做一个小型的 Linux 系统来玩玩,自己安装、自己整理、自己管理等等,测试一下自己真的了解 Linux 了嘛?
从学期开始学到这边之后,如果每堂课后面的习题都有完成的话,那么你大概已经可以掌握 Linux 操作系统了。 接下来,我们将介绍如何使用最少软件的功能,来达成你所需要的服务器环境,注意喔,是『服务器』环境,而非桌面电脑。 其实重点在安装时的分割功能、软件最小安装、安装完毕的初始设置、系统的整理与简易调整,最终就是处理服务器的各项用途了。 我们还没有实际操作过服务器的各项设置,不过这章内容搞定之后,你大概也能够架设系统缺省的 Server 了!
你需要 Linux 做什么呢?以鸟哥来说,我的 Linux 大部分都用来做网络服务器、办公室防火墙系统、科学计算的基本操作系统、虚拟化的基本系统等等任务。 不同的任务所需要的硬件资源并不相同,同时,所需要提供的服务当然也差异相当大。所以,安装 Linux 之前,先确认你的用途为宜!
虽然说目前 PC 性能强大且便宜,所以 PC 作为 Linux server 的硬件资源应该是毋庸置疑的。不过,某些特别的状况下, PC 的资源要不是不够力,就是太过头了!
举例来说,现在的物连网 (Internet Of Things) 需要很多的侦测器 (sensors), 但这些侦测器可能需要一部小型 server 来汇整数据与传输数据,这个 server 恐怕是需要放在户外的、比较恶劣的工作环境下! 此时,买一部配备完整的 PC 看起来是性能太好,但是维护不易啊~光是电源怎么牵到户外来,就够伤脑筋的了。 这时,如果一台小小的树莓派可以处理的话,那应该使用树莓派会比较好,又省电、又便宜、又方便抽换的维护。
所以,设计你的服务器主机硬件时,应该要考量实际的需求,这样才会有较佳的搭配应用。底下鸟哥就自己的常见使用环境给予建议, 请读者们自行设计出适合自己的主机资源。
某些计算或者是服务需要较高等级的主机系统,此时可能需要购买到多内核 Xeon 等级以上的 CPU,搭配高性能网卡 (最好内置 10G 网卡), 会比较适合。以鸟哥为例,我用来计算空气品质模式的系统,就用了 3 部双 CPU 的主机,最高端的那部系统为 10 内核 20 绪 的 CPU 两颗, 因此一台就会有 20 核 40 绪,搭配 128GB 的内存,以及实体磁盘数组卡,跑模式也还差不多可靠。
如果要做为数据库环境使用,那也应该要使用比较好的主机资源,因为数据库的运算通常会消耗很大量的 CPU 资源。 同时,内存最好也要大一些,可能的话,将某些数据库数据写入内存中,会更加速运算。 因此,繁重的数据库运算也需要较高性能的主机系统。
一般来说,底下的系统需要较高运算性能与较大内存容量:
某些高容量需要的服务,包括文件服务器 (如 Samba, FTP, HTTP 等等) 以及科学计算的结果输出 (例如空品模式、大气模式等等), 还有云端虚拟机的虚拟磁盘等,都会用到很多磁盘容量。这时,考量到高速还是高容量,都需要有磁盘容错的机制存在, 否则机器损坏不打紧,数据不见才烦恼。
实际上线的系统,最好还是使用较高规格的实体磁盘数组卡来协助比较妥当,除了支持热拔插的功能,磁盘数组卡上面的高速缓存, 也对读写性能有帮助。另外,如果只是数据存放 (如 Samba, FTP, 科学计算的结果输出) ,建议使用 RAID6 等级来处理即可, 以前鸟哥都用 RAID5,由于同时死掉两颗磁盘的几率还是存在的,因此现在都倾向于使用 RAID6 较佳。
如果是云端虚拟机所需要的磁盘,由于这些磁盘系统可能需要用在虚拟机的作业上,而不是单纯的数据存放, 因此如果能有 SSD 作为进一步缓存是最好,若没有的话,个人建议使用锯齿状的 RAID10 效果最好。 例如有八颗磁盘时,两两成对做成四个 RAID1 的系统,再将 4 个 RAID1 集成成一组 RAID0,实际使用的经验, 这样的读写效率会比 RAID5 好些,尤其是在随机访问的环境上。
一般的服务,包括 WWW 服务,以及非频繁读写的数据库环境 (包含在 WWW 系统内),或者是一般小型办公室的文件服务器, 大多使用 CPU 为 4 核 8 绪的 PC 等级产品即可。也就是说,绝大部分的中小企业,需要的就是一部 PC server 啦!
以物连网为例,一部树莓派就可以做很多事情,根本无须使用到 x86 架构的 PC。此外,若单纯作为用户端的接收设备, 树莓派或其他 Xapple pi 都可以符合这样的需求。最近学校单位若经费不足,在电脑教室内似乎也能够通过这种环境, 搭配共用的云端虚拟系统来组建一整间电脑教室,不但维护较为容易,经费支出应该也会比较节省。
不要怀疑,无论你是使用什么系统,有办法处理磁盘分割格式为 GPT,就以 GPT 为主!不要再用 MSDOS 的 MBR 模式。 再者,需要做什么样的分割,要分割成哪些目录的挂载,这就与你服务器的使用有关了。
如果是作为众多帐号使用的文件服务器 (一般中小型企业比较容易使用到的环境),建议 /home 一定要独自切出来, 此外,若可能的话,将这个 /home 做成 LVM 也是可行的方案 (但是备份方面请自行考量!),这样文件系统的缩放才有弹性。 而如果考量到未来可能会放大或缩小,那最好选用 EXT4 文件系统,因此目前 XFS 并不支持缩小文件系统的。
若有特殊需求需要用在非正规的目录底下,例如鸟哥经常介绍的 /data 目录,那么也请自行制作分割与文件系统的处置。
针对比较大容量的磁盘或分割,确实建议使用 XFS 文件系统,格式化会比较快,另外,XFS 在错误救援方面也颇为成熟, 对大文件来说,性能也不错,是可以考虑使用的文件系统。
若考虑都使用 CentOS 7 原本提供的服务与缺省的目录配置,则 /var 最好独自分割出来, 因为很多服务的数据产出都放置于 /var/lib 里面 (包括数据库系统),而邮件数据也是放置于 /var/spool/mail 里面的。
虽然磁盘分割还是依据服务器的用途而定,不过通常必须要有的分割大致有这些:
以学校的教学环境而言,若在无还原卡的环境下,要达到最大化资源应用,通常会在一个磁盘内进行多个磁盘分割,然后安装不同的操作系统, 最终以开机菜单来进入各个不同的操作系统,此即为多重开机环境的设计依据。
以前 CentOS 6 以前的 Linux 系统,缺省使用 EXT3/EXT4 这种 EXT 家族的文件系统,因此在进行 chainloader 的时候是不会出事的, 因为 CentOS 6 以前的系统,使用的 EXT 文件系统家族,都会预留出可以安装开机管理软件的区块 (boot sector)。不过新的 XFS 文件系统并没有预留! 所以 XFS 文件系统的 superblock 预留区块并没有包含 boot sector 的,因此无法安装开机管理程序。
因此,针对学校的一机多用途环境而言,若需要安装 Linux 操作系统与 Windows 操作系统共存的环境,建议 CentOS 的缺省文件系统最好修订为 EXT4 较佳。 而且较为有趣的是, CentOS 7 以后的系统,因为使用了 XFS 文件系统,因此开机过程中已经取消自动安装 boot loader 到 boot sector 的区块, 只会将 boot loader 安装到 MBR 区块而已。所以在安装完 CentOS 7 之后,可能需要手动安装 grub2 到 EXT4 的 boot sector 才行。
另外,读者应该知道安装操作系统的『顺序』是有关系的,因为最后安装的操作系统之开机管理程序会更新 MBR,因此最终的 MBR 是最后安装的那个操作系统所管理的。而在教学环境中,Linux 操作系统的开机管理程序可能会被胡乱修改, 因此可能造成无法顺利进入其他操作系统的窘境。根据经验,最好的方式是这样的:
其中,/dev/sda1 那个小 Linux 系统的目的是要维护整个单机系统的开机菜单,因此该系统一经安装就不要在更动他。 而根据上述流程的安排,最终开机菜单会被第三个 (也就是最后一个, /dev/sda3) 操作系统所管理。请依据正常流程开机, 然后在纯文本界面 (例如 tty2) 用 root 登录系统,之后使用底下的方法将 boot loader 安装到 boot setor 上面去。
若出现错误,可加入『--force --recheck --skip-fs-probe』等参数来处理看看。务必记得不要使用 XFS 文件系统才好。 处理完这部份之后,请拿出 CentOS 的原版光盘,进入本课程之前章节谈到的救援模式,然后 chroot 到第一个 /dev/sda1 的操作系统环境,接下来进行救援:
这样就可以完成整个多重操作系统的环境设置了。
读者会发现这个小章节中,无论是硬件还是初始环境的设置 (包括分割、文件系统选择、挂载资源的设计等等), 全部都与 Server 的用途有关。而无论硬件资源与初始环境设置,几乎都是一经确认就无法修改 (当然!), 因此,读者们在学习 Linux 之后,若有架设 Linux server 的需求,应该就您服务器的用途来考量, 将经费花在刀口上,会比较妥当。
此外,就如同 CentOS 每个版本的支持度都长达 5~7 年之久,你 Server 硬件的使用年限,最好也能够是 5~7 年以上。 所以,读者在设计这些硬件资源与初始环境配置时,需要缺省考量 5 年内的使用情况,预留升级空间 (包括 LVM 文件系统、 硬件的内存插槽是否有剩余、磁盘是否能够后续加挂、额外的插槽是否足够未来的设备使用等等), 这样才是较为完整的规划。
一般建议强迫系统用 GPT 分割格式,然后使用最小安装模式,安装完毕之后,再以文本模式的方式创建好网络, 持续使用纯文本模式进行各项设置工作,初始环境设置完成后,就能够开始处理你的服务器架设了。
假设这是一部通过网络芳邻提供的文件服务器,同时提供个人化网页设置的网页服务器,两者分别使用 Samba 与 httpd 服务。 另外,该服务器预计提供这些功能:
分析上面的数据,我们大概可以知道磁盘分割时,最好能够分割的目录应该有哪些?
目前可以使用的虚拟机硬件资源中,CPU 有两颗、内存仅有 2GB,磁盘也只有 40G 的容量而已,根据这样的系统,我们大致拟定了这样的分割:
之所以使用 LVM 是考量到未来的容量扩充之故。至于文件系统则通通使用 XFS (因为不是多重操作系统之故)。
根据本章节的规划需求,在整体安装流程中,读者比较需要注意的安装流程项目有底下几个点:
将原版光盘放入光盘或 USB 之后,系统重新开机,并选择光盘开机,如此则会进入安装模式。在此安装模式下,选择『Install CentOS Linux 7』的菜单, 按下 [tab] 按钮后,在出现的更改内核参数画面中,最后方加入 inst.gpt 的参数即可按下 [enter] 继续。
经过语系挑选 (选择了中文、繁体中文台湾)、日期时间挑选了亚洲台北、键盘配置选择了汉语,并请先进入『键盘配置』的项目, 点击『选项』,请勾选了『 Ctrl+Shift 』项目,未来切换中文输入法时,会较为简易。如底下的示意图:
由于我们不是内核开发者,因此个人建议可以将内核出错时的错误侦测信息功能关闭,请关闭掉 KDUMP 服务,关闭方式如下:
按下『安装目的地』选项,你会发现有一个 30~40G 左右的磁盘在虚拟机上,请勾选该磁盘,之后左下方会出现自动配置与自行配置, 请选择自行配置的项目,最终再按下左上角的完成,即可进入磁盘分割的画面了。
依序选择『标准分割』与『LVM』来创建起 15.2.1 小节所讨论的磁盘分割格式。最终磁盘分割完毕应该如下所示:
若一切都顺利处理完毕,这才开始按下安装。最终挑选的项目会有点像这样:
当然要记得安装过程中,设置好 root 的密码,并且为自己创建一个日常操作的一般帐号,这个帐号务必勾选『成为管理员』的项目, 结果画面有点像这样:
因为系统为最小安装,因此安装过程应该非常快速。安装完毕后,请移除光盘系统,然后重新开机吧。
读者会发现,本章特意不在安装过程中设置好网络,原因是网络的设置还是需要一定的经验,因此建议还是安装完毕后再来设置, 印象会比较深刻。
假设这部服务器所在的环境之网络设置要求如下:
在你使用一般帐号登录此新安装的系统,并且 sudo su - 切换成为 root 之后,依旧可以使用 nmcli 指令来完成各项设置。 只是最小安装缺省并没有安装 bash-completion,因此无法使用 [tab] 来补齐各项参数,因此你得要自行手动输入参数才行。
在设置好了网络参数,并且验证过没有问题之后,建议用户可以关闭 NetworkManager 这个服务。 此服务大部分用在台式机,对于 IP 不会随意变动的服务器来说,可以说是非必要的服务。因此建议将此服务关闭。 此服务关闭后,虚拟机的网络环境还是正常无误的,并不会被干扰。
[root@station ~]# systemctl stop NetworkManager [root@station ~]# systemctl disable NetworkManager
安装好系统的第一个动作,就是升级你的系统!要升级系统最好依据第 12 堂课的建议,选择最近的 yum server 设置, 这样软件安装速度才会快速。因此请自行处理:(因为最小安装并没有安装 vim ,因此你只能使用 vi 来修改喔!)
本课程大多使用 vim 以及选项会自动补齐的功能,该功能主要通过 vim-enhanced 以及 bash-completion 软件所提供, 因此读者可以自行安装这两个软件来恢复自己常用的工作环境。
[root@station ~]# yum install vim-enhanced bash-completion
此时 vim 立即可以使用了,但如果要在不注销的情况下立即让 bash-completion 生效,那就得要 source /etc/profile.d/bash_completion.sh 来加载环境才行。不过还是建议可以注销再登录来刷新操作环境较佳。另外,探索网络的工具如 netstat 等,是由 net-tools 所提供的, 所以也得要安装才好。
[root@station ~]# yum install net-tools
网络服务或者是非必要的服务,对于服务器来说,当然是越少越好。本章使用最小安装并且安装了 net-tools 之后, 使用 netstat -tlunp 检查网络服务,可发现网络服务仅剩下 port 22, 25, 323 亦即 sshd, postfix, chronyd 这三个服务会启动网络端口口。 由于 chronyd 是即时更新系统时间,我们可以通过 ntpdate 去定期校正时间,而不必一直启动 chronyd 这个服务,因此在时间校正的设置上面, 可以修订成为如下的模样即可:
[root@station ~]# systemctl stop chronyd [root@station ~]# systemctl disable chronyd [root@station ~]# yum -y install ntpdate [root@station ~]# vim /etc/crontab 5 2 * * * root ntpdate ntp.ksu.edu.tw &> /dev/null [root@station ~]# netstat -tlunp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 694/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 822/master tcp6 0 0 :::22 :::* LISTEN 694/sshd tcp6 0 0 ::1:25 :::* LISTEN 822/master
sshd 与 postfix (上表中 master 的项目) 是不可或缺的服务,其中 port 25 缺省只对内部网络放行 (127.0.0.1),所以可以不理他。 但是 sshd 缺省对整个 Internet 放行,最好能够加以限制。因此,参考本课程第 11 堂课的介绍,让 ssh 的服务不在放行服务中, 但是将 sshd 放行于内部区网,亦即针对 172.16.0.0/16 这个网段放行 ssh 服务。
同时不要忘记,未来这部服务器的服务中,http 为针对全世界放行,samba 为针对内部网络放行,ssh 也针对内网放行, 所以最终你缺省的防火墙内容应该会像底下这样才是对的:
[root@station ~]# firewall-cmd --list-all --permanent public target: default icmp-block-inversion: no interfaces: sources: services: http https ports: protocols: masquerade: no forward-ports: sourceports: icmp-blocks: rich rules: rule family="ipv4" source address="172.16.0.0/16" service name="ssh" accept rule family="ipv4" source address="172.16.0.0/16" service name="samba" accept
请读者不要忘记了,firewall-cmd 的使用上,主要分为立即性与永久的设置值 (--permanent),读者们必须要将所有的设置写入设置值才行。
最后再来确认一下分割的状态是否吻合当初设计的情况:
[root@station ~]# df -Th | grep -v tmpfs
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 5.0G 1.1G 4.0G 22% /
/dev/vda2 xfs 1014M 148M 867M 15% /boot
/dev/mapper/centos-home xfs 12G 33M 12G 1% /home
/dev/mapper/centos-srv xfs 5.0G 33M 5.0G 1% /srv
/dev/mapper/centos-var xfs 5.0G 270M 4.8G 6% /var
这应该是没问题的情况。不过,由于未来用户的文件容量是有限制的,因此在 /home 的文件系统挂载参数中,应该要加入 usrquota 才对。 因此最终使用 mount 去查阅 /home 的数据时,应该要出现如下的情况才对。
[root@station ~]# mount | grep home /dev/mapper/centos-home on /home type xfs (rw,relatime,seclabel,attr2,inode64,usrquota,grpquota) [root@station ~]#
如前所述,这里假设你的服务器为一般企业内部的文件服务器及个人化首页之网页服务器,且为多人共用的服务器系统。 同时因应文件系统的适当分配,因此会加上磁盘配额的限制。因此这里就得要有一些帐号建置的相关注意事项才行。
本服务器假设要提供 http 的网络服务,同时提供区网内网芳服务。不过由于网芳 (Samba) 的设置较为复杂, 因此本章主要以 http 网页服务器作为简易的说明。
Web 服务使用的是 httpd 这只程序,请安装,然后启动即可顺利提供服务。
[root@station ~]# yum -y install httpd [root@station ~]# systemctl start httpd [root@station ~]# systemctl enable httpd
由于本服务器并没有安装任何的图形界面,因此无法使用图形界面的浏览器。不过 CentOS 上面有提供多种文本界面浏览器, 例如 elinks 就是其中一个颇为知名的文本界面浏览器之一。
[root@station ~]# yum -y install elinks [root@station ~]# links http://localhost
你可以在 links 的画面中,按下 [q] 来离开,方向键上下为在超链接项目中移动,左右键为前一个、后一个页面, [esc] 可以调用 links 菜单。
关于 httpd 你应该还需要知道的是:
假设 student 这个帐号需要管理 http://localhost/student/ 时,最简单的方法为使用如下的方式建置妥当:
[root@station ~]# cd /var/www/html [root@station html]# mkdir student [root@station html]# echo "I am student" > student/index.html [root@station html]# chown -Rv student student changed ownership of ‘student/index.html’ from root to student changed ownership of ‘student’ from root to student [root@station html]# ll -d student student/* drwxr-xr-x. 2 student root 24 6月 29 16:25 student -rw-r--r--. 1 student root 13 6月 29 16:25 student/index.html [root@station html]# links http://localhost/studnet
最终你应该会在 links 的画面中看到 I am student 的字样,那就代表成功了。
帐号的建置相当的简单,本训练教材第 10 堂课已有相当多的范例可以参考。现在本服务器除了要建置帐号之外,该帐号必须要能拥有 http://localhost/username/ 的网页子目录才行。同时,每个帐号在家目录最多仅能有 200MB 的容量,且超过 180MB 就需要提供警告。 此时,你可以使用底下的脚本来创建好每个用户,且提供用户缺省的帐密数据,同时强迫用户第一次使用系统时,需要变更密码才行。
[root@station ~]# vim account.sh #!/bin/bash for i in $(seq 1 20) do username="user${i}" password="${username}" useradd ${username} echo ${password} | passwd --stdin ${username} chage -d 0 ${username} xfs_quota -x -c "limit -u bsoft=180M bhard=200M ${username}" /home mkdir /var/www/html/${username} echo "I am ${username}" > /var/www/html/${username}/index.html chown ${username}:${username} -R /var/www/html/${username} done [root@station ~]# sh account.sh
同时,在不考虑资安的情境下,将整个用户的 quota 信息贴出于 /var/www/html/quota.html 底下, 同时列出目前每个用户在网页目录的磁盘使用量,最简易的方法可以这样做:
[root@station ~]# (echo "<pre>"; date; xfs_quota -x -c "report -ubh" /home; \ > du -sm /var/www/html/user*; echo "</pre>" ) > /var/www/html/quota.html [root@station ~]# links http://localhost/quota.html
顺利的话,你就能够看到系统上面每个用户的信息使用量。如果需要逐时分析该信息,请将上面的脚本写入 /etc/crontab 即可让系统自行更新。 最后,再考虑备份机制,这部简易的服务器就大致在可运作的情境下了。