软件包管理

1、查询命令java来自哪个rpm包。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@node01 ~]#type java
java is /usr/bin/java
[root@node01 ~]#rpm -qf /usr/bin/java
file /usr/bin/java is not owned by any package
```
**2、yum的配置和使用,包括yum仓库的创建。**
```bash
[root@node01 ~]#vi /etc/yum.conf
yum主配置文件。
```
***利用centos安装光盘创建局域网仓库***
a、安装Apache:
```bash
[root@node01 ~]#yum -y install httpd

b、在/var/www/html/目录下创建挂载点。

1
2
3
4
5
6
7
8
9
10
11
[root@node01 ~]#cd /var/www/html/
[root@node01 /var/www/html]#mkdir centos/{6,7}/os/x86_64
[root@node01 /var/www/html]#tree
.
└── centos
├── 6
│   └── os
│   └── x86_64
└── 7
└── os
└── x86_64

c、在虚拟机增加两个光驱,分别加载centos6和centos7的镜像,将两个镜像分别挂载到上述两个目录中。

1
2
3
4
[root@node01 /var/www/html]#mount /dev/sr1 /var/www/html/centos/6/os/x86_64/
mount: /dev/sr1 is write-protected, mounting read-only
[root@node01 /var/www/html]#mount /dev/sr0 /var/www/html/centos/7/os/x86_64/
mount: /dev/sr0 is write-protected, mounting read-only

d、开启Apache服务。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
[root@node01 /var/www/html]#systemctl start httpd
[root@node01 /var/www/html]#ps aux |grep httpd
root 2332 0.6 0.3 230376 5164 ? Ss 09:54 0:00 /usr
apache 2333 0.0 0.2 232460 3148 ? S 09:54 0:00 /usr
apache 2334 0.0 0.2 232460 3148 ? S 09:54 0:00 /usr
apache 2335 0.0 0.2 232460 3148 ? S 09:54 0:00 /usr
apache 2336 0.0 0.2 232460 3148 ? S 09:54 0:00 /usr
apache 2337 0.0 0.2 232460 3148 ? S 09:54 0:00 /usr
root 2339 0.0 0.0 112704 972 pts/0 R+ 09:54 0:00 grep
```
e、在客户端备份原有yum源,新建一个以.repo结尾的yum源
```bash
[root@node01 ~]#mkdir /etc/yum.repos.d/bak
[root@node01 /var/www/html]#mv /etc/yum.repos.d/* /etc/yum.repos.d/bak/
[root@node01 /var/www/html]#vi /etc/yum.repos.d/base.repo
[root@node01 /var/www/html]#cat /etc/yum.repos.d/base.repo
[base]
name=base
baseurl=http://172.18.132.240/centos/$releasever/os/$basearch/
gpgurl=http://172.18.132.240/centos/$releasever/os/$basearch/
#baseurl=file:///app/httpd/htdocs/centos/7/os/x86_64
#gpgcheck=0
#gpgurl=file:///app/httpd/htdocs/centos/$releasever/os/$basearch
```
按如上方式配置好之后,一个基于centos安装光盘的局域网yum源就配置好了。可以在客户端使用 ***yum repolist*** 查看是否生效。
3、**编写系统初始化脚本 reset.sh,包括别名,提示符颜色,yum仓库配置文件,安装安装tree,ftp,lftp,telnet等包**
```bash
[root@node01 /data/bin]#cat reset.sh
echo PS1="\[\e[1;35m\][\u@\h \w]\\$\[\e[0m\]" >> /root/.bashrc
echo "alias scandisk='echo - - - > /sys/class/scsi_host/host2/scan'" >> /root/.bashrc
cat > CentOS-Bsse.repo << EOF
[base]
name=base
baseurl=http://172.18.132.240/centos/$releasever/os/$basearch/
gpgurl=http://172.18.132.240/centos/$releasever/os/$basearch/
EOF
yum -qy install tree ftp lftp telnet
```
**4、在centos7上编译安装Apache2.4源码包,并启动此服务。**
a、下载Apache源码包:
```bash
[root@node01 /data]#wget http://mirrors.shu.edu.cn/apache//httpd/httpd-2.4.35.tar.bz2
```
b、解压httpd-2.4.35.tar.bz2
```bash
[root@node01 /data]#tar -xf httpd-2.4.35.tar.bz2
```
c、进入解压目录执行编译安装,需要安装相关依赖库,之后编译安装Apache。
```bash
[root@node01 /data]#yum -y install apr-devel apr-util-devel pcre-devel openssl-devel
[root@node01 /data]#yum -y groupinstall "development tools"
[root@node01 /data]#cd httpd-2.4.35/
[root@node01 /data/httpd-2.4.35]#./configure --prefix=/app/httpd-2.4.35 --sysconfdir=/etc/httpd24 --enable-ssl --disable-status
[root@node01 /data/httpd-2.4.35]#make
[root@node01 /data/httpd-2.4.35]#make install

