Preparation Set 5


Stratis

[root@serverX ~]# rpm -q stratisd 
stratisd-3.6.7-1.el9.aarch64
[root@serverX ~]# rpm -q stratis-cli
stratis-cli-3.6.0-1.el9.noarch
 
[root@serverX ~]# systemctl start stratisd
[root@serverX ~]# systemctl start start
[root@serverX ~]# systemctl start enable
 
# Create Pool
[root@serverX ~]# stratis pool create --help | less
[root@serverX ~]# stratis pool create loanpool /dev/nvme0n6 
[root@serverX ~]# stratis pool list 
Name              Total / Used / Free    Properties                                   UUID   Alerts
loanpool   2 GiB / 524 MiB / 1.49 GiB   ~Ca,~Cr, Op   4a9b1088-229c-4af9-98b5-f6b7585ae3bb   WS001 
 
# Add Partition to existing pool / Increase space in a pool 
[root@serverX ~]# stratis pool add-data loanpool /dev/nvme0n5p2
[root@serverX ~]# stratis pool list 
Name              Total / Used / Free    Properties                                   UUID   Alerts
loanpool   4 GiB / 530 MiB / 3.48 GiB   ~Ca,~Cr, Op   4a9b1088-229c-4af9-98b5-f6b7585ae3bb   
 
# Creating file system
[root@serverX ~]# stratis fs create loanpool eduloanfs 
[root@serverX ~]# stratis fs create loanpool homeloanfs 
[root@serverX ~]# stratis fs list 
Pool       Filesystem   Total / Used / Free / Limit            Created             Device                             UUID                                
loanpool   eduloanfs    1 TiB / 546 MiB / 1023.47 GiB / None   Oct 13 2024 10:15   /dev/stratis/loanpool/eduloanfs    116c4377-f431-4dd0-95bb-4fc7ff2fd086
loanpool   homeloanfs   1 TiB / 546 MiB / 1023.47 GiB / None   Oct 13 2024 10:15   /dev/stratis/loanpool/homeloanfs   bb3be8ae-0cac-433c-8cce-5b636bb539d3
 
# Mounting
[root@serverX ~]# vim /etc/fstab
/dev/stratis/loanpool/homeloanfs        /root/homeloan          xfs     defaults,x-systemd.requires=stratisd.service    0 0
/dev/stratis/loanpool/eduloanfs         /root/eduloan           xfs     defaults,x-systemd.requires=stratisd.service    0 0
 
[root@serverX ~]# systemctl daemon-reload 
[root@serverX ~]# mount -a 

Configure users skel with a welcome file and Documents dir for new users. And add a logged message when logged in.

[root@serverA skel]# pwd
/etc/skel
[root@serverA skel]# ls 
Documents  welcome
[root@serverA skel]# cat welcome 
Hello ! Welcome to the linux server. 
 
[root@serverA ~]# useradd sanjeeb 
[root@serverA ~]# passwd sanjeeb
 
[root@serverA sanjeeb]# vim .bashrc
[root@serverA sanjeeb]# tail -1 .bashrc
echo "Logged in to Sanjeeb !"
 
[root@serverA ~]# su - sanjeeb
Logged in to Sanjeeb !
[sanjeeb@serverA ~]$ ls
Documents  welcome

Change passwd expiration days to 10 with and warning 3 days before

[root@serverA ~]# chage -M 10 -W 3 sanjeeb
[root@serverA ~]# chage -l sanjeeb
Last password change					: Oct 13, 2024
Password expires					: Oct 23, 2024
Password inactive					: never
Account expires						: never
Minimum number of days between password change		: 0
Maximum number of days between password change		: 10
Number of days of warning before password expires	: 3

SSH Access to root

# Method 1 
[root@serverA ~]# vim /etc/ssh/sshd_config
PermitRootLogin yes
[root@serverA ~]# systemctl restart sshd 
 
# Method 2 
# Login to another user and switch account 
sanjeeb@Sanjeebs-MacBook-Pro ~ % ssh sanjeeb@192.168.208.136
sanjeeb@192.168.208.136's password: 
Last login: Sun Oct 13 17:00:48 2024
Logged in to Sanjeeb !
[sanjeeb@serverA ~]$ su - root
Password: 
Last login: Sun Oct 13 17:07:49 +0545 2024 from 192.168.208.1 on pts/1
Last failed login: Sun Oct 13 17:08:00 +0545 2024 from 192.168.208.1 on ssh:notty
There was 1 failed login attempt since the last successful login.

