镜像完成后可用于PXE环境或U盘randisk等
安装系统考虑到实际应用中Ramdisk需要保持小而精,故在安装系统时选择最小化安装,然后再安装所需要的包。
安装必要软体tool
描述
vim
ifconfig
net-tools
lspci
pciutils
numactl
nfs
tmux
ftp
bc
smartctl
smartmontools
mailx
mktemp
mcelog
ipmi
ipmitool和OpenIPMI
编译环境
gcc make kernel-headers gcc-c++ kernel-devel
dos2unix
ethtool
lsusb
usbutils
zlib
zip
unzip
killall
psmisc
sg3_utils
numactl
locate
mlocate
rngd.service
rng-tools
strace
strace
expect
expect和tcl
openssh
openssh-server
nvme
mcelog
smartd
issdcm
一些OS设置代码语言:javascript复制systemctl set-default multi-user.target
timedatectl set-timezone Asia/Shanghai #Modify TIME zone
systemctl disable firewalld
systemctl disable NetworkManager
sed -i "/^SELINUX=/c\SELINUX=disabled" /etc/selinux/config #disable SELINUX
setenforce 0 #shutdown SELINUX
sed -i "s/^ExecStart=-\/sbin\/agetty --noclear %I \$TERM/& --autologin root/g" /usr/lib/systemd/system/getty@.service #root autologin
sed -i "s/^ExecStart=-\/sbin\/agetty --keep-baud 115200,38400,9600 \%I \$TERM/& --autologin root/g" /usr/lib/systemd/system/serial-getty@.service #root Serial autologin
sed -i "/^#UseDNS/c\UseDNS no" /etc/ssh/sshd_config #SSH setting
sed -i "/^#IgnoreUserKnownHosts no/c\IgnoreUserKnownHosts yes" /etc/ssh/sshd_config #SSH setting
sed -i "/StrictHostKeyChecking/c\StrictHostKeyChecking no" /etc/ssh/ssh_config #SSH client setting
echo -e "set -g mode-keys vi\nset -g prefix C-a\nunbind C-b\nbind C-a send-prefix" > /root/.tmux.conf #tmux setting
打包系统代码语言:javascript复制[root@localhost ~]# cat make_img.sh
#!/bin/bash
###############################################
# Filename : make_img.sh
# Author : PedroQin
# Date : 2020-01-17 15:54:12
# Description :
# Version : 1.0.0
###############################################
target_folder="/temp/create_os"
os_folder="$target_folder/os"
# show message in green
function green_message()
{
tput bold
echo -ne "\033[32m$@\033[0m"
echo
}
# show message in red
function red_message()
{
tput bold
echo -ne "\033[31m$@\033[0m"
echo
}
# print description and then run it
function print_run()
{
if [ $# -eq 1 ];then
green_message "$1"
eval "$1"
elif [ $# -ge 2 ];then
green_message "$1"
shift
eval "$@"
else
return -1
fi
}
whereami=`cd $(dirname $0);pwd`
change_log="$whereami/Changelog"
version=`awk '/Version/ {print $2}' $change_log | sed -n '1p'`
[ -z "$version" ] && red_message "please check $change_log" && exit 1
DATE=`date +"%Y%m%d%H%M%S"`
os_image="initrd_${version}_${DATE}.img"
green_message "Image Name : $os_image , press any key to package ..."
read -n 1
green_message "Copy Data..."
print_run "mkdir -p $os_folder"
print_run "cp -d /{bin,lib,lib64,sbin} $os_folder"
print_run "cp -arf /{boot,etc,opt,root,run,srv,usr,var} $os_folder"
print_run "mkdir $os_folder/{dev,home,media,mnt,proc,sys,log,tmp}"
green_message "Initialize Data..."
print_run "delete fstab" "rm -f $os_folder/etc/fstab 2>/dev/null"
print_run "delete network config file" "rm -rf $os_folder/etc/sysconfig/network-scripts/ifcfg-e* 2>/dev/null"
print_run "delete log" "rm $os_folder/var/log/messages* ; rm $os_folder/var/log/dmesg* ; rm $os_folder/var/log/mail* ; rm $os_folder/var/log/mcelog* ;rm $os_folder/var/log/boot.log* ;rm $os_folder/var/log/cron* ;rm $os_folder/var/log/secure* ;rm $os_folder/var/log/spooler* ;rm $os_folder/var/log/yum.log* ;rm $os_folder/var/log/btmp* ;touch $os_folder/var/log/mcelog "
print_run "clean log" "echo > $os_folder/root/.ssh/known_hosts ; echo > $os_folder/root/.bash_history ; echo > $os_folder/var/log/wtmp ; echo > $os_folder/var/log/btmp ; echo > $os_folder/root/.viminfo"
print_run "create init" "cp $os_folder/usr/sbin/init $os_folder"
green_message "Package image..."
print_run "cd $os_folder; find .|cpio -c -o|xz --format=lzma --best > ../$os_image"
echo
green_message "OS image: $target_folder/$os_image"