d、将Apache启动脚本加入环境变量:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
[root@node01 /data/httpd-2.4.35]#echo 'PATH=/app/httpd/bin:$PATH' >> /etc/profile.d/httpd.sh
```
e、创建apache用户并将httpd进程用户改为apache:
```bash
[root@node01 /data/httpd-2.4.35]#useradd -r -d /var/www/ -s /sbin/nologin -u 48 apache
[root@node01 ~]#cat /etc/httpd24/httpd.conf |egrep "^[User|Group]"
User apache
Group apache
```
f、启动apache服务:
```bash
[root@node01 ~]#apachectl start
[root@node01 ~]#ps aux |grep httpd
root 3727 0.0 0.1 72788 2240 ? Ss 10:55 0:00 /app/httpd-2.4.35/bin/httpd -k start
apache 3728 0.0 0.3 363836 4284 ? Sl 10:55 0:00 /app/httpd-2.4.35/bin/httpd -k start
apache 3729 0.0 0.3 363836 4288 ? Sl 10:55 0:00 /app/httpd-2.4.35/bin/httpd -k start
apache 3730 0.0 0.3 429372 4284 ? Sl 10:55 0:00 /app/httpd-2.4.35/bin/httpd -k start
```
出现上述信息说明源码编译安装Apache已经成功。
# 磁盘存储和文件系统
**1.创建一个2G的文件系统,块大小为2048byte,预留1%的可以空间,文件系统格式为ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,并且默认有acl挂载选项。**
a、创建一个2G的文件以供实验,并在该文件上创建ext4文件系统:
```bash
[root@node01 ~]#dd if=/dev/zero of=ext4file bs=1M count=2048
[root@node01 ~]#mkfs.ext4 -b 2048 -L test -m1 ext4file
```
b、将开机自动挂载信息写入/etc/fstab:
```bash
[root@centos6 /data]#cat /etc/fstab |grep "/test"
UUID=b1d9dd07-681b-43d5-a95a-e55e5b8aaf8a /test ext4 loop,acl 0 0
```
**2.写一个脚本,完成如下功能:(1)列出当前系统识别到的所有磁盘设备,(2)如果磁盘数量为1,则显示其空间使用信息,否则显示最后一个磁盘上的空间使用信息**
```bash
[root@node01 /data/bin]#cat findfs.sh
ls /lib/modules/`uname -r`/kernel/fs
echo "####################################################"
num=`ls /dev/sd?|wc -l`
[ $num -eq 1 ] && df |grep `ls /dev/sd?` || df |grep `ls /dev/sd?|tail -1`
```
**3.将CentOS6的CentOS-6.10-x86_64-bin-DVD1.iso和CentOS-6.10-x86_64-bin-DVD2.iso两个文件,合并成一个CentOS-6.10-x86_64-Everything.iso文件,并将其配置为yum源。**
a、将centod6的两张盘放入虚拟光驱并挂载。
```bash
[root@centos6 /data]#mount /dev/sr0 /mnt/cdrom/
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@centos6 /data]#mount /dev/sr1 /mnt/media/
mount: block device /dev/sr1 is write-protected, mounting read-only
```
b、在/data目录下新建centos6_1.iso文件夹,并将/mnt/cdrom中的所有文件复制到该文件夹,然后将/mnt/media/Packages文件夹中的所有的rpm包移动到此目录,并将TRANS.TBL文件排序后合二为一。
```bash
[root@centos6 /data]#cp -av /mnt/cdrom/* centos6_1.iso/
[root@centos6 /data]#cp /mnt/media/Packages/*.rpm centos6_1.iso/Packages/
[root@centos6 /data]#cat /mnt/media/Packages/TRANS.TBL >>centos6_1.iso/Packages/TRANS.TBL
[root@centos6 /data]#mv centos6_1.iso/Packages/TRANS.TBL{,.bak}
[root@centos6 /data]#sort centos6_1.iso/Packages/TRANS.TBL.bak >centos6_1.iso/Packages/TRANS.TBL
[root@centos6 /data]#rm -f centos6_1.iso/Packages/TRANS.TBL.bak

