Linux 系统初始化专题

本贴最后更新于 1927 天前,其中的信息可能已经水流花落

前言:Linux 系统第一次安装完成后,总是需要进行一些初始化配置以及调优,这里进行一个总结以备查。

Linux.jpg

一、Ubuntu 16.04 系统初始化

  • 修改主机名
  • 关闭防火墙/selinux
  • 网络配置
  • 时间同步
  • 初始化磁盘
  • 配置 ulimit
  • 添加秘钥(允许或禁止账号密码登录)
  • 配置 ssh 免密登录(可选)
  • 添加阿里云镜像源(选择不同 Linux 发行版)
  • 安装本地依赖及常用工具(可选)
  • Linux 内核优化参数

修改主机名:

# Set hostname HOSTNAME='' hostnamectl set-hostname ${HSOTNAME} # Binding Hosts cat << EOF >> /etc/hosts ## SET CEPH HOSTS ${IP} ${HSOTNAME} EOF

关闭防火墙/selinux:

# Disable ipdatable ufw disable ufw status

网络配置:

这里注意,有些 Linux 发行版安装完系统后初始网卡为 ens33enp2s0,如何修改为 eth0

vi /etc/default/grub # 修改参数 GRUB_CMDLINE_LINUX 最后添加 net.ifnames=0 biosdevname=0; update-grub

然后再修改网卡对应 eth0 并重启:

vi /etc/network/interfaces ## 静态IP auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.0.1 netmask 255.255.255.0 gateway 192.168.0.1 dns-nameservers 8.8.4.4 8.8.8.8 ## DHCP auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp ## 重启网卡 systemctl restart ifup@eth0 systemctl enable ifup@eth0 ## DNS配置 vi /etc/resolv.conf nameserver 8.8.4.4 nameserver 8.8.8.8

注意: ubuntu 配置网络不生效需要重启 reboot 生效

时间同步:

## 设置时区 ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime bash -c "echo 'Asia/Shanghai' > /etc/timezone" # timedatectl set-timezone UTC ## 同步网络时间 apt-get install -y ntpdate # /etc/init.d/ntp stop ntpdate ntp1.aliyun.com ## 写入硬件时间 date hwclock --systohc

初始化磁盘:

这里使用脚本实现,会自动创建 /data 目录挂载至指定磁盘(格式为:ext4),使用方法:./part.sh vdb

cat << 'EOF' > part.sh #!/bin/bash # if [ ! -n "$1" ] ; then echo '需要输入一个磁盘参数' ? exit 1 else disk=`lsblk|grep $1|grep disk` if [ ! -n "$disk" ] ; then echo '磁盘输入有误' exit 1 fi fi diskstat=`lsblk|grep $1|grep part` if [ -n "$diskstat" ] ; then echo '磁盘已分区' exit 1 else echo "n p 1 w " | fdisk /dev/$1 disknum=`lsblk -l|grep $1|grep part|awk '{print $1}'` mkfs.ext4 /dev/$disknum uuid=`blkid /dev/$disknum |awk '{print $2}'` fstabstat=$(echo $uuid |awk -F'=' '{print $NF}') if [ -n "$fstabstat" ] ; then echo "${uuid} /data ext4 defaults 0 0" >> /etc/fstab mkdir -p /data mount -a fi fi EOF

如果需要配置 LVM,参考以下脚本:

apt-get install lvm2 -y LV_SIZE='299' pvcreate /dev/vdb && vgcreate vgdata /dev/vdb && \ lvcreate -L ${LV_SIZE}G -n data vgdata && df -Th &&\ mkfs.ext4 /dev/vgdata/data && mkdir /data && \ echo "UUID=\"44bde ...\" /data ext4 defaults 0 0" >> /etc/fstab && mount -a && df -Th

注意: 挂载磁盘尽量使用 UUID,blkid /dev/vdb1

配置 ulimit:

ulimit -a ulimit -n 65535 echo "* hard nofile 65535 * soft nofile 65535 root hard nofile 65535 root soft nofile 65535" >> /etc/security/limits.conf

生成秘钥(允许或禁止账号密码 ssh 登录):

## 允许 Root 密码 ssh 登录 sed -i 's/prohibit-password/yes/' /etc/ssh/sshd_config sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config systemctl restart sshd ## 禁止使用密码 ssh 登录 cat /etc/ssh/sshd_config |grep -E "PasswordAuthentication" sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config systemctl restart sshd

