关于 Centos 7.5.1804 下的那些逼事

摘要

老版本的系统一堆破事,又不能升级,只能使用老系统一致将就着用着。

什么 NFS 出问题连带着 Gnome 卡住,什么动不动就抽风…

本文包含了我从开始做运维到现在的所有经验,想到啥就写啥,能帮到你更好,帮不到也别放弃。很多东西中文互联网也搜不到,英文好的朋友倒还好,但是英文不好的也会比较吃瘪。

本次环境为:

  • Centos 7.5.1804
  • 内核为 ISO 自带的内核(就不能做升级,就得用旧的,别问,问就是开发需要)
  • NFS 为官方源 Centos 7.5.1804 能用的最新版
  • NFS 服务器为 HDD 硬盘
  • user home 目录在 nfs 上
  • 纯内网环境

Gnome 桌面卡死

这套系统运行起来,你将可能会遇到以下场景:

  1. NFS 服务器卡死,所有用户的 Gnome 桌面都会卡死
  2. 你用着用着,整个桌面卡死,运气好的时候他会自己重启,不会丢掉其他窗口和运行的进程(反之你只能重启VNC了

第一种情况

遇到 NFS 服务器卡死,所有用户的 Gnome 桌面都会卡死,使用以下方法重启桌面即可恢复

1
2
3
su - <user>
export DISPLAY=:15
gnome-shell --mode=classic --replace & disown

应该就可以了


第二种情况

忍着,他自己会恢复的,我也没辙


Yum 相关

跟 yum 包管理相关的,有很多其他的方法也能办到这事。我就用这个方法辣~


RPM强制安装

1
rpm -ivh --replacefiles --force --nodeps *.rpm

yum 仅下载软件包

1
yum install --downloadonly --downloaddir=/tmp/yumlocal <package>

Cdrom

  1. 挂载CDROM

mkdir -p /mnt/cdrom

mount /dev/cdrom /mnt/cdrom

  1. 创建cdrom.repo文件
1
2
3
4
5
6
7
8
cat >> /etc/yum.repos.d/cdrom.repo < EOF
[cdrom]
name=CentOS7 - cdrom
baseurl=file:///mnt/cdrom/
enable=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
EOF
  1. 测试查看cdrom的软件包列表

yum --disablerepo=* --enablerepo=cdrom list

  1. 使用本地源安装

yum --disablerepo=* --enablerepo=cdrom install -y httpd


curl#60 peer’s Certificate issuer is not recognized

1
2
3
4
5
# 下载证书:
wget https://curl.se/ca/cacert.pem --no-check-certificate

# 添加证书:
cat cacert.pem >> /etc/pki/tls/certs/ca-bundle.crt

Authentication is required to set the network proxy

这个是使用 gnome 桌面隔三差五会弹出来的一个框,直接卸了他就好了,反之不升级系统留他没用

1
rpm -e gnome-packagekit

system

系统配置或系统服务相关


dmesg 无输出

1
systemctl restart systemd-journald

与时间服务器同步

1
ntpdate -u 192.168.1.10

解决PyQt: undefined symbol:FT_Get_Font_Format Error

下载最新的freetype并安装

1
2
3
4
5
6
7
tar -xf freetype-**.tar.gz
cd freetype-**/
mkdir bulid
cd bulid
../configure --prefix=/usr/lib/freetype
make
make install

最后将此目录下的libfreetype.so.6 替换掉原先的libfreetype.so.6
然后运行程序,在UI上点击右键,不闪退啦。

原文地址:https://blog.csdn.net/weixin_38418878/article/details/89946512


使用 pssh 或其他运维工具关闭所有服务器的上报服务

因为 Centos 7.5 长时间运行在内网中,没办法访问互联网,这俩服务长时间运行会让 Centos 7.5 死机

1
2
pssh -l root -h ~/hosts 'systemctl disable abrtd.service'
pssh -l root -h ~/hosts 'systemctl disable abrt-ccpp.service'

Shell

常用shell命令


手动崩溃

就是为了生成 coredump 文件

1
kill -6 <pid>

清理内存

清理前可以使用 sync 同步内存

/proc/sys/vm/drop_caches

1
echo 3 > /proc/sys/vm/drop_caches

要使用 /proc/sys/vm/drop_caches,你需要根据需要写入不同的值:

  • 写入 1:释放页缓存。
  • 写入 2:释放 slab 对象,包括目录项和索引节点。
  • 写入 3:同时释放 slab 对象和页缓存。
  • 写入 4:手动还原释放。(有些系统是写入 0 ,但 Centos 7 是写入 4)

禁用 Centos 7 系统自动更新

1
2
3
4
5
6
7
8
9
10
11
12
# 查询状态
systemctl status packagekit

# 停用
systemctl stop packagekit

# 禁止自启动
systemctl mask packagekit
Created symlink from /etc/systemd/system/packagekit.service to /dev/null.

# 卸载PackageKit
yum remove PackageKit*

磁盘空间

保存遍历结果

1
/usr/bin/ncdu -q -e --exclude-kernfs -o /nfs/home-nfs/lzh/logs/ncdu_`date +%Y%m%d.txt` --exclude /nfs/home-nfs/lzh/logs/ncdu_`date +%Y%m%d`.txt /nfs &

读取遍历结果

1
ncdu -f ncdu.txt

VMware

解决VMWare - Could not connect ‘Ethernet0‘ to virtual network ‘/dev/vmnet0‘.

1
2
sudo modprobe vmnet && sudo vmware-networks --start
sudo systemctl start vmware-networks.service
1
2
3
4
5
6
7
sudo touch /etc/vmware/x
sudo vmware-networks --migrate-network-settings /etc/vmware/x
sudo rm /etc/vmware/x

vmware-netcfg
sudo modprobe vmnet
sudo vmware-networks --start

software install

  • clang-format

clang-format

centos 的yum仓库中并没有clang-format的安装包,需要更新repo源:

1
sudo yum install centos-release-scl-rh

之后下载clang-format:

1
sudo yum install llvm-toolset-7-git-clang-format

默认安装目录为:/opt/rh/llvm-toolset-7/root/usr/bin/

1
2
3
4
5
6
7
cat > /etc/profile.d/clang.sh << "EOF"
PATH=$PATH:/opt/rh/llvm-toolset-7/root/usr/bin
export PATH
EOF
cat > /etc/profile.d/clang.csh << "EOF"
set path = ($path /opt/rh/llvm-toolset-7/root/usr/bin)
EOF

为已打开终端立即生效:

1
source /etc/profile

监控类

系统监控类工具

sysdig

#监控/磁盘 查看磁盘使用率最多的应用:

1
sysdig -c topfiles_bytes

#监控/网速

1
sysdig -c topprocs_net

TOOLS

工具类

pssh 运维工具

1
pssh [ -i ] -l <user> -h <hosts_list> <command>

能用上的基本就这种命令,有域名也可以使用域名,最好是做免密再操作,想查看返回的消息,可以加 -i

hosts_list 文件里基本上就是 ip 列表:

1
2
3
4
node01
node02
node03
192.168.1.11

伪装时间

https://github.com/wolfcw/libfaketime/

1
2
3
4
5
LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1
FAKETIME_CACHE_DURATION=1
FAKETIME_UPDATE_TIMESTAMP_FILE=1
FAKETIME=@2021-12-30 10:01:01
FAKETIME_SHARED=/faketime_sem_34 /faketime_shm_34