Create 4 users, anna, john, student1 and Robert. anna and john are member of students group, config all users with passwd “toor”

 
[root@serverA ~]# groupadd students
[root@serverA ~]# tail -1 /etc/group
students:x:1001:
 
[root@serverA ~]# echo "toor" | passwd --stdin anna
Changing password for user anna.
passwd: all authentication tokens updated successfully.
[root@serverA ~]# echo "toor" | passwd --stdin john
Changing password for user john.
passwd: all authentication tokens updated successfully.
[root@serverA ~]# echo "toor" | passwd --stdin student1
Changing password for user student1.
passwd: all authentication tokens updated successfully.
[root@serverA ~]# echo "toor" | passwd --stdin Robert
Changing password for user Robert.
passwd: all authentication tokens updated successfully.
 
[root@serverA ~]# usermod -G students anna
[root@serverA ~]# usermod -G students john
 
[root@serverA ~]# groups anna
anna : anna students
[root@serverA ~]# groups john
john : john students
 
[root@serverA ~]# cat /etc/passwd | grep -E 'anna|john'
anna:x:1001:1002::/home/anna:/bin/bash
john:x:1002:1003::/home/john:/bin/bash
 

Robert is part of group Admins, this group can execute any sudo tasks with no passwd

[root@serverA ~]# groupadd Admins
[root@serverA ~]# usermod -G Admins Robert
[root@serverA ~]# groups Robert
Robert : Robert Admins
 
[root@serverA ~]# visudo
%Admins         ALL=(ALL)       NOPASSWD: ALL
 
# Now checking Permission
[Robert@serverA /]$ sudo cd /root
[Robert@serverA /]$ ls
afs  bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

User student1 can execute any sudo task with no passwd

[root@serverA ~]# visudo
student1        ALL=(ALL)       NOPASSWD: ALL
 
# Check permission with sudo 
[student1@serverA ~]$ sudo useradd user1

Create user named guest, this user have no interactive shell

[root@serverA ~]# useradd guest -s /sbin/nologin
[root@serverA ~]# cat /etc/passwd | grep -E 'guest'
guest:x:1005:1007::/home/guest:/sbin/nologin

Configure network

  • ip add: 192.168.74.92/24
  • secondary ip add: 192.168.74.93/24
  • gateway: 192.168.74.2
  • DNS: 192.168.74.2
  • Hostname: local.lab.com
  • Configure NTP service, Synchronize the server time, NTP server: time.google.com, set timezone Asia/Shanghai
[root@serverA ~]# rpm -q NetworkManager
NetworkManager-1.45.7-1.el9.aarch64
[root@serverA ~]# systemctl status NetworkManager
[root@serverA ~]# systemctl start NetworkManager
[root@serverA ~]# systemctl enable NetworkManager
 
[root@serverA ~]# nmcli conn show
NAME    UUID                                  TYPE      DEVICE
ens160  916ca0c1-c413-3960-9f7f-dfe49bc0924d  ethernet  ens160
lo      f87dd6ad-38f2-4203-97ce-7b4ebe49a42a  loopback  lo
 
 
[root@serverA ~]# nmcli conn add con-name default ifname ens160 type ethernet ipv4.method manual ipv4.address '192.168.208.136/24,192.168.208.100/24' ipv4.gateway 192.168.208.2 ipv4.dns 192.168.208.2
Connection 'default' (b396904b-6d80-4e2c-ae3a-cb221cfd9d44) successfully added.
[root@serverA ~]# nmcli conn show
NAME     UUID                                  TYPE      DEVICE
ens160   916ca0c1-c413-3960-9f7f-dfe49bc0924d  ethernet  ens160
lo       f87dd6ad-38f2-4203-97ce-7b4ebe49a42a  loopback  lo
default  b396904b-6d80-4e2c-ae3a-cb221cfd9d44  ethernet  --
 
[root@serverA ~]# nmcli conn up default
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
[root@serverA ~]# hostname -I
192.168.208.136 192.168.208.100
 