c、将centos6_1.iso文件夹制作成centos6.iso文件,并挂载到/mnt/media文件夹下。(这里为手动使用mount命令临时挂载,如要开机自动挂载需要写入/etc/fstab文件。)

1
2
[root@centos6 /data]#mkisofs -r -o centos6.iso centos6_1.iso/
[root@centos6 /data]#mount -o loop centos6.iso /mnt/media/

可使用如下方式实现开机自动挂载:

1
2
[root@centos6 /data]#cat /etc/fstab
UUID=93c43225-f85b-4cd3-87e1-9c94a08fb70e /mnt/media iso9660 loop 0 0

d、配置yum配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@centos6 /data]#cat /etc/yum.repos.d/base.repo 
[base]
name=base
baseurl=file:///mnt/media
gpgcheck=0
[root@centos6 /data]#yum clean all
Loaded plugins: fastestmirror, security
Cleaning repos: base
Cleaning up Everything
Cleaning up list of fastest mirrors
[root@centos6 /data]#yum repolist
Loaded plugins: fastestmirror, security
Determining fastest mirrors
base | 4.0 kB 00:00 ...
base/primary_db | 4.7 MB 00:00 ...
repo id repo name status
base base 6,713
repolist: 6,713

至此,一个将两张光盘合为一个yum本地yun仓库的方法已经实现并且可用。如果要将该yum源作为局域网yum源使用,需安装httpd服务,并将centos6.iso挂在到httpd的相关目录下,有关httpd的安装上述题目中有详细步骤,这里不在赘述。
4.创建一个可用空间为1G的RAID1设备,文件系统为ext4,有一个空闲盘,开机可自动挂载至/backup目录。
a、在磁盘上使用fdisk命令创建三个1G空间的分区。
b、将三个分区组合成raid1,并将挂在信息写入/etc/fstab实现开机自动挂载:

1
2
3
4
[root@centos6 /data]#mdadm -C -n2 -x1 -l 1 /dev/md0 /dev/sda{6,7,8
[root@centos6 /data]#blkid /dev/md0
/dev/md0: UUID="8f55f137-4e8f-4650-9afc-3b8f2857d2f7" TYPE="ext4"
[root@centos6 /data]#echo "UUID=8f55f137-4e8f-4650-9afc-3b8f2857d2f7 /backup ext4 defaults 0 0">>/etc/fstab

5.创建由三块硬盘组成的可用空间为2G的RAID5设备,要求其chunk大小为256k,文件系统为ext4,开机可自动挂载至/mydata目录。
a、在centos虚拟机内新增三块容量为20G的硬盘以共实验,并在每块硬盘上使用fdisk命令创建一个容量为2G的分区。

1
2
3
4
5
6
7
[root@node01 ~]#lsblk
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 1G 0 part
sdc 8:32 0 20G 0 disk
└─sdc1 8:33 0 1G 0 part
sdd 8:48 0 20G 0 disk
└─sdd1 8:49 0 1G 0 part

b、利用这三个分区组合成raid5并实现开机自动挂载。

1
2
3
4
5
6
7
[root@node01 ~]#mdadm -C -l5 -n3 -c 256 /dev/md2 /dev/sd{b,c,d}1
mdadm: array /dev/md2 started.
[root@node01 ~]#mkfs.ext4 /dev/md2
Writing superblocks and filesystem accounting information: done
[root@node01 ~]#blkid /dev/md2
/dev/md2: UUID="4a1e0a12-6a0c-47cf-8a27-3fe9f062703f" TYPE="ext4"
[root@node01 ~]#echo "UUID=4a1e0a12-6a0c-47cf-8a27-3fe9f062703f /mydata ext4 defaults 0 0" >> /etc/fstab

