CentOS工具备忘

文章目录

  • 新机配置
  • 应用程序源码环境搭建
  • 内核调试源码环境搭建
    • 虚拟机环境
    • 主机环境
  • 工具
    • yum
    • cmake
    • meson

新机配置

  1. 永久关闭selinux防火墙,解决虚拟机启动,报错无权限
cat /etc/sysconfig/selinux
SELINUX=disabled 
  1. 访问qemu使用root权限,解决虚拟机启动报错,无权限使用kvm模块
cat /etc/libvirt/qemu.conf 
user = "root"
group = "root"
  1. 放开qemu生成core文件的权利,解决qemu crash无法生成core文件问题
libvirt配置文件/etc/libvirt/qemu.conf设置如下属性
max_core = "unlimited"
设置core文件大小无限制
ulimit -c unlimited
设置core文件路径
echo "/home/tmp/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
测试是否生成core文件,这里kill掉自己的终端进程
kill -SIGSEGV  $$
  1. 网卡dhcp配置,网线接家里的路由器,路由器接移动的入户光猫
HWADDR=30:9C:23:E3:E2:07
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_PRIVACY=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp2s0
UUID=a1153c96-4923-3638-ba0e-7c65fd849013
ONBOOT=yes
USERS=root
NM_CONTROLLED=no
  1. virsh edit 命令报Not an editor command错误,默认使用的vi命令,规避办法
mv /usr/bin/vi /usr/bin/vi.bak
ln -s /usr/bin/vim /usr/bin/vi
  1. 配置dia画图软件支持中文输入
find /usr/ -name dia.desktop
/usr/share/applications/dia.desktop

vim /usr/share/applications/dia.desktop
Exec=env GTK_IM_MODULE=xim  dia --integrated %F
  1. 允许所有ssh的客户端访问本机
echo "sshd: ALL" >> /etc/hosts.allow
systemctl restart sshd
  1. 设置grub启动选项
grub2-editenv list
grub2-set-default "CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core)"
grub2-set-default " centos-20200528003245-5.6.0-rc2+"
注:grub2-set-default命令后面接选项ID,CentOS7/boot/grub2/grub/grub.cfg获取;通过CentOS8通过/boot/loader/entries/xxx.conf获取
  1. 内核启动参数grub文件
CentOS7:/boot/grub2/grubenv
CentOS8:/boot/efi/EFI/centos/grubenv
  1. yum配置
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
yum makecache
yum repolist
yum list
  1. 基本开发工具安装
yum groupinstall "Development Tools"
  • centos上电后ip未获取到无法连接网络
dhclient enp2s0
  1. centos配置网易126发件服务器
    CentOS工具备忘_第1张图片
安装邮件收发工具
yum install -y postfix
设置sendmail工具配置文件,填写要使用的邮件地址,发件服务器地址,客户端授权码
echo "set [email protected] smtp=smtp.126.com [email protected] smtp-auth-password=客户端授权码 smtp-auth=login " >> /etc/mail.rc
使用sendmail工具发送邮件,通过126邮箱向qq邮箱发送邮件
echo "this is a test" > test.txt
mail -s "test" [email protected] <./test.txt
  1. 配置主机NAT转发
    host: 172.23.73.76(外网),192.168.0.1(内网)
    guest: 192.168.0.2
  • host添加NAT规则
    自动获取eno1的IP地址,将所有来自192.168.0.0的包的源IP伪装成eno1的IP地址发送出去
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eno1 -j MASQUERADE
    或者将所有来自192.168.0.0的包的源IP伪装成172.23.73.76发送出去
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eno1 -j SNAT --to 172.23.73.76
  • host查询dnserver供guest使用,地址为172.16.40.114
    nslookup www.baidu.com或者dig | grep SERVER
  • guest添加默认路由和DNS服务器:
    GATEWAY=192.168.0.1;DNS1=172.16.40.114

应用程序源码环境搭建

  • 代码编译(linux内核举例),必须配置vault源才能下载源码http://vault.centos.org/
a yumdownloader --source kernel
b yum-builddep kernel
c rpm -ivh --root=`pwd` kernel.src.rpm
d rpmbuild -bb SPECS/kernel.spec --define "_topdir $(pwd)"
  • kernel从rpm包中的源码编译
1)rpm包编译之后,拷贝出BUILD下的kernel源码,作为单独的源码目录
a 配置内核选项
make menuconfig
b 编译内核
make -j "$(lscpu  |grep '^CPU(s):' | awk '{print $2}')"
c 单独编译所有模块
make modules -j "$(lscpu  |grep '^CPU(s):' | awk '{print $2}')"

2)编译制作内核镜像
a 单独编译bzImage镜像
make bzImage -j "$(lscpu  |grep '^CPU(s):' | awk '{print $2}')"
  • kernel从开源库中的源码编译