[root@serverA ~]# cat /etc/NetworkManager/system-connections/default.nmconnection
[connection]
id=default
uuid=b396904b-6d80-4e2c-ae3a-cb221cfd9d44
type=ethernet
interface-name=ens160
 
[ethernet]
 
[ipv4]
address1=192.168.208.136/24,192.168.208.2
address2=192.168.208.100/24
dns=192.168.208.2;
method=manual
 
[ipv6]
addr-gen-mode=default
method=auto
 
[proxy]
 
[root@serverA ~]# ping 192.168.208.100
[root@serverA ~]# ping 192.168.208.136
[root@serverA ~]# ping 192.168.208.2
 
[root@serverA ~]# rpm -q chrony
chrony-4.3-1.el9.aarch64
 
[root@serverA ~]# systemctl start chronyd
[root@serverA ~]# systemctl enable chronyd
[root@serverA ~]# systemctl status chronyd
 
[root@serverA ~]# vim /etc/chrony.conf
server time.google.com iburst
[root@serverA ~]# systemctl restart chronyd.service
[root@serverA ~]# timedatectl set-ntp true
 
 
[root@serverA ~]# timedatectl set-timezone Asia/Shanghai
[root@serverA ~]# timedatectl
               Local time: Sun 2024-10-13 12:51:33 CST
           Universal time: Sun 2024-10-13 04:51:33 UTC
                 RTC time: Sun 2024-10-13 12:41:56
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

Manage text files and daily tasks

Find lines with “ac” on file /root/lines and copy it to /mnt/lines file

[root@serverA ~]# cat lines
dracula
accumulation
accent
 
believe
Rich
Poor
Factory
 
Never
Ever
Happened
 
Mavac
Sevac
Trivac
 
Gin ac ac ac
Beer ac ac ac
Wine dc dc dc
 
[root@serverA ~]# grep 'ac' /root/lines >/mnt/lines
[root@serverA ~]# cat /mnt/lines
dracula
accumulation
accent
Factory
Mavac
Sevac
Trivac
Gin ac ac ac
Beer ac ac ac

Find every file owned by student1 and copy it to /mnt/student1 folder

[root@serverA ~]# cd /mnt
[root@serverA mnt]# mkdir student1
 
[root@serverA ~]# find / -user student1 -exec cp -rf {} /mnt/student1 \;

Find every file bigger than 5MB and copy it to /mnt/bigger folder

[root@serverA ~]# find / -type f -size +5M -exec cp -rf {} /mnt/bigger \;

Configure a cron job to echo “Hello cron working” every 2 days at 2PM

[root@serverA ~]# rpm -q cronie
cronie-1.5.7-10.el9.aarch64
 
[root@serverA ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@serverA ~]# crontab -l
00	14	*/2	*	*	echo “Hello cron working”
 

Create a bash script to echo “creating script” and then create a file named “working” under /

[root@serverA scripts]# pwd
/root/scripts
[root@serverA scripts]# tail -1 /root/.bashrc
export PATH=$PATH:/root/scripts
[root@serverA scripts]# touch s1.sh
[root@serverA scripts]# chmod u+x s1.sh
[root@serverA scripts]# ls -lh
total 0
-rwxr--r--. 1 root root 0 Oct 13 13:13 s1.sh
[root@serverA ~]# source .bashrc
 
[root@serverA /]# cat /root/scripts/s1.sh
 
echo "creating script"
touch /working

Create 3 compress files of /etc/hosts file called hosts.tar.gzip, hosts.tar.bzip2 and hosts.tar.xz under /mnt

[root@serverA mnt]# tar -zcvf hosts.tar.gzip /etc/hosts
[root@serverA mnt]# tar -jcvf hosts.tar.bzip2 /etc/hosts
[root@serverA mnt]# tar -Jcvf hosts.tar.xz /etc/hosts
 

Create a symbolic link of /usr/bin/echo under /mnt name It echo2

[root@serverA ~]# ln -s /usr/bin/echo /mnt/echo2
[root@serverA ~]# ls -lh /mnt
total 16K
lrwxrwxrwx. 1 root root  13 Oct 13 13:53 echo2 -> /usr/bin/echo

Permissions and ACL

Copy fstab file to /mnt/fstab, owner is root and group is admins, groups have full permissions, others are not allowed to do anything.