配置 SSH 免密登录:

ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

阿里云镜像 apt 源:

mv /etc/apt/sources.list /etc/apt/sources.list.old cat << 'EOF' > /etc/apt/sources.list deb http://mirrors.aliyun.com/ubuntu/ xenial main deb-src http://mirrors.aliyun.com/ubuntu/ xenial main deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main deb http://mirrors.aliyun.com/ubuntu/ xenial universe deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial-security main deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe EOF ## 更新源 apt-get clean all apt-get update

注意: 不同 Ubuntu 版本使用 mirrors.aliyun.com 替换默认的 http://archive.ubuntu.com/ 即可。

安装一些本地依赖及常用工具:

apt-get install gcc g++ make cmake libpcre3 libpcre3-dev libssl-dev wget \ libxslt1-dev libxslt1.1 build-essential autoconf libiconv-hook-dev libmcrypt-dev \ libxml2-dev libmysqlclient-dev build-essential zlib1g-dev \ libiconv-hook-dev libiconv-hook1 libjpeg8-dev libjpeg-turbo8 libjpeg-turbo8-dev libpng12-dev libfreetype6-dev libgeoip-dev mysql-client mysql-common libncurses5 libncurses5-dev \ libcurl4-gnutls-dev curl libbz2-dev libicu-dev zlib1g-dev geoip-bin icu-devtools libcurl3-gnutls libcurl3:amd64 libmagick++-dev unzip lrzsz

升级 openssl for ubuntu16.04 支持编译 Tengine2 以及 Nginx 时需要:

echo "deb http://archive.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/jessie-backports.list && \ apt-get -o Acquire::Check-Valid-Until=false update && \ apt-get -t jessie-backports install openssl libssl-dev && \ openssl version

Linux 内核优化参数:

//Linux实例出现间歇性丢包,无法连接实例 //内核日志:Feb 6 16:05:07 i-*** kernel: nf_conntrack: table full, dropping packet. net.netfilter.nf_conntrack_max = 655350 net.netfilter.nf_conntrack_tcp_timeout_established = 1200 //报“TCP: time wait bucket table overflow”错误,大量处于TIME_WAIT状态的连接 //net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_syncookies = 1 //是否开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击 net.ipv4.tcp_fin_timeout = 30 //对于本端断开的Socket连接,TCP保持在FIN-WAIT-2状态的时间(秒)。 net.ipv4.tcp_max_syn_backlog = 8192 //表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数 net.ipv4.tcp_max_tw_buckets = 5000 //系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000 net.ipv4.tcp_tw_reuse = 1 //是否允许将TIME-WAIT sockets重新用于新的TCP连接。 net.ipv4.tcp_synack_retries = 2 //指明了处于SYN_RECV状态时重传SYN+ACK包的次数 net.ipv6.conf.all.disable_ipv6 = 1 //IPV6 相关配置 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 //本地网络NAT环境通过SSH连接Linux实例,或者访问该Linux实例上的HTTP业务出现异常。Telnet测试会被reset //cat /proc/sys/net/ipv4/tcp_tw_recycle //cat /proc/sys/net/ipv4/tcp_timestamps //默认为1,tcp_tw_recycle 启用则激活 net.ipv4.tcp_tw_recycle=0 net.ipv4.tcp_timestamps=0 //临时修改 /sbin/sysctl -w kernel.parameter="[$Example]" ## 注:[$Example]为参数值,如sysctl -w net.ipv4.tcp_tw_recycle="0"命令,将参数值改为0。 // 支持 ip_forward net.ipv4.ip_forward = 1 //永久生效 vi /etc/sysctl.conf sysctl -p

二、CentOS 7.5 系统初始化

修改主机名:

# Set hostname HOSTNAME='' hostnamectl set-hostname ${HSOTNAME} # hostname $HOSTNAME && echo "$HOSTNAME" > /etc/hostname # Binding Hosts cat << EOF >> /etc/hosts ## SET CEPH HOSTS ${IP} ${HSOTNAME} EOF

关闭 防火墙 和 seliux:

systemctl stop firewalld systemctl disable firewalld systemctl disable --now dnsmasq setenforce 0 ## 临时关闭 seliunx sed -ri '/^[^#]*SELINUX=/s#=.+$#=disabled#' /etc/selinux/config ## 永久 seliunx 关闭需要 reboot getenforce

网络配置:

修改系统默认网卡为 eth0