1)下载开源内核包,断点续传
mkdir kernel && cd kernel
git init
git remote add origin https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
while true; do git fetch origin ; done
2)使用虚机当前内核的配置文件按编译配置内核源码
cp  /boot/config-4.18.0-147.el8.x86_64 /path/to/kernel/.config
make -j10
make modules
  • 安装glib及开发应用
1) 安装glib库和开发包
yum install -y glib2 glib2-devel 
2) 查看编译glib2需要引用的头文件和库文件
[root@hy glib_event]# pkg-config --cflags glib-2.0
-I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include 
[root@hy glib_event]# pkg-config --libs glib-2.0
-lglib-2.0
3) 编译应用
gcc -o demo demo.c  `pkg-config --cflags --libs glib-2.0`
  • 安装glibc,glib2 调试信息
debuginfo-install glib2-2.56.1-2.el7.x86_64 glibc-2.17-222.el7.x86_64 pcre-8.32-17.el7.x86_64
/usr/src/debug/glib-2.56.1/

内核调试源码环境搭建

虚拟机环境

  1. 安装centos虚机用于内核编译和调试
  2. 虚拟机下载对应版本内核源码并安装
yumdownloader --source kernel
rpm -ivh --root=`pwd` kernel.src.rpm
  1. 搭建内核编译环境
yum-builddep kernel
  1. 进入源码安装目录编译内核rpm包
rpmbuild -bb SPECS/kernel.spec --define "_topdir $(pwd)"
  1. 安装编译完成的内核rpm包
  2. 修改内核配置单独编译内核并安装
make menuconfig
make -jN
make modules_install 
make install

注意,内核调试需要打开的配置项没有明确的说法,可以参考Documentation/dev-tools下的文档,gdb+qemu调试内核同kgdb调试内核原理类似,因此可以把KGDB的配置都使能,以下配置可以都使能:

CONFIG_DEBUG_INFO			生成内核基本调试信息,即符号表
CONFIG_DEBUG_KERNEL			包含驱动的调试信息
CONFIG_KGDB					支持KGDB
CONFIG_FRAME_POINTER		支持gdb输出堆栈信息
CONFIG_GDB_SCRIPTS			生成vmlinux-gdb.py用于帮助gdb内核调试(高版本内核支持)

位置:
CentOS工具备忘_第2张图片
CentOS工具备忘_第3张图片
CentOS工具备忘_第4张图片/
CentOS工具备忘_第5张图片
CentOS工具备忘_第6张图片
以下配置必须关闭:

CONFIG_RANDOMIZE_BASE		内核地址空间布局随机化,如果打开,gdb调试的时候会报错访问不了符号对应的内存空间
CONFIG_DEBUG_RODATA 		如果打开,内核只读地址空间无法设置断点
CONFIG_DEBUG_SET_MODULE_RONX	如果打开,内核模块只读空间无法设置断点

位置:
CentOS工具备忘_第7张图片
CentOS工具备忘_第8张图片
CentOS工具备忘_第9张图片
最后,对于一些想要调试的内核模块,也可以编译到内核,避免了在gdb调试的时候加载:

CONFIG_VIRTIO
CONFIG_VIRTIO_PCI
CONFIG_VIRTIO_PCI_LEGACY
CONFIG_VIRTIO_BALLON
CONFIG_VIRTIO_MMIO
CONFIG_VIRTIO_BLK
  1. 虚机内核关闭KASLR特性,关闭该特性有两个方法,内核不编译这个特性,或者内核命令行添加nokaslr参数禁用该特性
    在这里插入图片描述

主机环境

  1. 拷贝整个虚机的内核编译目录到主机
  2. 编辑虚机xml文件,在虚机启动时在qemu命令行中增加-s或者-gdb tcp::1234的参数,启动gdbserver。启动虚拟机
libvirt xml,增加如下标签,qemu命令行中,-s是-gdb tcp::1234缩写

  
    
  

  1. 如果高版本的vmlinux使能了vmlinux-gdb.py脚本,提前准备其配置文件放到~/.gdbinit目录下,内容如下。该配置用来设置gdb python脚本的一些权限。低版本内核跳过这一步
    在这里插入图片描述
  2. 进入内核目录调试vmlinux
cd /path/to/linux-build
gdb ./vmlinux

如果是高版本vmlinux,此时可以输入lx-symbols加载符号,并使用该工具,参考内核文档Documentation/dev-tools/gdb-kernel-debugging.rst
5. 连接虚拟机的gdbserver
(gdb) target remote :1234
6. 设置内核源码目录
(gdb) dir .
7. 设置断点,开始内核调试(注意,有些符号使用kvm加速是断不了的,只能使用tcg加速,比如start_kernel)

b start_kernel
c

工具

yum

  • 列出yum源yum repolist
  • 列出yum命令历史yum history
  • 回退yum命令yum history undo id

cmake

  • 配置安装目录
    cmake -D CMAKE_INSTALL_PREFIX=/usr .

meson

  • 配置安装目录和编译模式
    meson configure --buildtype=debug --prefix=/usr

你可能感兴趣的:(工具手册)