[root@serverA ~]# cp /etc/fstab /mnt/fstab
[root@serverA ~]# cd /mnt
[root@serverA mnt]# ls -lh | grep fstab
-rw-r--r--. 1 root root 666 Oct 13 14:19 fstab
 
[root@serverA mnt]# chown root:admins fstab
[root@serverA mnt]# ls -lh | grep fstab
-rw-r--r--. 1 root admins 666 Oct 13 14:19 fstab
 
[root@serverA mnt]# chmod g+rwx fstab
[root@serverA mnt]# ls -lh | grep fstab
-rw-rwxr--. 1 root admins 666 Oct 13 14:19 fstab
 
[root@serverA mnt]# chmod o-rwx fstab
[root@serverA mnt]# ls -lh | grep fstab
-rw-rwx---. 1 root admins 666 Oct 13 14:19 fstab

User anna has write and read permission in the file

[root@serverA mnt]# setfacl -m u:anna:rw- fstab
[root@serverA mnt]# getfacl fstab
# file: fstab
# owner: root
# group: admins
user::rw-
user:anna:rw-
group::rwx
mask::rwx
other::---

Create a folder called users under /home, every file created under users dir must preserve its parent group owner.

[root@serverA home]# chmod g+s users
[root@serverA home]# ls -ld users
drwxr-sr-x. 2 root root 6 Oct 13 14:22 users
 
[anna@serverA home]$ sudo chmod g+s users
[anna@serverA home]$ ls -ld users/
drwxr-sr-x. 2 root root 6 Oct 13 14:24 users/
 
[anna@serverA home]$ sudo chown anna:admins users
[anna@serverA home]$ ls -ld users/
drwxr-sr-x. 2 anna admins 6 Oct 13 14:24 users/
 
[root@serverA home]# cd users/
[root@serverA users]# touch f1
[root@serverA users]# ls -lh
total 0
-rw-r--r--. 1 root admins 0 Oct 13 14:28 f1

anyone except the owner of a file under users dir can delete it (Sticky)

[student1@serverA home]$ sudo chmod o+t test/
[john@serverA home]$ ls -ld test/
drwxrwxrwt. 2 anna admins 86 Oct 13 15:01 test/
 
[john@serverA test]$ ls -lh
total 0
-rw-r--r--. 1 anna     anna     0 Oct 13 14:57 a1
-rw-r--r--. 1 anna     anna     0 Oct 13 14:57 a2
-rw-r--r--. 1 anna     anna     0 Oct 13 14:57 a3
-rw-r--r--. 1 john     john     0 Oct 13 14:59 j1
-rw-r--r--. 1 john     john     0 Oct 13 14:59 j2
-rw-r--r--. 1 john     john     0 Oct 13 15:00 j3
-rw-r--r--. 1 student1 student1 0 Oct 13 14:57 s1
-rw-r--r--. 1 student1 student1 0 Oct 13 14:57 s2
-rw-r--r--. 1 student1 student1 0 Oct 13 14:57 s3
[john@serverA test]$ rm -rf s1
rm: cannot remove 's1': Operation not permitted
[john@serverA test]$ rm -rf a1
rm: cannot remove 'a1': Operation not permitted
[john@serverA test]$ rm -rf j1

configure umask 033 for all user, users root and Student1 must have their own 022 umaks

# By Default for all users , /etc/profile
[root@serverA ~]# vim /etc/profile
[root@serverA ~]# useradd student3
[root@serverA ~]# passwd student3
Changing password for user student3.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@serverA ~]# su - student3
[student3@serverA ~]$ umask
0033
 
# For specifica user 
# Student2 
[student1@serverA ~]$ vim .bashrc
umask 0022
[student1@serverA ~]$ source .bashrc
[student1@serverA ~]$ umask
0022
# Root
[root@serverA ~]# vim .bashrc
umask 0022 
[root@serverA ~]# source .bashrc
[root@serverA ~]# umask
0022

Firewall and Selinux

An apache service is running under port 92, and the root folder is under /web, fix it and set the right label. Change ssh port to 90 and set the right selinux conf

[root@serverA ~]# rpm -q httpd
package httpd is not installed
[root@serverA ~]# yum -y install httpd
 