6.创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小为16MB,而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录
a、添加两个大小为20G的硬盘并在每个硬盘创建一个10G大小的分区:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
[root@node01 ~]#lsblk
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 1G 0 part
└─sdb2 8:18 0 10G 0 part
sdc 8:32 0 20G 0 disk
├─sdc1 8:33 0 1G 0 part
└─sdc2 8:34 0 10G 0 part
```
b、创建vg,在vg中创建lv,并实现挂载。
```bash
[root@node01 ~]#pvcreate /dev/sd{b,c}2
Physical volume "/dev/sdb2" successfully created.
Physical volume "/dev/sdc2" successfully created.
[root@node01 ~]#pvs
PV VG Fmt Attr PSize PFree
/dev/sdb2 lvm2 --- 10.00g 10.00g
/dev/sdc2 lvm2 --- 10.00g 10.00g
[root@node01 ~]#vgcreate testvg /dev/sd{b,c}2
Volume group "testvg" successfully created
[root@node01 ~]#vgdisplay
--- Volume group ---
VG Name testvg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size <19.97 GiB
PE Size 16.00 MiB
Total PE 1278
Alloc PE / Size 0 / 0
Free PE / Size 1278 / <19.97 GiB
VG UUID SEUFJ4-70KX-Lo8o-Xysa-3EEj-sv0z-8jLBaI
[root@node01 ~]#lvcreate -L 5G -n testlv testvg
Logical volume "testlv" created.
[root@node01 ~]#mkfs.ext4 /dev/testvg/testlv
[root@node01 ~]#blkid /dev/testvg/testlv
/dev/testvg/testlv: UUID="e51b109d-2505-4249-80a3-e607ae4c476c" TYPE="xfs"
[root@node01 ~]#mkdir /users
[root@node01 ~]#mount /dev/testvg/testlv /users/
[root@node01 ~]#df /users/
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/testvg-testlv 5232640 32944 5199696 1% /users
```
**7.新建用户archlinux,要求其家目录为/users/archlinux,而后su切换至archlinux用户,复制/etc/pam.d目录至自己的家目录**
a、创建用户:
```bash
[root@node01 ~]#useradd -d /users/archlinux archlinux
[root@node01 ~]#getent passwd archlinux
archlinux:x:1007:1010::/users/archlinux:/bin/bash
```
b、切换用户并执行剩余操作:
```bash
[root@node01 ~]#su - archlinux
[archlinux@node01 ~]$ cp -a /etc/pam.d/* .
```
**8.扩展testlv至7G,要求archlinux用户的文件不能丢失**
a、扩展testlv的容量为7G

```bash
[root@node01 ~]#lvextend -L 7G /dev/testvg/testlv
Size of logical volume testvg/testlv changed from 5.00 GiB (320 extents) to 7.00 GiB (448 extents).
Logical volume testvg/testlv successfully resized.
[root@node01 ~]#resize2fs /dev/testvg/testlv
```
经过上述操作,已经实现对testlv的在线扩容,并且archlinux用户文件没有丢失。
**9.收缩testlv至3G,要求archlinux用户的文件不能丢失**
```bash
[root@centos6 ~]#umount /users/
[root@centos6 ~]#e2fsck -f /dev/testvg/testlv
[root@centos6 ~]#resize2fs /dev/testvg/testlv 3G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/testvg/testlv to 786432 (4k) blocks.
The filesystem on /dev/testvg/testlv is now 786432 blocks long.
[root@centos6 ~]#mount /dev/testvg/testlv /users/
[root@centos6 ~]#ls /users/archlinux/
abrt-cli-root remote
atd run_init
chfn runuser
chsh runuser-l
config-util screen
```
经过试验,在缩减容量后,用户archlinux的数据并没有丢失情况发生,暂定为正常。
**10.对testlv创建快照,并尝试基于快照备份数据,验证快照的功能**
a、给testlv创建快照
```bash
root@centos6 ~]#lvcreate -n testlv_snap -s -p r -L 1G /dev/testvg/testlv
Logical volume "testlv_snap" created.
[root@centos6 ~]#lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
testlv testvg owi-aos--- 3.00g
testlv_snap testvg sri-a-s--- 1.00g testlv 0.00

b、将lv快照挂在到/mnt,删除archlinux用户家目录下的文件做测试。

[root@centos6 ~]#mount /dev/testvg/testlv_snap /mnt/
mount: block device /dev/mapper/testvg-testlv_snap is write-protected, mounting read-only
[root@centos6 ~]#rm -f  /users/archlinux/sudo 
[root@centos6 ~]#ls /mnt/archlinux/sudo
/mnt/archlinux/sudo

从上述实验看出,删除archlinux用户家目录下的sudo文件后,在快照testlv_snap中仍能看到该文件,起到了快照的功能,实验结束。