cd /etc/sysconfig/network-scripts/ && mv ifcfg-eno16777736 ifcfg-eth0 vi /etc/sysconfig/grub # GRUB_CMDLINE_LINUX 变量中最后添加 net.ifnames=0 biosdevname=0 (注意引号) grub2-mkconfig -o /boot/grub2/grub.cfg # 添加udev的规则(很有必要!) cat << 'EOF' > /etc/udev/rules.d/70-persistent-net.rules SUBSYSTEM=="net",ACTION=="add",DRIVERS=="?*",ATTR{address}=="您的网卡MAC地址",ATTR{type}=="1" ,KERNEL=="eth*",NAME="eth0" # reboot

配置网卡:

## Stop NetworkManager systemctl stop NetworkManager systemctl disable NetworkManager ## Config Network vim /etc/sysconfig/network-scripts/ifcfg-eth0 ------------------------------------ [root@localhost]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 NAME=eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BOOTPROTO=none DEFROUTE=yes IPADDR=192.168.1.200 #PREFIX=24 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 IPV4_FAILURE_FATAL=no DNS1=8.8.4.4 DNS2=8.8.8.8 IPV6INIT=no IPV6_AUTOCONF=no IPV6_DEFROUTE=no IPV6_PEERDNS=no IPV6_PEERROUTES=no IPV6_PRIVACY=no IPV6_FAILURE_FATAL=no ARPCHECK=no ## Set DNS vi /etc/resolv.conf nameserver 8.8.4.4 nameserver 8.8.8.8

注意: 重启网络 systemctl restart network 生效

时间同步:

## 设置时区 timedatectl status timedatectl list-timezones | grep Shanghai timedatectl set-timezone Asia/Shanghai ## ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # timedatectl set-timezone UTC ## ln -sf /usr/share/zoneinfo/UTC /etc/localtime # timedatectl set-time "YYYY-MM-DD HH:MM:SS" # timedatectl set-time "HH:MM:SS" timedatectl set-ntp yes ## 网络时间同步 yum install ntp ntpdate -y # ntpdate cn.pool.ntp.org ntpdate ntp1.aliyun.com &> /dev/null echo "*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null" >> /etc/crontab hwclock --systohc date

配置 ulimit:

## ulimit ulimit -a ulimit -n 65535 cat << EOF >> /etc/security/limits.conf * soft nofile 65535 * hard nofile 65535 * soft nproc 65535 * hard nproc 65535 EOF ulimit -n

生成免密登录秘钥:

ssh-keygen -t rsa -P '' root @ubuntu: ~$ cat id_rsa.pub >>/root/.ssh/authorized_keys

配置 SSH(只监听 IPv4 端口,关闭 GSSAPI 秘钥认证,关闭 DNS 解析):

sed -i s/'#ListenAddress 0.0.0.0'/'ListenAddress 0.0.0.0'/g /etc/ssh/sshd_config grep ListenAddress /etc/ssh/sshd_config sed -i s/'GSSAPIAuthentication yes'/'GSSAPIAuthentication no'/g /etc/ssh/sshd_config grep GSSAPIAuthentication /etc/ssh/sshd_config sed -i s/"^UseDNS yes"/"UseDNS no"/g /etc/ssh/sshd_config service sshd restart

配置阿里云 Yum 源:

cd /etc/yum.repos.d/ mv CentOS-Base.repo CentOS-Base.repo.bak curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo mv /var/cache/yum /tmp yum clean all && yum makecache

安装本地依赖库及常用工具:

yum install -y epel-release yum install -y yum-utils device-mapper-persistent-data lvm2 net-tools \ conntrack-tools wget vim ntpdate libseccomp libtool-ltdl vim wget \ openssl-devel ntpdate make gcc gcc-c++ cmake pcre pcre-devel \ zlib zlib-devel openssl ncurses-devel net-snmp sysstat lrzsz zip unzip\ tree net-tools lftp telnet iftop iotop yum groupinstall -y "Development tools"

关闭 Swap(可选,部署 K8S 需执行,否则会报错):

swapoff -a && sysctl -w vm.swappiness=0 sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab

Linux 内核优化参数(例如支持 k8s 安装):

# 设置系统参数 cat << EOF > /etc/sysctl.d/k8s.conf net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF modprobe br_netfilter sysctl -p /etc/sysctl.d/k8s.conf

--EOF--

  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    951 引用 • 943 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...