[root@serverA ~]# systemctl start httpd
[root@serverA ~]# systemctl enable httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service /usr/lib/systemd/system/httpd.service.
[root@serverA ~]# systemctl status httpd
 
[root@serverA ~]# vim /etc/httpd/conf/httpd.conf
Listen 92
 
[root@serverA html]# pwd
/var/www/html
[root@serverA html]# cat index.html
<h1>This is a latest Website !!</h1>
 
# Search code from  vim /etc/ssh/sshd_config
[root@serverA ~]# semanage port -a -t http_port_t -p tcp 92
[root@serverA ~]# semanage port -l | grep 92
http_port_t                    tcp      92, 80, 81, 443, 488, 8008, 8009, 8443, 9000
 
[root@serverA ~]# systemctl restart httpd.service
 
[root@serverA ~]# netstat -tnl | grep 92
tcp6       0      0 :::92                   :::*                    LISTEN
 
[root@serverA ~]# curl localhost:92
<h1>This is a latest Website !!</h1>
 
 
[root@serverA ~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/website"
 
[root@serverA website]# vim index.html
[root@serverA website]# systemctl restart httpd
[root@serverA website]# curl localhost:92
<h1>This is another website</h1>

Open port 92 firewalld, make the change persistent.

[root@serverA ~]# rpm -q firewalld
firewalld-1.2.5-1.el9.noarch
[root@serverA ~]# systemctl start firewalld
[root@serverA ~]# systemctl enable firewalld
[root@serverA ~]# systemctl status firewalld
 
[root@serverA ~]# firewall-cmd --permanent --add-service=http
success
[root@serverA ~]# firewall-cmd --permanent --add-port=92/tcp
[root@serverA ~]# firewall-cmd --reload
[root@serverA ~]# firewall-cmd --list-all
public
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: cockpit dhcpv6-client http ssh
  ports: 92/tcp
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Logging

Configure journald logs to be save persistently

[root@serverA ~]# vim /etc/systemd/journald.conf
[Journal]
Storage=persistent
[root@serverA ~]# systemctl restart systemd-journald
[root@serverA ~]# ls /var/log/journal

Configure rsyslog to save any critical log or higher to /var/log/crit

[root@serverA ~]# vim /etc/rsyslog.conf
*.crit  /var/log/critical.log
 
[root@serverA ~]# systemctl restart rsyslog.service

Configure firewalld logs to be rotate every 3 weeks

[root@serverA ~]# vim /etc/logrotate.d/firewalld
/var/log/firewalld {
    weekly
    missingok
    rotate 3
    copytruncate
    minsize 1M
}

Storange: SWAP, LVM and Stratis

Create a 5 gb partition format It with ext3 and mount it on /mnt/ext3 persistently,mount must be with part UUID.

[root@serverA mnt]# gdisk /dev/nvme0n2
Command (? for help): n
Partition number (1-128, default 1):
First sector (34-10485726, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-10485726, default = 10485726) or {+-}size{KMGTP}:
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
 
Command (? for help): p
Disk /dev/nvme0n2: 10485760 sectors, 5.0 GiB
Model: VMware Virtual NVMe Disk
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): F9F8FF62-EF96-453E-9417-301C3F4A6525
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 10485726
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
 
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        10485726   5.0 GiB     8300  Linux filesystem
 
Command (? for help): w
Do you want to proceed? (Y/N): y
The operation has completed successfully.
 
[root@serverA ~]# mkfs -t ext3 /dev/nvme0n2p1
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 1310459 4k blocks and 327680 inodes
Filesystem UUID: 6f6b3565-97a5-4728-8036-8a7e7198b780
Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912, 819200, 884736
 
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
 
[root@serverA ~]# blkid /dev/nvme0n2p1
/dev/nvme0n2p1: UUID="6f6b3565-97a5-4728-8036-8a7e7198b780" SEC_TYPE="ext2" TYPE="ext3" PARTLABEL="Linux filesystem" PARTUUID="4bb409f9-73c0-4ca9-9079-69421bd1556f"
 
[root@serverA ~]# tail -1 /etc/fstab
UUID="6f6b3565-97a5-4728-8036-8a7e7198b780"	/mnt/ext3	ext4	defaults	0	0
 
[root@serverA ~]# systemctl daemon-reload
[root@serverA ~]# mount -a
[root@serverA ~]#
[root@serverA ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
nvme0n2     259:4    0    5G  0 disk
└─nvme0n2p1 259:9    0    5G  0 part /mnt/ext3
[root@serverA ~]# gdisk /dev/nvme0n3
Command (? for help): n
Partition number (1-128, default 1):
First sector (34-10485726, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-10485726, default = 10485726) or {+-}size{KMGTP}:
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 8200
Changed type of partition to 'Linux swap'
 
Command (? for help): p
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        10485726   5.0 GiB     8200  Linux swap
 
Command (? for help): w
Do you want to proceed? (Y/N): y
The operation has completed successfully.
 
[root@serverA ~]# mkswap /dev/nvme0n3p1
Setting up swapspace version 1, size = 5 GiB (5367635968 bytes)
no label, UUID=cd40a5ef-cca7-4ff6-94d7-f07ff4e5de0f
[root@serverA ~]# blkid /dev/nvme0n3p1
/dev/nvme0n3p1: UUID="cd40a5ef-cca7-4ff6-94d7-f07ff4e5de0f" TYPE="swap" PARTLABEL="Linux swap" PARTUUID="b94de884-d851-43c0-959e-202856707778"
 
[root@serverA ~]# free -h
               total        used        free      shared  buff/cache   available
Mem:           3.5Gi       1.1Gi       1.9Gi        10Mi       712Mi       2.4Gi
Swap:          2.0Gi          0B       2.0Gi
[root@serverA ~]#
[root@serverA ~]# vim /etc/fstab
[root@serverA ~]# tail -1 /etc/fstab
/dev/nvme0n3p1		swap	swap	default		0	0
 
[root@serverA ~]# systemctl daemon-reload
[root@serverA ~]# swapon -a
[root@serverA ~]# free -h
               total        used        free      shared  buff/cache   available
Mem:           3.5Gi       1.1Gi       1.9Gi        10Mi       712Mi       2.4Gi
Swap:          7.0Gi          0B       7.0Gi

Create a vg called VG1 with a partition of 5gb, consider a PE size of 10MB

[root@serverA lvm]# pvs
  PV             VG  Fmt  Attr PSize  PFree
  /dev/nvme0n1p3 cs  lvm2 a--  18.41g    0
  /dev/nvme0n4   VG1 lvm2 a--   4.99g 4.99g
 
[root@serverA lvm]# vgcreate -s 10M VG1 /dev/nvme0n4
[root@serverA lvm]# vgdisplay VG1
  --- Volume group ---
  VG Name               VG1
  System ID
  Format                lvm2
  Metadata Areas        1
  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                1
  Act PV                1
  VG Size               4.99 GiB
  PE Size               10.00 MiB
  Total PE              511
  Alloc PE / Size       0 / 0
  Free  PE / Size       511 / 4.99 GiB
  VG UUID               F02ZEL-KtaB-tY8J-MrEb-BIkW-h7Xu-HIhJ8S

Create a lv called LV1 on top of VG1 with a size of 600MB, format it with ext4 and mount it under /mnt/lvm

[root@serverA ~]# lvcreate -L 600M --name LV1 VG1
  Logical volume "LV1" created.
[root@serverA ~]# lvs
  LV   VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  LV1  VG1 -wi-a----- 600.00m
  root cs  -wi-ao----  16.41g
  swap cs  -wi-ao----   2.00g
 
[root@serverA ~]# mkfs -t ext4 /dev/VG1/LV1
 
[root@serverA ~]# blkid /dev/VG1/LV1
/dev/VG1/LV1: UUID="0177cb94-3534-42ba-adb1-5e8da2667d42" TYPE="ext4"

Extend the vg with another partition of 5 gb and extend the lv from 60LE to 700LE, final size must be between 6.9gb – 7.1gb.

[root@serverA ~]# pvcreate /dev/nvme0n5p1
  Physical volume "/dev/nvme0n5p1" successfully created.
[root@serverA ~]# pvs
  PV             VG  Fmt  Attr PSize  PFree
  /dev/nvme0n1p3 cs  lvm2 a--  18.41g     0
  /dev/nvme0n4   VG1 lvm2 a--   4.99g  4.40g
  /dev/nvme0n5p1     lvm2 ---  <5.00g <5.00g
 
[root@serverA ~]# vgextend VG1 /dev/nvme0n5p1
[root@serverA ~]# pvs
  PV             VG  Fmt  Attr PSize  PFree
  /dev/nvme0n1p3 cs  lvm2 a--  18.41g    0
  /dev/nvme0n4   VG1 lvm2 a--   4.99g 4.40g
  /dev/nvme0n5p1 VG1 lvm2 a--   4.99g 4.99g
 
[root@serverA ~]# vgs
  VG  #PV #LV #SN Attr   VSize  VFree
  VG1   2   1   0 wz--n-  9.98g 9.39g
 
[root@serverA ~]# lvextend -l 700 /dev/VG1/LV1
  Size of logical volume VG1/LV1 changed from 600.00 MiB (60 extents) to <6.84 GiB (700 extents).
  Logical volume VG1/LV1 successfully resized.
[root@serverA ~]# lvdisplay /dev/VG1/LV1
  --- Logical volume ---
  LV Path                /dev/VG1/LV1
  LV Name                LV1
  VG Name                VG1
  LV UUID                HIp0VX-jVVE-wWZx-AkZM-shJz-OtBO-ZGXqFd
  LV Write Access        read/write
  LV Creation host, time serverA, 2024-10-13 17:16:53 +0800
  LV Status              available
  # open                 0
  LV Size                <6.84 GiB
  Current LE             700
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2
 

Create a stratis pool with a partition of 5gb called POOL1, create a fs called fs1 and mount it on /mnt/fs1

[root@serverA ~]# yum -y list *stratis*
Last metadata expiration check: -1 day, 21:50:26 ago on Sun 13 Oct 2024 07:37:36 PM CST.
Available Packages
stratis-cli.noarch                                         3.6.0-1.el9                                    appstream
stratisd.aarch64                                           3.6.7-1.el9                                    appstream
stratisd-dracut.aarch64                                    3.6.7-1.el9                                    appstream
stratisd-tools.aarch64                                     3.6.7-1.el9                                    appstream
[root@serverA ~]# yum -y install stratis-cli
[root@serverA ~]# yum -y install stratisd
 
[root@serverA ~]# systemctl start stratisd
[root@serverA ~]# systemctl enable stratisd
[root@serverA ~]# systemctl status stratisd
 
[root@serverA ~]# stratis pool create POOL1 /dev/nvme0n3p1
[root@serverA ~]# stratis pool list
Name              Total / Used / Free    Properties                                   UUID   Alerts
POOL1   5.00 GiB / 526 MiB / 4.49 GiB   ~Ca,~Cr, Op   b273563e-77e9-4e34-b5bd-6baf825e30a6   WS001
 
[root@serverA ~]# stratis filesystem create POOL1 fs1
[root@serverA ~]# stratis filesystem list
Pool    Filesystem   Total / Used / Free / Limit            Created             Device                   UUID
POOL1   fs1          1 TiB / 546 MiB / 1023.47 GiB / None   Oct 13 2024 17:33   /dev/stratis/POOL1/fs1   2bc949f7-ad62-45c7-bdbf-a22da23964bd
 
 
[root@serverA ~]# vim /etc/fstab
[root@serverA ~]# tail -2 /etc/fstab
/dev/stratis/POOL1/fs1	/mnt/fs1	xfs	defaults,x-systemd.requires=stratisd.service	0	0
 
[root@serverA ~]# systemctl daemon-reload
[root@serverA ~]# mount -a

Create a snapshot of fs1 called snap1 and mount it on /mnt/snap

[root@serverA ~]# stratis filesystem snapshot POOL1 fs1 snap1
[root@serverA ~]# tail -2 /etc/fstab
UUID="7e12cd69-c778-4bfe-9d43-0671f661225d" 	/mnt/snap	xfs	defaults	0	0
 
[root@serverA ~]# systemctl daemon-reload
[root@serverA ~]# mount -a

Configure autofs to mount a share home dir under /home/share, this home dir is accessible in 192.168.208.137/home/shareuser

[root@serverA home]# yum -y install nfs-utils
 
[root@serverA home]# showmount -e 192.168.208.137
Export list for 192.168.208.137:
/home/shareuser              192.168.208.136
 
[root@serverA share]# yum -y install autofs
 
[root@serverA share]# systemctl start autofs
[root@serverA share]# systemctl enable autofs
Created symlink /etc/systemd/system/multi-user.target.wants/autofs.service /usr/lib/systemd/system/autofs.service.
[root@serverA share]# systemctl status autofs
 
[root@serverA ~]# cat /etc/auto.master
/home	/etc/auto.nfs	--timeout=300
[root@serverA ~]# cat /etc/auto.nfs
share	-rw,sync	192.168.208.137:/home/shareuser
 
[root@serverA home]# cd share
[root@serverA share]# ls
s1  s2  s3  s4  s5

Containers

[root@serverA ~]# yum -y install container-tools
[root@serverA ~]# podman login docker.io
Username: kcsanjeeb091@gmail.com
Password:
Login Succeeded!
 
[root@serverB ~]# loginctl enable-linger sanjeeb
[root@serverB ~]# useradd sanjeeb
[root@serverB ~]# ssh sanjeeb@192.168.208.137
 
[sanjeeb@serverB containers]$ pwd
/home/sanjeeb/.config/containers
[sanjeeb@serverB containers]$ cat registries.conf
unqualified-search-registries = ['docker.io']
[[registry]]
insecure = false
blocked = false
location = "docker.io"
 
[sanjeeb@serverB ~]$ pwd
/home/sanjeeb
[sanjeeb@serverB ~]$ vim Containerfile
[sanjeeb@serverB ~]$ cat Containerfile
FROM docker.io/library/httpd
 
[sanjeeb@serverB ~]$ podman build -t myhttpd .
 
[sanjeeb@serverB ~]$ podman images
REPOSITORY               TAG         IMAGE ID      CREATED       SIZE
localhost/myhttpd        latest      a3e79aafef7f  2 months ago  182 MB
docker.io/library/httpd  latest      a3e79aafef7f  2 months ago  182 MB
 
# Making Volume 
[sanjeeb@serverB webapp]$ pwd
/home/sanjeeb/webapp
[sanjeeb@serverB webapp]$ vim index.html
[sanjeeb@serverB webapp]$ cat index.html
<h1>My latest website is up and running !!</h1>
 
[sanjeeb@serverB ~]$ podman run -d --name myhttpdcontainer -v ~/webapp:/usr/local/apache2/htdocs:Z -p 4499:80  localhost/myhttpd:latest
b6240e39cbc690aafaf584487e7e486c35423077ac2421220cd954a64b881f1b
 
[sanjeeb@serverB ~]$ podman stop myhttpdcontainer
 
[sanjeeb@serverB user]$ pwd
/home/sanjeeb/.config/systemd/user
[sanjeeb@serverB user]$ podman generate systemd --name myhttpdcontainer  --files --new
/home/sanjeeb/.config/systemd/user/container-myhttpdcontainer.service
 
[sanjeeb@serverB user]$ systemctl --user enable container-myhttpdcontainer.service
Created symlink /home/sanjeeb/.config/systemd/user/default.target.wants/container-myhttpdcontainer.service /home/sanjeeb/.config/systemd/user/container-myhttpdcontainer.service.
[sanjeeb@serverB user]$ systemctl --user start container-myhttpdcontainer.service
[sanjeeb@serverB user]$ systemctl --user status container-myhttpdcontainer.service
 
[sanjeeb@serverB user]$ podman ps
CONTAINER ID  IMAGE                     COMMAND           CREATED         STATUS         PORTS                         NAMES
1128dcab8bf9  localhost/myhttpd:latest  httpd-foreground  17 seconds ago  Up 17 seconds  0.0.0.0:4499->80/tcp, 80/tcp  myhttpdcontainer
 
# Adding firewall 
[sanjeeb@serverB user]$ sudo firewall-cmd --permanent --add-port=4499/tcp
success
[sanjeeb@serverB user]$ sudo firewall-cmd --reload
success
[sanjeeb@serverB user]$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160
  sources:
  services: cockpit dhcpv6-client http mountd nfs rpc-bind ssh
  ports: 4499/tcp
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

 
All systems normal

© 2025 2023 Sanjeeb KC. All rights reserved.