cloud-atlas-draft
  • README
  • 服务器
    • 内存
      • MLC - Intel内存延迟测试工具
    • IPMI
      • ipmitool使用tips
      • 服务器oob带外访问设置
      • ipmi操作和对应的sel日志记录
      • BMC故障导致kipmi0极高的CPU使用
      • HP服务器frimware问题导致ACPI缓存大小相关报错
      • server/ipmi/使用ipmitool在Linux平台配置IPMI
      • 系统日志IPMI message handler: BMC returned incorrect response
      • 串口管理程序conman
    • BIOS
      • 通过linux命令行修改服务器BIOS配置
      • 使用AMI SCELNX修改BIOS设置
      • Dell BIOS设置案例(关闭IR-SRV)
      • 在Linux中通过命令行修改BIOS
      • BIOS/UEFI和EDK
    • 传感器
      • 检查CPU温度
    • Open Compute
      • 服务器选型
  • 操作系统
    • Linux
      • 启动
        • RHEL7升级后磁盘设备label识别错误处理
        • 系统重启时间检查
      • 进程
        • 进程管理
          • 进程状态标志的含义
          • 运行队列中进程排查方法
          • ps命令tips
          • 杀掉多个进程的方法
          • 使用nice调整进程优先级
          • 检查进程的内存使用
          • 查看进程的线程方法
          • top命令使用tips
          • 显示最消耗cpu资源的进程
          • 检查进程运行在哪个CPU上
          • 检查进程启动时间
          • 检查进程使用网络端口
          • 控制台输出"INIT: Id "c0" respawning too fast: disabled for 5 minutes"
          • cron定时执行任务
        • SELinux
        • 线程
          • 进程和线程
          • 检查线程的方法
          • 内核线程
      • 日志
        • 日志文件管理
        • logrotate日志轮转工具
        • logwatch日志监视工具
        • mcelog系统硬件诊断日志搜集工具
        • systemd环境syslog-ng启动失败排查
        • syslog-ng部署和维护
        • tmp临时文件目录自动清理
        • 禁止日志打印到控制台
      • 内核
        • Linux资源管理
          • Cgroup快速起步
            • 如何限制进程使用的内存
            • Cgroup的CPU使用统计控制器
            • Cgroup v2简介
          • 在RHEL6中的Cgroups
            • RHEL6 Cgroups概述
            • RHEL6 使用控制组
          • 在RHEL7中的Cgroups
            • RHEL7 Cgroups概述
            • RHEL7 使用控制组
            • RHEL7 使用libcgroup工具
            • libvirtd日志报错virCgroupSetValueStr"No space left on device"
        • 网络
          • 多网卡bonding
            • Linux以太网Bonding驱动
            • 不断网在线修改bonding网卡MTU
          • 系统日志"TCP: time wait bucket table overflow"分析
          • Linux上禁用IPv6
          • 内核参数网络配置案例
          • SYN攻击、SYN cookie和其他
          • dmesg日志"TCP:unexpectedly shrunk window"
          • TCP拥塞控制
          • 通过BBR TCP拥塞控制算法加速Internet速度
          • 在Ubuntu 18上启用TCP BBR加速网络性能
          • ssh连接超时"Connection timed out"和内核tcp_syn_retries
        • 内核中日志模块和参数
          • 系统日志"__ratelimit: N callbacks suppressed"分析
        • cpu
          • CPU型号和分类
          • cpuinfo无法显示部分core
          • cpu_affinity
          • 中断和smp_affinity
          • 内核线程"migration"和CPU使用
          • 软中断
          • IRQ进程
          • 微代码Microcode
          • Linux 时钟管理
          • Intel Turbo Boost技术和intel_pstate
          • intel_pstate驱动详解
          • acpi-cpufreq主频设置
          • 修改ACPI事件:更改电源键默认操作
          • 笔记本suspended后数秒无故wake up问题排查("ACPI: Waking up from system sleep state S3")
          • 系统负载Load Averages的含义
          • 分析Intel CPU Machine Check Exception(MCE)
          • "NOHZ: local_softirq_pending 100"
          • "NETDEV WATCHDOG: slave0 (bnx2): transmit queue 5 timed out"内核Panic排查
          • Intel Skylake/Kaby Lake处理器系列简介
          • Intel Skylake/Kaby Lake处理器超线程bug及处理
          • dmidecode分析
          • "unchecked MSR access error"
          • AMD处理器ZEN一代之国产化海光
        • 内核调度
          • Linux内核调度基础知识
          • unthrottle_cfs_rq错误修复
        • 内核模块
          • 内核模块参数
          • 内核模式设置KMS
          • DKMS动态内核模块支持
          • dracut简介
        • 内存
          • 内存管理技术简介
            • 概述
          • 透明大页(Transparent Hugepages, THP)
            • 透明大页(Transparent Hugepage)
            • 在Red Hat Enterprise Linux 6/7中使用、监控和禁用透明大页
          • NUMA
            • NUMA node interleaving
            • 从UMA到NUMA
          • RDT
          • order 1内存页分配错误
          • 内核同页合并
          • 检查进程使用内存
          • 缓存清理(drop_caches)和内存压缩(compact_memory)
        • 存储
          • 块设备持久化命名
          • 块设备阻塞事件
          • kworker任务阻塞超过120秒
          • 热插拔磁盘识别
        • 内核跟踪排查
          • 为什么会发生segfault
          • 内核bug排查方法
          • 调试系统错误(Debugging System Faults)
          • 获取内核core dump
          • "Uhhuh. NMI received for unknown reason NN on CPU X"
          • kdump over nfs
          • kdump之后挂起启动而不重启
          • 获取XEN内核core dump
          • Core dump分析
          • 在core文件生成过程中压缩生成的core文件
          • 高Sys CPU的排查
          • debug呆滞的进程
          • 排查XEN服务器hang机core dump
          • vmcore分析案例:"kernel BUG at fs/buffer.c:1270"
          • 获取MySQL core
          • 在CentOS 5.11中编译crash
          • "Kernel panic - not syncing: stack-protector: Kernel stack is corrupted"
          • "hrtimer: interrupt took xxxx ns"和"NOHZ: local_softirq_pending 100"
          • "AER: Multiple Corrected error received"
          • top始终显示load 1
          • gdb和debuginfo
        • Kernel Panic案例
          • not syncing: Attempted to kill init! exitcode=0x00007f00
        • 性能
          • perf-tools性能工具
          • "perf samples too long"是什么?
          • Perf案例(译)
        • 补丁
          • ksplice, kpatch,kexec 技术简介
      • 设备管理
        • 随机数生成器RNG
        • udev
          • udev设备管理架构
        • pcie
          • 深入TLP:PCI exporess设备通讯原理
      • 存储
        • 磁盘
          • IO scheduler
          • 持久化块设备命名
          • parted磁盘工具
          • 磁盘分区4k对齐优化性能
          • Linux分区破坏的修复
          • 混合HDD/SDD的IO scheduler设置
          • 通过block_dump实时监测LinuxIO
          • 检查磁盘I/O负载
          • iotop监视磁盘访问
        • RAID
          • 在Linux中构建RAID
        • LVM
          • Linux卷管理
          • 扩展lvm卷
          • 缩小lvm卷
          • 在Gentoo上使用LVM
          • 执行pvcreate报错"Device /dev/XXX excluded by a filter."
        • 文件系统
          • Linux文件系统的未来
          • EXT文件系统
            • EXT文件系统文件数
            • EXT文件系统误删文件恢复
            • noatime参数挂载文件系统降低IO
            • 获取文件系统挂载的时间点
            • EXT3文件系统转换成EXT4
            • EXT4文件系统优化
            • EXT3文件系统报错"block bitmap and bg descriptor inconsistent"
            • EXT文件系统坏超级块恢复
            • EXT4根文件系统resize
            • EXT4文件系统dioread_nolock + nodelalloc 挂载选项异步写性能问题
            • disk label
            • 找出使用inode最多的文件目录
          • Btrfs文件系统
            • Btrfs文件系统快速起步
          • XFS文件系统
            • 重命名home目录提示"Device or resource busy"
            • xfs文件系统挂载参数
          • ZFS文件系统
            • ZFS dataset丢失排查
            • ZFS替换故障磁盘
            • ZFS高速IO缓存配置
          • FAT文件系统
            • 在Fedora中访问ExFAT文系统
          • 性能
            • iowait
        • 网络块设备(Network Block Device, nbd)
          • nbd概览
      • 网络
        • 网络协议
          • ARP
            • "arp incomplete"问题排查
        • iproute2
          • ip
        • 多网卡bonding
          • suse操作系统多网卡bonding
        • 可伸缩网络堆栈
          • RSS
        • 防火墙
          • Iptables
            • Iptables简易指南
            • CentOS设置HTTP访问iptables
          • Firewalld
            • 在CentOS7上添加防火墙端口允许访问
            • Firewalld丰富而直接的规则:设置Fedora/CentOS 7作为路由器
          • ufw
            • 使用ufw配置NAT masquerade
        • 交换机
          • 构建Linux三层交换机
          • USB over IP
          • Ethernet over USB
      • 备份
        • 使用tar备份完整Linux操作系统
        • 使用rsync备份完整Linux操作系统
      • 安全
        • 审核
          • 系统审核架构
          • 系统审计部署
          • 找出瞬间消失的TCP网络连接进程
          • 找出inode消耗原因
        • 防火墙
          • Linux防火墙简介
      • Red Hat
        • Fedora
          • 在MacBook Pro上实现Fedora和macOS双启动
          • 使用dnf对Fedora进行系统大版本升级
          • 升级到Fedora 27之后内核安装后不更新grub问题处理
          • Fedora x86_64操作系统兼容运行32位程序
          • 使用dnf安装源代码rpm
          • 在Fedora中使用BCM4360无线网卡
          • Fedora设置fcitx中文输入
          • GoldenDict和英中字典设置
          • 在Fedora中使用LXQt桌面
          • 定制LXQt桌面菜单(添加新应用启动)
          • 使用ImageMagick截屏
          • 在LXQt桌面平铺窗口
          • 在Fedora中切换桌面环境
          • 在Xfce桌面禁用alt+鼠标左键移动窗口功能
          • nVidia GT 750M显卡
          • 在Fedora中播放mp4视频
          • 在Fedora的chromium中播放flash
        • CentOS
        • 系统管理
          • CentOS/RHEL周期性自动清理/tmp目录
          • Linux操作系统登录超时设置
          • Grub 2 boot loader
            • Grub快速起步
            • 在grub2中切换默认启动内核
            • 修改grub2启动内核参数
            • 启动进入终端模式
            • EFI系统分区
          • OpenMLI
          • Systemd
            • 创建systemd服务单元
            • systemd修改主机名
            • systemd清理journal日志
            • systemd管理cpupower
            • systemd管理rc.local启动
            • 使用journalctl检查和维护systemd日志文件
            • 通过systemd设置禁止合上笔记本屏幕suspend
            • 合上笔记本屏幕时关闭屏幕
            • 通过systemd设置fedora系统hibernate休眠
            • systemd-logind高负载和内存泄漏问题排查
            • syslog-ng和systemd-journal远程日志存储
            • systemd-journal日志转发syslog
            • 在远程NFS存储上保存Linux系统日志
            • systemd-resolvd本地网络域名解析服务
            • 排查systemd-networkd配置问题
          • Network
            • CentOS7关闭IPv6
            • CentOS 7设置静态IP
            • NetworkManager命令行配置
            • 在NetworkManager管理的网络连接保持DHCP同时添加静态IP地址
            • 修改默认ens33网卡命名为传统eth0
        • rpm软件包管理
          • "无法获得metalink"错误
          • rpm使用tips
          • 检查和解压缩rpm包内容
          • 定时yum更新系统
          • 最小化安装后的yum安装
          • yum使用tips
          • 使用源代码RPMs
          • 使用dnf管理软件包
          • 转换AliOS到CentOS
          • 绝对不要删除keyutils-libs软件包
          • 无需安装的解压缩rpm文件
          • CentOS 5平台通过yum安装git
          • 跨OS平台构建rpm包
          • 升级CentOS 5系统的autoconf和automake工具
          • 通过yum-builddep安装所有从SRPM编译RPM包所依赖软件包
          • 执行"dnf upgrade"时报错"Error unpacking rpm package"处理
          • 执行"rpm -Uvh --force xxx.rpm --nodeps"返回错误码135
          • rpm命令报错"error: Failed to initialize NSS library"
          • 清理系统不使用的旧内核
        • RHEL/CentOS启动服务Tips
      • Debian
        • deb软件包管理
          • Debian最小化安装后的软件包安装建议
          • Debian安装源修改
          • Debian apt-get update出现软件包Hash Sum mismatch处理
          • 升级Debian 8 Jessie到Debian 9 Stretch
          • DEB和RPM安装包互相转换
      • Ubuntu
        • Ubuntu安装部署
          • 使用tar方式备份和恢复系统
          • 使用tar包手工安装多重启动的ubuntu
          • Ubuntu的Hardware Enablement(HWE)内核
          • "admin"账号已被Ubuntu保留无法使用
          • 在U盘上安装Ubuntu
          • Ubuntu 18.10安装NVIDIA驱动
          • 创建具有持久化存储的Live Ubuntu U盘
          • 安装XUbuntu
          • 在MacBook Pro上安装Ubuntu Server
          • 在MacBook Air上运行Ubuntu
          • 在MacBook Pro上运行ubuntu设置WIFI
          • apt upgrade之后提示"you may need to re-run your boot loader[grub]"
          • 设置apt通过代理安装软件
          • 选择最快的apt镜像网站
          • 升级Ubuntu系统到18.04 LTS Bionic Beaver
          • 避免Ubuntu内核升级
          • 使用.iso镜像或U盘作为APT软件仓库
          • 升级提示"packages have been kept back"
        • Ubuntu系统管理
          • 检查Ubuntu系统版本
          • sudo NOPASSWD不工作问题处理
          • Ubuntu启动字符模式
          • Ubuntu字符终端字体大小调整
          • Ly字符终端显示管理器
          • tessellimage进程
          • 网络
            • Ubuntu基本网络配置
            • 802.1x网络认证
      • Arch
        • Arch Linux包管理
        • Arch Linux本地化
        • 将Linux主机模拟成蓝牙键盘和鼠标
        • Arch Linux静态IP和动态IP配置
        • unblock wifi in rfkill
      • Kali
        • Kali Linux基础
        • 创建Kali镜像仓库
        • Kali Linux初始化
        • 通过VNC访问Kali Linux
        • 矫正Kali Linux时间
        • 定制Kali Linux桌面i3窗口管理器
        • 定制Kali Linux桌面fluxbox窗口管理器
        • 在Kali Linux中修改网卡Mac地址
        • 使用终端方式在Kali Linux中配置Wi-Fi网络
      • Gentoo
        • 在MacBook上安装Gentoo
        • Portage包管理
        • gcc-config错误处理一例
        • nVidia显卡
        • intel显卡
        • 混合显卡切换
        • 从KDE桌面转向Xfce桌面
        • 安装Xfce工作平台
        • 中文输入
        • 安装Broadcom无线网卡
        • 电源管理:suspend和hibernate
        • emerge包管理tips
      • SuSE
        • 在SuSE中安装软件包
        • 在SuSE中设置rc.local
      • Linux From Scratch(LFS)
        • 前言
        • 介绍
        • 准备
        • 构建临时系统
      • X window
        • 从ma上访问远程X window
        • 使用macOS的Homebrew X window远程访问Linux
        • 在macOS上使用homebrew-xorg
        • 向X window程序发送字符串
        • 配置Ubuntu平台VNC服务
        • lightdm图形登陆管理器
        • X无法启动'drmSetMaster failed'
        • noVNC:在浏览器中运行VNC
        • Xpra跨平台远程显示服务器
        • Linux的鼠标采样率
    • FreeBSD
      • FreeBSD介绍
      • FreeBSD安装
      • 在FreeBSD上安装软件:Packages和Ports
      • 在ThinkPad上运行FreeBSD
      • FreeBSD无线网络
      • 基于FreeBSD的防火墙pfSense
    • Windows
      • firewall
        • 在Event Viewer中查看Firewall和IPsec事件
      • Windows 10
        • 不同版本Windows 10区别
        • 清理Windows 10磁盘空间
        • 压缩NTFS驱动器
      • Windoes 2012
        • 在Windows Server 2012安装和卸载GUI
      • Windows 2016
        • 在Windows Server 2016 1709上安装OpenSSH
        • 在Windows服务器上安装Windows Subsystem For Linux(WSL)
        • 在Windows上运行OpenSSH
        • 在Windows上后台运行命令(类似Linux的nohup)
      • rdesktop
        • Mac平台远程桌面
      • IIS Web服务
        • 设置IIS下载.iso文件
      • DEBUG
        • 触发Windows Crash(获取memory dump)
        • Windows异常的debug方法简介
      • Windows脚本
        • Windows的无限循环脚本
  • 数据库
    • mysql
      • 安装和升级
        • CentOS 5安装MySQL 5.7
        • 创建MySQL数据库和授权
        • MySQL数据库密码安全策略返回错误"ERROR 1819"
        • 允许ROOT用户远程访问MySQL
      • 快速起步
        • mysql查询命令输出无表格线
        • mysql启动报错"Another MySQL daemon already running with the same unix socket."
        • 查询最近一小时的数据行
      • MySQL脚本
        • 在Shell脚本中使用mysql
        • 使用my.cnf作为mysql命令行配置
      • SQL
        • 查询结果排序
        • 修改表结构
        • 查询当天数据
        • 查询当前时间之前X分钟
      • 磁盘I/O
        • 什么时候MySQL执行IO
        • 如何解决MySQL IOWait过高问题
      • 索引
        • 检查MySQL表索引
      • 备份
        • 使用mysqldump备份和恢复MySQL数据库
      • 主从同步
        • 如何诊断同步备库延迟
        • MySQL多线程复制
      • 故障排查
        • MySQL Root用户密码重置
    • Oracle
      • ARM环境Oracle客户端
  • 网络
    • TCP/IP
      • TCP连接数检查
      • traceroute检查网络可达性
    • 链路聚合
      • LACP
        • LACP原理
        • LACP的ad_select参数
        • LACP数据包分析
        • bonding网卡链路down
    • 网络数据包分析
      • tcpdump
        • tcpdump
        • tcpdump实例介绍
        • tcpdump避免"packets dropped by kernel"
        • 分析跟踪失败的TCP连接和RST数据包(TCP重传率高)
        • tcpdump在启用TCP卸载功能的网卡上报告"checksum error"
        • 结合ping和tcpdump快速定位网络问题
      • wireshark
        • 使用wireshark分析TCP重传
        • 以普通用户身份运行wireshark
        • 在macOS中同时运行多个wireshark
      • ntop
        • ntop架构
        • 在CentOS 7上安装ntop
        • ntopng开源替代
      • 网络数据包分析工具
        • iftop网络流量(ip+port)分析工具
        • tcptrack网络流量(ip+port)分析工具
        • nethogs网络流量分析工具
      • Cisco
        • Overlay Transport Virtualization (OTV)
        • 交换机
          • 小型商业用交换机
            • Cisco SLM2008 8端口小型千兆交换机
          • 数据中心交换机
            • Cisco Nexus交换机延迟监控工具
        • 防火墙
          • Cisco防火墙DoS防护
      • 服务质量(QoS)
        • QoS技术简介
  • 存储
    • 服务器直连存储DAS
      • mpt2sas
        • LSI SAS2308控制芯片
        • mpt2sas驱动系统日志分析
        • mpt2sas系统日志"0x3003010a"和奇怪的sdm磁盘设备
        • mpt2sas故障排查
          • mpt2sas驱动报错案例
          • mpt2sas故障磁盘剔除
      • S.M.A.R.T.
      • 磁盘检测技术
        • 磁盘健康检查
    • GlusterFS
      • GlusterFS服务器端Quorum
    • Ceph
      • Ceph架构
        • Ceph统一存储解决架构
        • Ceph RADOS
      • Ceph硬件
        • Ceph个人存储硬件选择
      • Ceph部署
        • 在树莓派上部署Ceph集群
      • Ceph配置
      • Ceph操作
      • Ceph监控
      • Ceph和OpenStack
      • Ceph性能优化
        • Ceph性能分析
    • SPDK
      • spoold的cpu affinity
    • VDO
  • 服务技术
    • Sendmail
      • Sendmail队列异常处理
    • ssh
      • ssh密钥
      • ssh客户端配置
      • ssh-keygen生成新的SSH密钥
      • ssh指定私钥和生成无密码密钥
      • ssh端口转发
      • ssh多路传输multiplexing加速
      • 使用sslh在443端口提供多种协议服务
      • sshd服务不能加载主机key
      • sshfs远程访问服务器文件系统
      • https服务访问报错"fips_pkey_signature_test:test failure"
      • 属于多个用户组的用户ssh登陆仅显示主用户组问题
      • 加速ssh登陆
      • sshd服务多端口设置
      • ssh登陆报错"PTY allocation request failed on channel 0"
    • DNS
      • DNSmasq
        • DNSmasq快速起步
      • DNS over HTTPS
        • 一份DNS over HTTPS的卡通化介绍
    • Nginx
      • 在Mac OS X环境使用HomeBrew安装Nginx
      • 在CentOS 5环境手工安装Nginx
      • CentOS快速部署nginx+php
      • h5ai-时尚的HTTP服务器索引
      • 排查Nginx应用响应时间
      • 设置Django和Nginx uWSGI
      • Nginx uWSGI错误日志"(13: Permission denied) while reading upstream"
      • 设置Django和Nginx uWSGI的多站点
      • Docker容器迁移后uWSGI运行报错"ImportError: No module named datetime"
      • Nginx的root和alias
    • OpenResty
      • OpenResty安装
      • OpenResty快速起步
    • HAProxy
      • HAProxy和Nginx软件负载均衡对比
      • 在CentOS7中部署HAProxy
      • 使用HAProxy实现MySQL负载均衡
    • Varnish
      • 在Ubuntu上部署Varnish
      • 在Mac上部署Varnish
    • Proxy
      • Squid vs. Varnish vs. Nginx
      • Polipo:小巧的web代理服务器
      • 设置代理服务器和匿名上网
      • 在macOS上部署squid
    • FTP
      • vsftpd
    • NFS
      • CentOS 7 NFS设置
      • Ubuntu 16 NFS设置
      • NFS挂载超时排查
    • Samba
      • CentOS 7 Samba配置
    • NTP
      • NTP服务基础配置
      • 快速校准时间
      • ntpq错误"Request timed out"排查
      • ntp_gettime() returns code 5 (ERROR)
      • 在Ubuntu系统部署NTP服务
      • 命令行设置系统时间
    • aria2
      • 使用多协议多线程下载工具aria2
      • 使用aria2 WEB前端yaaw
    • 流媒体
      • OBS Studio广播
  • 消息队列
    • RabbitMQ
      • 安装RabbitMQ
      • AMQP简介
    • kafka
    • Redis
  • 安全
    • VPN
      • OpenConnect
        • 在Android上使用OpenConnect连接ocserv
        • 安装使用OpenConnect
        • 部署ocserv VPN服务器
        • 部署支持证书的OpenConnect VPN服务器(ocserv)
        • 在Ubuntu上部署OpenConnect VPN服务器(ocserv)
        • 修订ocserv端口
      • Shadowsocks
        • Shadowsocks原理
        • 部署Shadowsocks服务器
        • 在CentOS 7上部署ShadowSocks服务器
        • 安装shadowsocks客户端
    • 无线安全
      • Captive Portal
        • Captive Portal简介
        • 部署WiFiDog实现Captive Portal
      • Linux 802.1x网络认证
  • 虚拟化
    • Captive portal认证
    • Intel
      • VT-x
      • VT-d
        • Intel虚拟化技术Directed I/O架构
      • 内存虚拟化:扩展页表EPT
      • I/O虚拟化:SR-IOV
        • SR-IOV技术介绍
        • 在CentOS中部署SR-IOV
      • I/O虚拟化:数据直接I/O(DDIO)
      • 网络数据虚拟化:DPDK
        • 如何判断网卡是否支持DPDK技术
        • 在Linux中使用DPDK
        • 使用Open vSwith实现DPDK加速虚拟机网络性能
      • GPU虚拟化:GVT
    • kvm
      • kvm虚拟化架构
      • kvm嵌套虚拟化
        • CentOS7的嵌套虚拟化(nested virtualization)部署实践
      • qemu
        • QEMU的vt-d
        • vIOMMU架构
        • qemu监控指令
      • virtio
        • virtio规格
        • virtio guest端实现:PCI, virtio设备,virtio网络和virtqueue
        • Windows虚拟机virtio驱动版本
      • kvm快速起步
        • 一:基于内核的虚拟机(KVM)概览
        • 二:Redhat企业Linux安装KVM
        • 三:RHEL 7.2 配置KVM主机
        • 四:使用命令行启动第一个KVM实例
        • 五:使用Virt-Manger(VMM)部署KVM实例
        • 六:如何克隆一个KVM虚拟机并重置该虚拟机
        • 七:如何在线添加/更改虚拟磁盘
        • 八:如何在线添加/移除虚拟机的内存
        • 九:如何在线添加/移除虚拟机的vCPU
        • 十:更改libvirt虚拟机镜像存储路径
        • 十一:实现Linux KVM在线迁移
        • 十二:RHEL7 Pacemaker - 配置高可用KVM虚拟机
        • kvm快速起步实战
          • 在CentOS中部署KVM
          • 在Ubuntu中部署KVM
          • 访问VM控制台
          • 访问(修改)虚拟机镜像
          • 使用libguestfs+NBD远程访问磁盘镜像
          • KVM libvirt静态IP地址和端口映射
          • 在Gentoo中部署KVM
          • 使用Btrfs部署KVM
          • Clone KVM虚拟机实战
          • 动态调整KVM虚拟机内存和vcpu实战
          • 添加和动态调整虚拟机数据磁盘
          • 调整虚拟机btrfs文件系统大小
          • 添加和更新虚拟机设备
          • Linux KVM在线迁移实战
          • 高可用KVM虚拟机实战
          • 使用virsh删除运行的KVM VM
          • KVM虚拟机vnc远程访问鼠标偏移修复
      • kvm虚拟化部署和管理
        • kvm guest虚拟机时间管理
        • 通过QEMU guest agent和spice agent增强虚拟化
      • Ubuntu环境KVM
        • 安装
        • 网络
        • 创建虚拟机
      • kvm虚拟化存储
        • KVM虚拟机磁盘镜像修改指南(libguestfs:译+实践)
      • kvm性能
        • KVM性能调优实战
          • KVM性能优化架构简述
          • 性能监控工具
          • 多队列virtio-net
          • 使用virtio模式安装Windows
          • 在虚拟化中使用NUMA
        • KVM网络性能调优
          • KVM halt polling系统
        • kvm性能优化
        • kvm最佳实践(汇总)
        • 对于虚拟CPU的KVM性能限制
        • 大页内存技术
        • 透明大页内存技术
        • 大页内存和透明大页内存技术对比
        • Intel VT技术中的Preemption Timer
      • kvm热迁移
        • Ubuntu Guest操作系统热迁移vm内部进程OOM
        • virsh保存和恢复虚拟机状态
      • kvm DEBUG
        • kvm vcpu unhandled rdmsr/wrmsr
        • 在KVM中运行windows 10响应缓慢且CPU sys占用严重的解决方法
      • kvm测试
        • kvm单元测试
    • libvirt
      • 开发
        • 编译libvirt
          • 在CentOS 5环境中编译libvirt
          • 使用src rpm编译libvirt
          • libvirt调试排错
        • 使用Python开发Libvirt应用
          • 热迁移
      • hook
        • 通过libvirt hooks实现特定系统管理
      • Qemu
        • Qemu镜像
        • libvirt pvpanic
        • CentOS pvpanic实现和测试
        • Windows pvpanic实现
        • Windows pvpanic测试
        • 虚拟机core dump引发时间偏移和矫正方法
        • nemu - 面向云计算的轻量版QEMU
      • 设备
        • 虚拟机串口控制台
        • 检查块设备任务
      • Libvirt网络
        • libvirt网络架构
        • libvirt中的防火墙和网络过滤
        • libvirtd无法初始化ip6tables table 'filter'
      • Libvirt日志
        • libvirt日志
        • libvirtd.log日志显示"warning : qemuDomainObjTaint"
        • libvirtd.log日志显示"invalid argument: disk hdc does not currently have a source assigned"
      • NAT网络
      • 远程访问VNC
      • virsh使用
    • 虚拟网络
      • vxlan
        • vxlan概览
      • 故障排查
        • 使用tcpdump排查虚拟机网络不通
        • 虚拟机ping延迟问题排查
    • 性能
      • CPU steal
    • docker
      • Docker for Mac
        • Docker for Mac快速起步
      • Docker Engine
        • 安装
          • 在RedHat安装Docker
          • 在Docker中运行CentOS
          • 在Gentoo安装Docker
            • Docker内核支持参数说明
          • 在Ubuntu安装Docker
          • 在OS X安装Docker
        • Docker 存储
          • Docker应用程序数据
          • 调整dokcer容器可用磁盘空间
      • Docker Debugging
        • 系统日志:"new mount options do not match the existing superblock"
      • Docker开发指南(学习和实践)
        • 容器技术简介
        • 安装Docker
        • Docker快速起步
        • Docker启动容器报错"error response from daemon: secret store is not initialized"
        • 使用Docker快速部署不同版本CentOS容器
        • Docker容器启动时启动服务
        • 操作系统重启时自动启动Docker容器
        • 在Docker容器中部署Python virtualenv环境
        • 映射Docker容器内服务端口提供外部服务
        • Docker卷
        • Docker架构
        • 在开发中应用Docker
        • Docker编排(compose)
        • 运行docker ce
        • 导入和到处Docker容器(跨主机迁移)
        • 从主机视角找出Docker容器的进程
        • 检查Docker日志
        • 在Docker容器中执行命令
    • CoreOS
      • CoreOS架构
    • Kata Containers
    • xen
      • xen架构
        • Xen Hypervisor
        • Xen Hypervisor Debug
        • XenStore和xenstored
        • Xen网络概述
        • Xen内存调优
      • xen快速起步
        • xen动态添加或移除guest内存或CPU
        • xen动态添加usb设备到guest操作系统
      • xen网络
        • Amzaon VPC XEN SR-IOV性能
        • Xen多个VLANs的网络配置
      • xen存储
        • blktap块设备
        • 在Xen中挂载iso镜像文件
      • xen Debug
        • 配置XEN虚拟机Kernel core dump
        • xm list执行报错"int exceeds XML-RPC limits"
    • VMware
      • VMware虚拟机的计时
      • VMware Fusion使用指南
      • 在VMware Fusion虚拟机CentOS Guest中安装Vmware Tool
      • 在VMware Fusion虚拟机中安装macOS
      • 在VMware虚拟机中使用UEFI firmware
      • 在VMware Fusion中复制虚拟机
      • 备份VMware虚拟机
      • VMware headless模式运行虚拟机
      • VMware Fusion虚拟机磁盘空间爆满
      • VMware无法启动macOS APFS文件系统的Time Machine备份恢复
    • PowerVM
      • PowerVM介绍
    • Anbox
      • Anbox架构简介
      • 在Fedora中部署Anbox
    • Atomic
    • LXD
    • VirtualBox
      • VirtualBox使用Tips
    • bhyve
    • xhyve
      • OS X操作系统Hypervisor框架简介
      • 在OS X中部署xhyve
      • 在OS X中部署hyperkit
      • 在xhyve中运行RHEL/CentOS
      • 在xhyve中运行Debian/Ubuntu
      • 进入xhyve的docker虚拟机
    • Vagrant
      • 使用Vagrant部署开发测试环境
      • 使用Vagrant Package打包VirtualBox环境
      • 使用Vagrant部署kvm虚拟化(libVirt)
      • Vagrant Box管理
      • 使用Vagrant Snapshot创建快照备份
      • vagrant up下载镜像失败无法断点续传处理
      • vboxsf模块安装和挂载共享目录
    • 杂项
      • 如何检测虚拟或物理主机
      • 轻量级虚拟化
  • IaaS
    • MAAS
      • Intel SGX安全隔离技术
    • Amazon
      • EC2
        • 如何ssh登陆AWS的EC2实例
    • Microsoft
      • Azure
        • 在Azure上创建Linux虚拟机
    • Google
      • compute
    • Kubernetes
      • Kubernetes设计架构
      • Kubernetes快速起步
        • Hello Minikube
        • 检查kubernetes版本
      • Kubernetes故障排查
        • 排查Kubernetes集群容器重启原因
    • DC/OS
    • OpenStack
      • DevStack
        • DevStack开发环境
      • 安装指南
        • 环境
          • 安全
          • 主机网络
          • 网络时间协议
          • OpenStack软件包
          • SQL数据库
          • 消息队列
          • Memcached
      • Red Hat OpenStack
        • 架构
          • 组件
          • 架构案例
      • 华为OpenStack
    • oVirt
      • oVirt架构
      • oVirt存储管理
      • 部署oVirt
      • oVirt升级
      • oVirt的VNC密码设置
    • 腾讯云
      • 云API SDK
        • 腾讯云Python API SDK快速起步
    • 云存储
      • Dropbox
        • 在墙内如何使用Dropbox
  • 监控
    • IaaS类监控
      • skinken
      • sensu
  • 性能
    • web
      • Progressive JPEG
    • 网络
      • 网络性能优化
      • 网络工具
        • ping检查网络连通性
        • tcpreplay - 网络流量编辑和重放工具
        • netperf网络带宽测试
        • iperf网络测试
        • 使用iperf3测试网络带宽
        • ping时间戳
        • 使用sar显示网络流量
      • 网络故障排查
        • "IO error: Broken Pipe"是什么意思
    • 云计算
      • PerfKit Benchmarker
        • PerfKit Benchmaker快速起步
        • 配置PerfKit Benchmarker
        • PerfKit Benchmarker增加新的云服务商
        • 谷歌云gcp
        • 微软云azure
          • Azure起步
        • 腾讯云qcloud
          • QcloudApi起步
    • 实用工具
      • fio存储性能测试
        • fio快速起步
          • fio指南
            • fio编译和安装
      • iostat
      • tsar
      • linpack
      • dd测试磁盘性能
      • 通过sheel计算pi测试CPU性能
      • Unixbench性能测试工具
      • sysbench性能测试工具
      • SPEC CPU测试CPU性能
  • 开发
    • C
      • 编译
        • make程序时ld报错的DEBUG方法
        • gcc编译显示"cc1: warnings being treated as errors"处理方法
        • c语言中的单行注释和多行注释方法
        • 编译c程序调用Python
      • 网络
        • HTTP
          • 使用C实现一个简单的HTTP POST并处理相应
      • 打印输出
        • 重定向printf()到文件
    • Swift
      • 在Linux上安装swift 3
      • Swift服务器开发
    • Java
      • java的胡思乱想(白日梦)
        • [Java简单案例]](develop/java/java_daydream/java_simple_example.md)
        • Java输入输出
        • Java循环
        • Java数组
        • Java面向对象编程
      • 快速起步的一个例子:猜数字
      • jshell
      • groovy
        • 安装groovy
        • groovy简单语法
        • groovy字符串分隔
        • groovy时间处理
        • groovy对象比较
      • Java Trouble Shoot
        • Druid连接池"druid.pool.GetConnectionTimeoutException"
    • Go
      • Fedora环境下Go快速起步
      • macOS环境下Go快速起步
      • Go起步
      • Go测试库testify
    • iOS
      • iPhone 3GS:十年后经典再现
      • iOS6拟物化
      • iPhone 4S越狱、降级和其他
      • 新安装App提示"Verification Required"的解决
      • USIM卡
    • Android
      • 学习Android开发
        • Android应用是如何编译和运行的
        • Android开发环境
        • adb(Android Debug Bridge)和Android数据存储
        • 在Android模拟器上运行应用
        • 离线(手工)安装Android System Image
        • 配置Android模拟器使用硬件加速
      • Android起步
        • Android One和Android Go
        • Nexus 5系统升级
        • Root Android(Nexus 5)
        • Android文件传输
        • Android文件管理和apk安装
        • Android文件系统读写挂载
        • Android截屏和录屏
        • 在Google Play购买软件
        • Android开发环境准备
        • Jetbrains Idea快捷键
        • Gentoo Linux安装idea Jetbrains开发环境
        • 在Nexus上安装Android 7 Nougat
        • 在Nexus 6P上安装LineageOS 15.1
        • Nexus 6P工厂镜像恢复
        • Nexus 6P通过Full OTA镜像恢复
        • 修复Nexus 6P无限循环重启
        • 安装Elemental X内核
        • 使用MultiROM在Nexus 5上安装多操作系统
      • LineageOS
        • 构建hammerhead(Nexus 5)的LineageOS ROM
        • 构建marlin(Pixel XL)的LineageOS ROM
        • 在hammerhead(Nexus 5)上安装LineageOS
        • 在hammerhead(Nexus 5)构建Android Go
      • 我的Android设备
        • Nokia中端高可玩X7
        • Nexus 6P
        • 真正原生Android: Pixel系列
        • Pixel设置VoLTE
      • Android和Linux合体
        • 在Android中运行Linux
        • 在Android中部署ssh服务
        • 在Android上部署Linux开发环境
        • 容器模式在Linux中安装和运行Android Apps(APKs)
        • Anbox - 运行在Linux中的Android容器
          • 在Anbox容器中运行Android程序
      • BlueTooth
        • 通过蓝牙共享网络
      • NFC近场通讯
        • NFC技术概览
        • 日常生活NFC使用介绍
        • NFC开发基础
    • Raspberry Pi
      • 树莓派快速起步
      • 树莓派计算模块
      • 从USB存储启动树莓派
      • 树莓派4的USB接口问题汇总
      • 树莓派视频输出配置
      • 树莓派作为Cisco Console服务器
      • 树莓派Zero设置USB网络通讯(Ethernet Gadget)
      • 在树莓派Zero W上运行Kali Linux
    • Ubuntu Touch
      • 在Nexus 5上安装Ubuntu Touch系统
      • Ubuntu Touch使用tips
      • Ubuntu Touch手机设置802.1x无线网络
      • Ubuntu Touch运行sshd服务
      • Ubuntu Touch设置网络Proxy方法
      • 在Ubuntu Touch中运行Android程序
    • BlackBerry
      • 黑莓bb10系统运行微信
    • Meego和Sailfish
      • sfdroid:Sailfish/Android合体
      • sailfish和meego系统的第三方软件仓库
    • WebOS
      • Palm Veer共享移动internet
    • Python
      • Python开发风格
        • 开源Python项目结构
      • Python快速起步
        • pip包管理
        • 在古老的CentOS 5上安装Python 2.7以及virtualenv环境
        • 在CentOS 6上安装Python 2.7以及virtualenv环境
        • 在CentOS 7上安装Python 2.7以及virtualenv环境
        • Ubuntu环境安装virualenv和virtualenvwrapper
        • 在CentOS上安装Python3和virtualenv环境
        • 在macOS上安装Python3和virtualenv环境
        • 重建Python的virtualenv环境
        • pip升级Python软件包
        • 激活python解释器的自动完成功能
        • init.py文件
        • python编程风格
        • python中文本编码
        • 检查python对象类型
        • python处理文本
        • python中main函数作用
        • python日志
        • python日期
        • python变量写文件
        • python同时读取2个文件
        • python列表
        • python数组
        • python字典
        • Python的map函数
        • lambda语法糖:无需定义函数名的简便方法
        • python过滤字符
        • python百分比
        • python三元运算
        • python创建其他用户可写文件
        • python清空文件内容
        • python删除文件中某行
        • python列表字符串转浮点数
        • python多层嵌套字典KeyError
        • "PEP 8(E731): do not assign a lambda expression, use a def"
        • python的模块和包
        • python获取系统cpu数量
        • python nohup后台运行进程
        • 使用Graphviz模块绘制图形
        • python字典内容添加到列表
        • python site-packages简介
        • python去除字符串换行
        • Python程序Daemon化
        • Python函数返回多个值
        • Python执行外部命令subprocess
        • Python实现case/switch
        • Python使用环境变量
        • 将JSON字符串转换成Python字典
        • 本地变量分配前被引用报错"local variable 'XXX' referenced before assignment"
        • Python中对应于'null'的是什么?
        • 在Python分割字符串
        • 在Python中检查字符串是否被包含在另一个字符串中
        • 在Python中执行命令的利器"subprocess"
        • Python日志功能
        • Python处理XML
        • 安装阿里云对象存储OSS Python SDK和osscmd
        • 阿里云日志服务SLS python SDK和CLI
      • Python网络编程
        • Python WEB编程
          • 创建URL查询字符串
      • Python日志处理
        • Python日志基础
        • 在python日志中使用轮转和压缩
        • python处理systemd journal日志
      • Python文件系统
        • Python's Watchdog模块实现文件系统变化触发操作
      • Python网络开发模块Twisted
        • Twisted起步和FTP实现
      • Flask开发Web
        • 安装Flask开发环境
        • 基于Flask的Dashboard - Dash
      • DJongo开发Web
        • Django快速起步
          • 快速安装Django
          • Django项目代码架构风格
          • 使用MySQL作为Django数据库
          • 设置django的允许主机
          • 第一个Django应用
          • 离线安装Django
          • 完整uninstall一个Django app
          • 'module' object has no attribute 'views'
          • 使用django-tables2展示HTML表
          • django特定model保存记录时触发动作
          • django前端案例--Portal
          • django过滤当天发生事件
          • django实现select count(*) group by和order by
          • django缓存
        • Django DEBUG
          • "UnicodeDecodeError: 'ascii' codec can't decode byte"
        • 轻量级Django
          • Hello World
        • Django REST framework
          • Django REST framework概述
          • Django REST framework快速起步
          • 修改Django REST framework的默认title
          • Django REST framework序列化
          • Django REST framwork过滤
          • django REST Framework的时区,视图和模型刷新debug
        • Django Dashboard案例
          • 结合d3.js/reactive.js/leaflet实现Django Dashboard
        • django-dash控制台(废弃)
          • 本地运行django-dash demo
          • 使用django-dash快速构建控制台
        • 安装Django测试驱动开发环境
        • TTD(测试驱动):开发环境第一个测试
        • TTD(测试驱动):使用单元测试测试简单首页
      • Python学习案例
        • youtuble-dl下载视频网站内容
    • Ruby
      • Ruby快速起步
        • Fedora环境下Ruby快速起步
        • RubyGems安装和使用
    • JavaScript
      • jQuery
      • D3.js数据可视化
    • Node.js
      • Node.js快速起步
        • Node.js开发环境准备
        • Fedora环境下Node.js快速起步
        • Node.js开发WEB框架
        • 在Mac OS X下卸载Node.js
      • npm包管理
        • npm使用tips
        • svg2png
    • 浏览器
      • Firefox
        • 设置Firefox默认页面缩放比例zoom
        • Firefox的Dark风格设置(styelish)
        • Firefox自动代理切换
      • Chrome
        • 设置Chrome代理
      • Min
    • PHP
      • Nginx php-fpm配置优化Tips
    • Mac
      • 在mac上从iso镜像创建启动U盘
      • 从macOS Recovery中重新安装macOS
      • 从Time Machine备份中恢复Mac数据
      • 检测Time Machine备份的Mac OS X版本
      • 降级macOS
      • 在VMware虚拟机中运行Mavericks
      • 中文输入法
      • macOS内建的文本朗读(英语)
      • Mac平台使用VLC播放器的中文字幕显示
      • Mac平台最佳视频播放器iina
      • TextMate 2使用Tips
      • Sublime 3使用Tips
      • 在Mac OS X上安装Java多个版本
      • 使用MacBook键盘在移动设备输入
      • Mac网络
      • macOS上使用ftp
      • 从safari中导出打开的tab
      • bird进程
      • 在Mac上双启动方式安装Linux
      • 创建macOS启动安装U盘
      • 在Mac上使用Boot Camp Assistant安装Windows 10
      • rEFInd工具详解
      • 加速Time Machine备份速度
      • 在mac上输入特殊字符
      • Mac锁屏
      • Mac吸入式光驱强制弹出光盘
      • 为旧主机选择最快的Mac OS X版本
      • 通过Reset NVRAM来恢复触控板
      • Apple文件系统apfs
      • 苹果充电器指示灯闪烁无法充电
      • 通过SSHFS在Mac上远程开发Linux服务器程序
      • 在macOS上安装配置vsftpd
      • 清理macOS上的Purgeable磁盘空间
      • 调整macOS的apfs容器空间
      • 调整APFS文件系统出现"APFS Container Resize error code is 49153"
      • Mac OS X挂载NFS共享
      • MacOS快捷键
      • 从Time Machine中恢复隐藏文件
      • iTerm2中文显示问题处理
      • iTerm2黑暗模式
      • 安装使用GNU sed
      • 具有BouchBar的新款MacBook和Linux
      • 在Mac OS X中通过CLI命令行获取CPU信息
      • 不能运行"not from a verified developer"程序
      • Mac OS X Mavericks和iOS 6组合(体验最后的拟物化苹果生态)
      • 将iPad作为Mac的第二块屏幕(sidecar)
      • MacBook Pro 2018使用外接显示器
      • macOS安装冻结问题处理
      • macOS的磁盘工具First Aid功能
      • 查找macOS的IP地址
      • 升级macOS之后运行程序报错"missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcru"
      • 在Mac上使用checksum校验文件
    • shell
      • bash
        • bash快捷键
        • shell的特殊变量
        • 判断shell变量是否空字符串
        • 字符串比较错误提示"unary operator expected"
        • shell脚本中使用source和使用./cmd.sh区别
        • here document用法(cat << EOF)
        • 根据命令返回结果做if判断
        • 使用sudo在文件中添加内容
        • shell中的环境变量
        • shell函数tips
        • 生成随机数和随机字符串
        • shell中使用数组
        • shell中读取文件到bash数组
        • 列出所有cron定时任务
        • 在shell中计算
        • 在bash计算
        • shell中的break和continue指令
        • 读取文件逐行处理元素
        • 两个文件相减
        • 在shell中使用while循环
        • 在while循环中执行ssh中断循环的解决方法
        • shell中调用函数返回值的方法
        • shift的用法
        • 移除换行
        • 删除字符串最后n个字符
        • 删除一个文件的最后一行
        • 替换多个空格成为一个空格
        • ``符号和脚本进程
        • 同时赋值给多个变量
        • 在shell中比较小数的大小
        • sudo执行bash脚本报错"sudo: unable to execute"
        • 获取字符串最后几个字母
        • 对比目录文件异同
        • 文件对比
        • 判断字符串包含关系的方法
        • 检查字符串长度
        • "exec"指令的含义
        • 从函数返回
        • 检查变量是否是一个数值
        • shell中判断字符串null值
        • 删除文件名中包含"--"的文件
        • 使用nohup执行while循环
        • 修改nohup命令默认输出文件名"nohup.out"
        • 通过SSH远程写入文件
        • ping测试记录时间戳
        • 软链接和文件名
        • shell中字符串大写和小写转换
        • shell中处理json数据工具jq
        • shell检查主机是否alive
        • shell中检查服务器进程使用cpu
        • 获取网卡IP地址
        • 高效清理文件系统大量文件的方法
        • 找出系统端口监听服务进程
        • 判断文件是否为空
        • 执行rm,cp,mv命令出现"Argument list too long"报错的解决方法
        • 切分字符串赋值给多个变量
        • 计算字符串长度(字符数量)
        • 删除字符串的最后字符
        • 补全字符串
        • 检查数字是偶数还是奇数
        • 转换Linux uptime时间到易于理解的格式
      • zsh
        • oh-my-zsh
      • sed和awk
        • awk和shell之间的变量传递
        • 打印列中包含某个字符串的列
        • awk处理字符串搜索
        • sed举例
        • 如何避免sed -i破坏文件的软链接
        • sed替换行首和行尾
        • 使用sed修改配置文件到键值
        • Mac平台sed命令使用-i参数失败及解决方法
        • 删除文件的首行和尾行
        • 删除文件的最后一列
        • 累加所有行的每一列数值
      • 实用工具
        • sudo切换账号运行程序
        • 修改用户帐号名/uid/gid的工具usermod和groupmod
        • 脚本作为daemon运行
        • cut使用举例
        • sort排序
        • 对cpu施加负载
        • 多路复用终端管理器screen
        • 多路复用终端管理器"增强版"byobu
        • 随机输出文本文件中的行:shuf
        • 使用usermod禁用帐号
        • 使用tree展示目录结构树
        • 根据进程名pgrep和pkill
        • wget下载文件tips
        • HTTP协议利器curl
        • 命令执行超时检查工具timeout
        • 脚本使用ssh的密码认证工具sshpass
        • 并行执行ssh命令工具pssh
        • 命令输出处理工具xargs
        • 文件查找工具find
        • parallel利用多核CPU加速Linux命令
        • 命令速查表cheat
        • 语音合成工具espeak
        • 网络万能工具nc
        • 限制命令的io调度和权重
        • 配置修改工具augeas
        • 高效压缩工具xz
        • tar命令再认识
        • echo命令再认识
    • vim
      • vim快速起步
      • vim 跳转到函数、变量定义处
      • vim tips
      • vim树形导航插件NERDtree
      • vim编译配置"YouCompleteMe"
      • vim结合ctags作为开发平台
      • vim开发内核环境
      • 将Vim打造成Python开发平台
      • 使用vim作为c/c++ IDE
      • 使用vim作为c/c++ IDE(again)
      • 使用vim作为IDE
      • 在macOS平台使用vim作为IDE
      • vim大小写转换
      • 设置vim缩进和TAB
      • vim列编辑
      • vim并列视图编辑和查看同一文件(viewports)
      • 卸载macvim
    • 文档
      • dot
        • 使用Graphviz生成系统诊断图
      • GitBook
        • 使用GitBook撰写书籍
        • 如何在一台主机同时运行多个GitBook
        • GitBook评论插件
        • GitBook单章节展开插件
        • GitBook代码段添加文件名
        • GitBook多国语言
        • GitBook嵌入视频
      • MkDocs
        • 使用MkDocs撰写书籍
      • Hugo
        • 使用Hugo撰写文档
      • Hexo
        • 使用hexo撰写blog
        • 使用hexo theme tranquilpeak
      • Sphinx
        • 使用Sphinx构建Python程序文档
        • 使用Sphinx构建Django程序文档
        • sphinx中文文档在readthedocs编译PDF失败的处理
        • 结合plantuml使用sphinx撰写时序图文档
        • sphinx文档的代码展示
        • sphinx文档的footer定制
        • sphinx图片
        • 'redrawtime' exceeded, syntax highlighting disabled
      • MoinMoin
        • MoinMoin 2安装
        • MoinMoin 1安装
        • 配置Moin
        • Moin Themes
      • Office
        • 在Linux中使用Sozi制作PPT
        • Linux演示工具(PPT)
      • OmniGraffle
      • Sketch
    • 编程架构
      • 统一建模语言UML
        • 看懂UML类图和时序图
      • RESTful开发架构
        • RESTful简介
        • 理解RESTful架构
        • RESTful认证和权限机制浅析
    • 机械键盘
  • DevOps
    • 基础架构工程师视角的DevOps
    • 持续集成/交付/部署
      • 持续集成/交付/部署概述
    • Git
      • git代理配置
      • git分支的新建与合并
      • git的tag和branch
      • git pull覆盖本地文件(完全舍弃本地文件)
      • git合并时冲突放弃本地修改方法
      • git远程操作
      • git和dropbox冲突
      • 针对不同域名git push时使用指定SSH key
      • git忽略文件mode修改
      • git重新基于master开发分支
      • 合并多个commit
      • git色彩显示
      • 在不同git仓库代码使用不同用户名
      • [git合并冲突解决](devops/git/git _merge_fix_conflicts.md)
      • git checkout指定tag
      • 从git仓库中清理敏感信息(如密码))
      • git通过SSH Tunnel代理访问
      • git文件的执行属性
      • 修改git commit消息
    • Gerrit
    • Gitlab
      • 部署使用的ssh key
      • gitlab Wiki系统gollum
    • Gogs
    • Jenkins
    • Ansible
      • 起步
        • Ansible快速教程
        • 安装
        • 快速起步
        • 清单
        • 动态清单
        • Patterns
        • Ad-Hoc命令
      • Playbooks
        • Playbooks入门
        • 案例:升级CentOS操作系统
        • 案例:通过sudo安装rpm包
      • 模块
        • command - 在远程节点执行一个命令
        • shell - 在远程节点执行命令
      • Dashboard
        • Ansible Tower开源替代:semaphore
      • 问题排查
        • TAB键导致"Syntax Error while loading YAML"
        • paramiko主机认证报错
        • paramiko主机认证报错
        • playbook执行报错"requires the stdlib json or simplejson module"
      • Tips
        • Ansible模块shell,command
        • 如果软件包没有安装则执行命令
        • 不检查SSH主机fingerprint
        • 变量和引号
        • ansible性能优化
        • 使用ansible.cfg
        • 安装rpm报错"unfinished transactions remainin"
        • yum安装报错"Package XXX is not signed"
        • yum安装报错"No Package matching"
        • Ansible批量复制文件
    • Puppet
  • 大数据
    • Hadoop
      • 快速起步
        • 单机安装部署Hadoop
      • 故障排查
        • RHEL6环境下透明大页和Hadoop高CPU sys
    • Flink
      • flink流处理架构
    • Spark
      • 快速起步
        • 单机安装部署Spark
      • Spark机器学习
    • Elasticsearch
      • ESK简介
      • ESK快速安装
    • ZooKeeper
  • 机器学习
    • 斯坦福机器学习(CS229)
      • 机器学习介绍
      • 监督学习介绍
      • 无监督学习介绍
      • 单变量线性回归
      • 多变量线性回归
    • 单变量的线性回归
    • TensorFlow
      • 面向机器智能的TensorFlow
    • 机器翻译
      • moses
    • GPU计算
      • nVidia CUDA
      • AMD ROCm
    • Jetson Nano
      • vpi1-demos报错可忽略
  • 学习
    • 慕课(mooc)
      • 我的慕课
    • 天堂电影院
      • 使用VLC播放加密蓝光碟片
    • Kindle在,人未老
      • 重置Kindle Paperwhite
      • 使用calibre去除kindle DRM
      • 备份Kindle电子书
      • 电子书阅读软件
      • Kindle个人文档
      • 制作合适kindle的pdf:pdf切边和重排
      • 使用Kindle阅读pdf文档
    • GTD: Getting Things Done
  • 附录:个人工作室构建
    • MacBook双操作系统启动macOS+Linux
    • 使用Fedora作为开发平台
    • 无线网络设置
    • 帐号、ssh和sudo设置
    • 部署kvm虚拟化
    • 部署docker容器
    • 部署OpenStack
    • 远程开发Linux服务器程序
    • NFS设置和共享目录
    • Django开发设置
    • 部署Nginx+uwsgi运行Django
    • HAProxy端口转发
    • 使用wekan作为Trello类型的"看板"管理自己的工作
  • Who am I?
Powered by GitBook
On this page
  • 转换到CentOS 7.8.2003
  • 后面的记录是以前的历史记录,仅参考,2020年实际操作以上文为准
  • 转换到CentOS 7.4(旧方法记录)
  • 如何降级软件包
  • 最新转换方法(成功,整理稿)
  • 最新转换方法的各种探索折腾(仅做记录,整理见上文)
  • ! /usr/bin/python3.5
  • 和dnf的冲突(这里执行可能错误,需要修正)
  • dcrpm(修复工具,实际也没有解决,仅记录)

Was this helpful?

  1. 操作系统
  2. Linux
  3. Red Hat
  4. rpm软件包管理

转换AliOS到CentOS

本文提供给需要将AliOS(类似CentOS的给予RHEL的发行版本)转换到标准社区CentOS的人做参考

转换到CentOS 7.8.2003

2020年6月,CentOS 7已经发布到 7.8.2003 。本段落是完整的操作步骤记录,请参考这段记录

2021年4月,CentOS 7可以使用 7.9.2009

  • 卸载alios版本包

rpm -e --nodeps alios-release-server-7.2-24.alios7.x86_64
rpm -e alios-base-setup-7.2-33.alios7.noarch
rm -f /etc/yum.repos.d/CentOS-Base.repo
rm -f /etc/yum.repos.d/epel.repo
rm -f /etc/yum.repos.d/ops.repo
rm -f /etc/yum.repos.d/RHEL.repo
rm -f /etc/yum.repos.d/taobao.repo

有一个warning,不过,软件包还是删除了

warning: Unable to get systemd shutdown inhibition lock: Unit is masked.
  • 导入证书

#rpm --import http://mirrors.163.com/centos/7.8.2003/os/x86_64/RPM-GPG-KEY-CentOS-7

rpm --import http://mirrors.163.com/centos/7.9.2009/os/x86_64/RPM-GPG-KEY-CentOS-7
  • 安装CentOS系统配置

#rpm -ivh http://mirrors.163.com/centos/7.8.2003/os/x86_64/Packages/centos-release-7-8.2003.0.el7.centos.x86_64.rpm

rpm -ivh http://mirrors.163.com/centos/7.9.2009/os/x86_64/Packages/centos-release-7-9.2009.0.el7.centos.x86_64.rpm
  • 删除 taobao-repo-utils 否则centos 的 yum报错

rpm -e taobao-repo-utils-2.1.0-5.noarch
rpm -e taobao-repo-utils-1.1.2-10.1.alios7.noarch
  • 卸载dnf (alios 7.2引入了Fedora使用的dnf,但是和官方yum冲突)

rpm -e --nodeps \
dnf-conf-2.7.6-6.alios7.noarch \
libdnf-0.11.1-1.alios7.x86_64 \
python2-dnf-plugins-core-2.1.5-9.alios7.noarch \
python2-dnf-2.7.6-6.alios7.noarch \
dnf-2.7.6-6.alios7.noarch \
python2-dnf-plugin-show-leaves-2.1.5-9.alios7.noarch \
dnf-plugins-p2p-0.1.0-1.alios7.noarch \
dnf-plugins-core-2.1.5-9.alios7.noarch \
python2-dnf-plugin-leaves-2.1.5-9.alios7.noarch \
python2-dnf-plugin-versionlock-2.1.5-9.alios7.noarch \
dnf-utils-2.1.5-8.alios7.noarch
  • 卸载yum (alios 7.2由于使用了dnf,导致yum实际是dnf的软连接,并且有很多残留包需要一并删除)

rpm -e --nodeps \
yum4-2.7.6-6.alios7.noarch \
yum-metadata-parser-1.1.4-10.1.alios7.x86_64 \
yum-baseline-hc-1.0.0-20200620.alios7.x86_64 \
yum-langpacks-0.4.2-4.1.alios7.noarch \
yum-plugin-fastestmirror-1.1.31-46.alios7.noarch \
yum-adapter-0.1.0-7.alios7.noarch \
python-urlgrabber-3.10-8.1.alios7.noarch
  • 然后重新安装yum

#rpm -ivh \
#http://mirrors.163.com/centos/7.8.2003/os/x86_64/Packages/yum-3.4.3-167.el7.centos.noarch.rpm \
#http://mirrors.163.com/centos/7.8.2003/os/x86_64/Packages/python-urlgrabber-3.10-10.el7.noarch.rpm \
#http://mirrors.163.com/centos/7.8.2003/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-53.el7.noarch.rpm \
#http://mirrors.163.com/centos/7.8.2003/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm


rpm -ivh \
http://mirrors.163.com/centos/7.9.2009/os/x86_64/Packages/yum-3.4.3-168.el7.centos.noarch.rpm \
http://mirrors.163.com/centos/7.9.2009/os/x86_64/Packages/python-urlgrabber-3.10-10.el7.noarch.rpm \
http://mirrors.163.com/centos/7.9.2009/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-54.el7_8.noarch.rpm \
http://mirrors.163.com/centos/7.9.2009/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
  • 恢复yum的packages目录

cp /var/lib/rpm.bdbbak/Packages /var/lib/rpm/Packages
  • 修订yum配置中版本变量 $releasever (我不知道为何alios不能如centos一样获得这个变量,所以强制改为7):

cd /etc/yum.repos.d
sed -i 's/\$releasever/7/g' *

但是,这里一定要注意,在完成升级之后,一定要把 /etc/yum.conf.d 目录下文件再恢复原样,即恢复 $releasever 。因为此时已经可以正常工作,并且后续升级大版本到entOS 8需要读取这个变量配置。如果不恢复标准配置,会导致大版本升级失败,因为升级CentOS大版本会检查 /etc/yum.conf.d 目录下配置,如果配置不是发行版无修改到配置,会导致升级拿不到正确到 $releasever 版本。

由于升级后,正确的新的yum配置文件会存储为类似 CentOS-Base.repo.rpmnew 这样的格式,所以采用如下方法覆盖:

cd /etc/yum.repos.d
for i in `ls *.rpmnew`;do (file=`echo $i | awk -F.rpmnew '{print $1}'`;yes | cp $file.rpmnew $file);done
  • 清理以前残留的yum缓存

rm -rf /var/cache/yum
  • 有残留文件 /usr/lib64/rpm-plugins/systemd_inhibit.so 会导致rpm卸载报错

error: Failed to resolve symbol plugin_hooks: /usr/lib64/rpm-plugins/systemd_inhibit.so: undefined symbol: plugin_hooks

删除该文件之后可正常工作

rm -f /usr/lib64/rpm-plugins/systemd_inhibit.so

不过建议直接卸载

rpm -e rpm-plugin-systemd-inhibit-4.14.1-14.alios7.x86_64
  • 执行 yum update 有提示 warning: Found BDB Packages database while attempting lmdb backend: using bdb backend. ,不过完成升级后这个报错不再出现

现在可以执行升级

yum update -y

后面的记录是以前的历史记录,仅参考,2020年实际操作以上文为准

转换到CentOS 7.4(旧方法记录)

rpm -e --nodeps alios-release-server-7.2-9.alios7.x86_64
rpm --import http://mirrors.163.com/centos/7.4.1708/os/x86_64/RPM-GPG-KEY-CentOS-7
rpm -ivh http://mirrors.163.com/centos/7.4.1708/os/x86_64/Packages/centos-release-7-4.1708.el7.centos.x86_64.rpm

部分软件包版本号有冲突(AliOS采用了更高的版本编号),需要做降级:

yum downgrade systemd-libs-219-42.el7_4.10 systemd-219-42.el7_4.10 systemd-sysv-219-42.el7_4.10

yum downgrade libgpg-error-1.12-3.el7 \
bzip2-libs-1.0.6-13.el7 bzip2-1.0.6-13.el7 \
libattr-2.4.46-12.el7 attr-2.4.46-12.el7 \
cracklib-2.9.0-11.el7 cracklib-dicts-2.9.0-11.el7 \
libcap-ng-0.7.5-4.el7

如何降级软件包

要找到如何降级版本,基本方法就是:当yum upgrade报错某些软件包冲突,就通过rpm -qa | grep XXXX找到有哪些相关包,例如:

#rpm -qa | grep systemd
systemd-219-42.4.alios7.x86_64
systemd-sysv-219-42.4.alios7.x86_64
systemd-libs-219-42.4.alios7.x86_64

而在yum upgrade时候提示:

Error: Package: systemd-219-42.4.alios7.x86_64 (@alios.7u2.base.x86_64)
           Requires: systemd-libs = 219-42.4.alios7
           Removing: systemd-libs-219-42.4.alios7.x86_64 (@alios.7u2.base.x86_64)
               systemd-libs = 219-42.4.alios7
           Downgraded By: systemd-libs-219-42.el7_4.10.x86_64 (updates)
               systemd-libs = 219-42.el7_4.10
......

就说明需要从版本219-42.4.alios7降级到219-42.el7_4.10,对应相关的软件包systemd和systemd-libs等都要同时降级,所以执行命令:

yum downgrade systemd-libs-219-42.el7_4.10 systemd-219-42.el7_4.10 systemd-sysv-219-42.el7_4.10

最新转换方法(成功,整理稿)

alios最新版本引入了Fedora中使用的dnf包管理器,这个dnf包管理器和CentOS官方的yum冲突,所以在转换到CentOS时需要卸载dnf。

rpm -e --nodeps \
libdnf-0.11.1-1.alios7.x86_64 \
python2-dnf-2.7.6-6.alios7.noarch \
dnf-conf-2.7.6-6.alios7.noarch \
python2-dnf-plugins-core-2.1.5-5.alios7.noarch \
python2-dnf-plugin-leaves-2.1.5-5.alios7.noarch \
dnf-plugins-p2p-0.1.0-1.alios7.noarch \
python2-dnf-plugin-versionlock-2.1.5-5.alios7.noarch \
dnf-2.7.6-6.alios7.noarch \
python2-dnf-plugin-show-leaves-2.1.5-5.alios7.noarch \
dnf-plugins-core-2.1.5-5.alios7.noarch \
dnf-utils-2.1.5-5.alios7.noarch

rpm -e yum-adapter-0.1.0-7.alios7.noarch alios-base-setup-7.2-33.alios7.noarch yum-langpacks-0.4.2-4.1.alios7.noarch yum-plugin-fastestmirror-1.1.31-34.1.alios7.noarch python-urlgrabber-3.10-7.1.alios7.noarch

上述软件包版本可能会有出入,以实际操作系统版本为准,都需要卸载

具体以 rpm -qa | grep dnf 和 rpm -qa | grep yum 为准,例如

rpm -e --nodeps \
python2-dnf-2.7.6-6.alios7.noarch \
python2-dnf-plugin-show-leaves-2.1.5-6.alios7.noarch \
dnf-utils-2.1.5-5.alios7.noarch \
python2-dnf-plugins-core-2.1.5-6.alios7.noarch \
dnf-conf-2.7.6-6.alios7.noarch \
libdnf-0.11.1-1.alios7.x86_64 \
dnf-plugins-p2p-0.1.0-1.alios7.noarch \
dnf-2.7.6-6.alios7.noarch \
dnf-plugins-core-2.1.5-6.alios7.noarch \
python2-dnf-plugin-leaves-2.1.5-6.alios7.noarch \
python2-dnf-plugin-versionlock-2.1.5-6.alios7.noarch

rpm -e --nodeps \
yum-langpacks-0.4.2-4.1.alios7.noarch \
yum4-2.7.6-6.alios7.noarch \
yum-adapter-0.1.0-7.alios7.noarch \
yum-baseline-hc-1.0.0-20190714.alios7.x86_64 \
yum-metadata-parser-1.1.4-10.1.alios7.x86_64 \
yum-plugin-listdownloadpkgurl-1.0.0-4.alios7.x86_64 \
yum-plugin-fastestmirror-1.1.31-46.alios7.noarch \
python-urlgrabber-3.10-8.1.alios7.noarch

然后重新安装yum

rpm -ivh http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/yum-3.4.3-161.el7.centos.noarch.rpm http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/python-urlgrabber-3.10-9.el7.noarch.rpm http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-50.el7.noarch.rpm http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm

需要删除 taobao-repo-utils 否则centos 的 yum报错

rpm -e taobao-repo-utils-2.1.0-5.noarch

此时 yum update 还是报错

Traceback (most recent call last):
  File "/bin/yum", line 29, in <module>
    yummain.user_main(sys.argv[1:], exit_code=True)
...
OSError: [Errno 2] No such file or directory: '/var/lib/rpm/Packages'

这个 /var/lib/rpm/Packages 实际上是被alios部署dnf时候备份移动到 /var/lib/rpm.bdbbak/Packages ,可以复制回来就可以使用yum。

cp /var/lib/rpm.bdbbak/Packages /var/lib/rpm/Packages

现在就可以使用 yum update 了,不过,还需要删除alios仓库信息并加入CentOS信息:

rpm -e --nodeps alios-release-server-7.2-18.alios7.x86_64
# 或者
rpm -e --nodeps alios-release-server-7.2-23.alios7.x86_64

rpm --import http://mirrors.163.com/centos/7.6.1810/os/x86_64/RPM-GPG-KEY-CentOS-7
rpm -ivh http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/centos-release-7-6.1810.2.el7.centos.x86_64.rpm
  • 安装EPEL

rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

此时就可以使用

yum clean all

不过会提示,有其他repo占用了磁盘,用以下命令检查

yum clean all --verbose

可以看到

32 M   untracked repos:
  30 M   /var/cache/yum/x86_64/7/alios.7u2.base.x86_64
  1.5 M  /var/cache/yum/x86_64/7/ops.7.x86_64
  636 k  /var/cache/yum/x86_64/7/ops.7.noarch
37     other data:
  37     /var/cache/yum/x86_64/7/timedhosts

删除这些目录

rm -rf /var/cache/yum/x86_64/7/alios.7u2.base.x86_64 \
/var/cache/yum/x86_64/7/ops.7.x86_64 \
/var/cache/yum/x86_64/7/ops.7.noarch \
/var/cache/yum/x86_64/7/timedhosts
  • 安装screen,并以screen启动后再进行系统升级,避免网络断开

  • 开始系统升级

yum update

由于当前CentOS 7.6大多数软件包版本都比alios新,所以几乎所有软件都会替换成标准的社区版本。

  • 有残留文件 /usr/lib64/rpm-plugins/systemd_inhibit.so 会导致rpm卸载报错

error: Failed to resolve symbol plugin_hooks: /usr/lib64/rpm-plugins/systemd_inhibit.so: undefined symbol: plugin_hooks

删除该文件之后可正常工作

rm -f /usr/lib64/rpm-plugins/systemd_inhibit.so
  • 其他可能会有一些软件包需要降级,以便能够适配CentOS发行版提供的软件包,例如,安装kvm环境,会提示由于系统已经安装了高版本的rpm包,导致CentOS无法提供对应高版本依赖包,则需要降级系统已经安装的rpm包后才能使用CentOS软件包安装:

yum downgrade keyutils-libs-1.5.8-3.el7.x86_64 libverto-0.2.5-4.el7.x86_64

最新转换方法的各种探索折腾(仅做记录,整理见上文)

这里的技巧是:移除所有非社区repo配置,但是保留 CentOS官方repo 和 EPEL官方repo,然后立即升级 dnf ,这样可以使用EPEL官方repo提供的DNF覆盖alios的DNF,后续就可以切换到社区软件仓库继续滚动升级。

rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
  • 升级DNF:

yum update dnf

出现报错

Error:
 Problem: package dnf-4.0.9.2-1.el7_6.noarch conflicts with python2-dnf-plugins-core < 4.0.2 provided by python2-dnf-plugins-core-2.1.5-6.alios7.noarch
  - package python2-dnf-plugin-leaves-2.1.5-6.alios7.noarch requires python2-dnf-plugins-core = 2.1.5-6.alios7, but none of the providers can be installed
  - cannot install the best update candidate for package dnf-2.7.6-6.alios7.noarch
  - problem with installed package python2-dnf-plugin-leaves-2.1.5-6.alios7.noarch
(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages)

改为执行:

yum upgrade dnf --allowerasing

此时提示

======================================================================================================================
 Package                                   Arch              Version                         Repository          Size
======================================================================================================================
Upgrading:
 dnf                                       noarch            4.0.9.2-1.el7_6                 extras             357 k
 dnf-plugins-core                          noarch            4.0.2.2-3.el7_6                 extras              51 k
 libdnf                                    x86_64            0.22.5-1.el7_6                  extras             533 k
 libsolv                                   x86_64            0.6.34-2.el7                    base               328 k
 python-urlgrabber                         noarch            3.10-9.el7                      base               108 k
 python2-dnf                               noarch            4.0.9.2-1.el7_6                 extras             414 k
 python2-dnf-plugin-versionlock            noarch            4.0.2.2-3.el7_6                 extras              44 k
 python2-dnf-plugins-core                  noarch            4.0.2.2-3.el7_6                 extras             165 k
 python2-hawkey                            x86_64            0.22.5-1.el7_6                  extras              68 k
Installing dependencies:
 dnf-data                                  noarch            4.0.9.2-1.el7_6                 extras              51 k
     replacing  dnf-conf.noarch 2.7.6-6.alios7
 libmodulemd                               x86_64            1.6.3-1.el7                     extras             141 k
 libsmartcols                              x86_64            2.23.2-59.el7_6.1               updates            140 k
 libyaml                                   x86_64            0.1.4-11.el7_0                  base                55 k
 python-dateutil                           noarch            1.5-7.el7                       base                85 k
 python-enum34                             noarch            1.0.4-1.el7                     base                52 k
 python2-libdnf                            x86_64            0.22.5-1.el7_6                  extras             608 k
 yum                                       noarch            3.4.3-161.el7.centos            base               1.2 M
Removing dependent packages:
 dnf-utils                                 noarch            2.1.5-5.alios7                  @System            4.0 k
 python2-dnf-plugin-leaves                 noarch            2.1.5-6.alios7                  @System            9.5 k
 python2-dnf-plugin-show-leaves            noarch            2.1.5-6.alios7                  @System            4.7 k
 yum-adapter                               noarch            0.1.0-7.alios7                  @System            653
 yum4                                      noarch            2.7.6-6.alios7                  @System              0

Transaction Summary
======================================================================================================================
Install  8 Packages
Upgrade  9 Packages
Remove   5 Packages

注意,完成后还有一些残留alios的dnf软件包会影响工作,则检查系统看有哪些残留的 dnf form alios 软件包,逐个清理:

#rpm -qa | grep dnf | grep alios
dnf-plugins-p2p-0.1.0-1.alios7.noarch

执行清理命令

rpm -e dnf-plugins-p2p-0.1.0-1.alios7.noarch
dnf clean all

会报错

Traceback (most recent call last):
  File "/bin/dnf", line 57, in <module>
    from dnf.cli import main
  File "/usr/lib/python2.7/site-packages/dnf/__init__.py", line 30, in <module>
    import dnf.base
  File "/usr/lib/python2.7/site-packages/dnf/base.py", line 29, in <module>
    import libdnf.transaction
  File "/usr/lib64/python2.7/site-packages/libdnf/__init__.py", line 3, in <module>
    from . import conf
  File "/usr/lib64/python2.7/site-packages/libdnf/conf.py", line 17, in <module>
    _conf = swig_import_helper()
  File "/usr/lib64/python2.7/site-packages/libdnf/conf.py", line 16, in swig_import_helper
    return importlib.import_module('_conf')
  File "/usr/lib64/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
ImportError: No module named _conf

检查上述python文件涉及的rpm包

#rpm -qf /bin/dnf
dnf-4.0.9.2-1.el7_6.noarch

#rpm -qf /usr/lib/python2.7/site-packages/dnf/__init__.py
python2-dnf-4.0.9.2-1.el7_6.noarch

#rpm -qf /usr/lib/python2.7/site-packages/dnf/base.py
python2-dnf-4.0.9.2-1.el7_6.noarch

#rpm -qf /usr/lib64/python2.7/site-packages/libdnf/__init__.py
python2-libdnf-0.22.5-1.el7_6.x86_64

#rpm -qf /usr/lib64/python2.7/site-packages/libdnf/conf.py
python2-libdnf-0.22.5-1.el7_6.x86_64

#rpm -qf /usr/lib64/python2.7/importlib/__init__.py
python-libs-2.7.5-34.1.alios7.x86_64

其中 python-libs 是alios版本,在CentOS中找到对应版本进行升级

rpm -Uvh http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/python-libs-2.7.5-76.el7.x86_64.rpm http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/python-2.7.5-76.el7.x86_64.rpm http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/openssl-1.0.2k-16.el7.x86_64.rpm http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/openssl-libs-1.0.2k-16.el7.x86_64.rpm

但是还是没有解决上述报错,检查 /usr/lib64/python2.7/site-packages/libdnf/conf.py :

# This file was automatically generated by SWIG (http://www.swig.org).
# Version 3.0.12
#
# Do not make changes to this file unless you know what you are doing--modify
# the SWIG interface file instead.

from sys import version_info as _swig_python_version_info
if _swig_python_version_info >= (2, 7, 0):
    def swig_import_helper():
        import importlib
        pkg = __name__.rpartition('.')[0]
        mname = '.'.join((pkg, '_conf')).lstrip('.')
        try:
            return importlib.import_module(mname)
        except ImportError:
            return importlib.import_module('_conf')
    _conf = swig_import_helper()
    del swig_import_helper
...

系统已经安装了swig,我尝试升级到刚放版本

尝试 yum install python3 提示有

  File "/usr/lib/yum-plugins/branch.py", line 124, in getRhelRelease
    if r[6] == '4':

所以卸载

rpm -e taobao-repo-utils-2.1.0-5.noarch

尝试安装python3

rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/Packages/p/python36-3.6.8-1.el7.x86_64.rpm https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/Packages/p/python36-libs-3.6.8-1.el7.x86_64.rpm

错误依旧

将所有alios的python2相关包搜索出来重新升级

#rpm -qa | grep python2 | grep alios
python2-rpm-4.14.1-13.alios7.x86_64
python2-libcomps-0.1.8-3.alios7.x86_64
python27-pycrypto-2.6.1-1.alios7.x86_64
python2-librepo-1.8.2-2.alios7.x86_64
python2-ipaddress-1.0.18-5.alios7.noarch

尝试删除 python2-rpm-4.14.1-13.alios7.x86_64

#rpm -e python2-rpm-4.14.1-13.alios7.x86_64
error: Failed dependencies:
    rpm-python >= 4.11.3-25.el7.centos.1 is needed by (installed) python2-dnf-4.0.9.2-1.el7_6.noarch
    rpm-python is needed by (installed) yum-3.4.3-161.el7.centos.noarch

但是系统并没有安装 rpm-python 而是安装了 python2-rpm-4.14.1-13.alios7.x86_64 ,似乎是这个冲突?

已经安装的 python2-rpm-4.14.1-13.alios7.x86_64 版本高于官方 rpm-python-4.11.3-35.el7.x86_64

  • 手工安装swig?(不行)

rpm -ivh http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/python-devel-2.7.5-76.el7.x86_64.rpm
rpm -Uvh http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/pcre-devel-8.32-17.el7.x86_64.rpm http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/pcre-8.32-17.el7.x86_64.rpm
tar xfz swig-2.0.12.tar.gz
cd swig-2.0.12
./configure

make
make install

但是没有解决

I solved the problem by pointing the dnf script to python3.5 (which did have the dnf module installed).

First edit /usr/bin/dnf.

I changed the shebang statement to:

Code:

! /usr/bin/python3.5

then, I re-ran:

Code:

sudo dnf system-upgrade reboot

在 7.6 beta中,yum/yum4/dnf 是指向 dnf-2 的,我查看了系统

#ls -lh /usr/bin/dnf
lrwxrwxrwx 1 root root 5 Feb 14 04:19 /usr/bin/dnf -> dnf-2

#ls -lh /usr/bin/yum
-rwxr-xr-x 1 root root 801 Nov  5  2018 /usr/bin/yum

但是从fedora 28开始,应该同时指向 dnf-3

目前已经安装的python2版本dnf相关包

python2-libdnf-0.22.5-1.el7_6.x86_64
python2-dnf-4.0.9.2-1.el7_6.noarch
python2-dnf-plugins-core-4.0.2.2-3.el7_6.noarch
python2-dnf-plugin-versionlock-4.0.2.2-3.el7_6.noarch

可以尝试升级到python3

和dnf的冲突(这里执行可能错误,需要修正)

最新的alios引入了fedora中使用的dnf包管理工具,实际上这个工具尚未引入centos 7,需要移除避免冲突。

rpm -e --nodeps \
libdnf-0.11.1-1.alios7.x86_64 \
python2-dnf-2.7.6-6.alios7.noarch \
dnf-conf-2.7.6-6.alios7.noarch \
python2-dnf-plugins-core-2.1.5-5.alios7.noarch \
python2-dnf-plugin-leaves-2.1.5-5.alios7.noarch \
dnf-plugins-p2p-0.1.0-1.alios7.noarch \
python2-dnf-plugin-versionlock-2.1.5-5.alios7.noarch \
dnf-2.7.6-6.alios7.noarch \
python2-dnf-plugin-show-leaves-2.1.5-5.alios7.noarch \
dnf-plugins-core-2.1.5-5.alios7.noarch \
dnf-utils-2.1.5-5.alios7.noarch

rpm -e yum-adapter-0.1.0-7.alios7.noarch alios-base-setup-7.2-33.alios7.noarch yum-langpacks-0.4.2-4.1.alios7.noarch yum-plugin-fastestmirror-1.1.31-34.1.alios7.noarch python-urlgrabber-3.10-7.1.alios7.noarch

然后重新安装yum

rpm -ivh http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/yum-3.4.3-161.el7.centos.noarch.rpm http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/python-urlgrabber-3.10-9.el7.noarch.rpm http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-50.el7.noarch.rpm

此时就可以使用

yum clean all

不过会提示,有其他repo占用了磁盘,用以下命令检查

yum clean all --verbose

可以看到

32 M   untracked repos:
  30 M   /var/cache/yum/x86_64/7/alios.7u2.base.x86_64
  1.5 M  /var/cache/yum/x86_64/7/ops.7.x86_64
  636 k  /var/cache/yum/x86_64/7/ops.7.noarch
37     other data:
  37     /var/cache/yum/x86_64/7/timedhosts

删除这些目录

rm -rf /var/cache/yum/x86_64/7/alios.7u2.base.x86_64 \
/var/cache/yum/x86_64/7/ops.7.x86_64 \
/var/cache/yum/x86_64/7/ops.7.noarch \
/var/cache/yum/x86_64/7/timedhosts

需要删除 taobao-repo-utils 否则centos 的 yum报错

rpm -e taobao-repo-utils-2.1.0-5.noarch

此时还是报错

Traceback (most recent call last):
  File "/bin/yum", line 29, in <module>
    yummain.user_main(sys.argv[1:], exit_code=True)
  File "/usr/share/yum-cli/yummain.py", line 375, in user_main
    errcode = main(args)
  File "/usr/share/yum-cli/yummain.py", line 239, in main
    (result, resultmsgs) = base.buildTransaction()
  File "/usr/lib/python2.7/site-packages/yum/__init__.py", line 1198, in buildTransaction
    (rescode, restring) = self.resolveDeps()
  File "/usr/lib/python2.7/site-packages/yum/depsolve.py", line 893, in resolveDeps
    CheckDeps, checkinstalls, checkremoves, missing = self._resolveRequires(errors)
  File "/usr/lib/python2.7/site-packages/yum/depsolve.py", line 1009, in _resolveRequires
    thisneeds = self._checkInstall(txmbr)
  File "/usr/lib/python2.7/site-packages/yum/depsolve.py", line 1087, in _checkInstall
    provs = self.tsInfo.getProvides(*req)
  File "/usr/lib/python2.7/site-packages/yum/transactioninfo.py", line 636, in getProvides
    result = self.getOldProvides(name, flag, version)
  File "/usr/lib/python2.7/site-packages/yum/transactioninfo.py", line 629, in getOldProvides
    for pkg, hits in self.rpmdb.getProvides(name, flag, version).iteritems():
  File "/usr/lib/python2.7/site-packages/yum/rpmsack.py", line 1497, in getProvides
    pkgs = self.searchProvides(name)
  File "/usr/lib/python2.7/site-packages/yum/rpmsack.py", line 497, in searchProvides
    ret = self.searchPrco(name, 'provides')
  File "/usr/lib/python2.7/site-packages/yum/rpmsack.py", line 476, in searchPrco
    po = self._makePackageObject(hdr, idx)
  File "/usr/lib/python2.7/site-packages/yum/rpmsack.py", line 1377, in _makePackageObject
    self._cached_rpmdb_mtime = os.path.getmtime(rpmdbfname)
  File "/usr/lib64/python2.7/genericpath.py", line 54, in getmtime
    return os.stat(filename).st_mtime
OSError: [Errno 2] No such file or directory: '/var/lib/rpm/Packages'

这个错误我找到了解决方法(见下文)

另外需要移除一些冲突软件包

rpm -e libganglia ganglia-gmond ganglia-devel ganglia-gmond-modules-python
mkdir /backups/
tar -zcvf /backups/rpmdb-$(date +"%d%m%Y").tar.gz  /var/lib/rpm

rm -f /var/lib/rpm/__db*
/usr/lib/rpm/rpmdb_verify /var/lib/rpm/Packages

这里显示报错

rpmdb_verify: /var/lib/rpm/Packages: No such file or directory
BDB5105 Verification of /var/lib/rpm/Packages failed.

我检查了在虚拟机中安装的CentOS 7,确实有一个 /var/lib/rpm/Packages 这个文件是一个 Berkeley DB (Hash, version 9, native byte-order)

由于这里出现报错,则足需要dump和重新加载新的数据库

cd /var/lib/rpm/
mv Packages Packages.back
/usr/lib/rpm/rpmdb_dump Packages.back | /usr/lib/rpm/rpmdb_load Packages
/usr/lib/rpm/rpmdb_verify Packages

同样报错

BDB5105 Verification of /var/lib/rpm/Packages failed.

经过多次失败,我突然想到,这个存在问题的系统,或许有一个Packages文件位于某处,只是之前软件包管理不是标准位置导致的问题。

在 /var/lib 目录下执行 find . -name Packages ,果然发现了一个 ./rpm.bdbbak/Packages 文件,或许就是之前alios切换到DNF时候备份的系统原先使用yum管理的库文件。 另外,在 ./rpm.lmdbbak/ 有 data.mdb lock.mdb

  • 尝试复制回文件

cp /var/lib/rpm.bdbbak/Packages /var/lib/rpm/

然后再次执行:

/usr/lib/rpm/rpmdb_verify /var/lib/rpm/Packages

这次没有报错,显示

BDB5105 Verification of /var/lib/rpm/Packages succeeded.

再次执行

yum clean all

这次提示信息似乎正常

warning: Found BDB Packages database while attempting lmdb backend: using bdb backend.
warning: Generating 18 missing index(es), please wait...
Loaded plugins: fastestmirror, langpacks
Cleaning repos: base epel extras updates
Cleaning up list of fastest mirrors
Other repos take up 257 M of disk space (use --verbose for details)

现在解决了,可以使用yum了,只不过每次都会提示 warning: Found BDB Packages database while attempting lmdb backend: using bdb backend.

dcrpm(修复工具,实际也没有解决,仅记录)

git clone https://github.com/facebookincubator/dcrpm.git
cd dcrpm
python setup.py install

这里有报错

ImportError: No module named setuptools

则先安装

rpm -ivh http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/python-setuptools-0.9.8-7.el7.noarch.rpm

再次执行

python setup.py install

报错

psutil/_psutil_common.c:9:20: fatal error: Python.h: No such file or directory
 #include <Python.h>
                    ^
compilation terminated.
error: Setup script exited with error: command 'gcc' failed with exit status 1

由于系统没有安装 python-devel ,所以通过以下命令一次安装升级 python-devel

rpm -Uvh http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/python-libs-2.7.5-76.el7.x86_64.rpm http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/python-2.7.5-76.el7.x86_64.rpm http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/python-devel-2.7.5-76.el7.x86_64.rpm

再次执行安装成功。

然后执行:

dcrpm

报错

ImportError: No module named typing

安装pip,通过pip安装:

curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"

python get-pip.py

再通过pip安装typing

pip install typing

然后继续执行dcrpm

但是没有输出也没有修复。

  • 清理本地锁

grep rpm /etc/rc.d/rc.sysinit
rm -f /var/lib/rpm/__db* &> /dev/null
  • 删除所有 /var/spool/up2date 目录下文件

cd /var/spool/up2date
rm *
rm .*
  • 确保没有进程在使用rpm

ps -aux | grep -e rpm -e yum -e up2date
lsof | grep /var/lib/rpm
  • 删除db文件

rm -f /var/lib/rpm/__db*
  • 备份

cd /var/lib
tar -zcvf /var/preserve/rpmdb-$(date +%Y-%m-%d_%H-%M-%S).tar.gz rpm
  • 验证Packages文件

cd /var/lib/rpm
rm -f __db*      # to avoid stale locks
/usr/lib/rpm/rpmdb_verify Packages

同样报错

rpmdb_verify: Packages: No such file or directory
BDB5105 Verification of Packages failed.

比较奇怪,使用 rpm -qa 是可以正常输出系统已经安装的RPM包

  • 创建工作目录

mkdir /var/tmp/recoverdb
  • 确保所有yum-util软件包已经安装:

yum install yum-utils
  • 如果失败,则下载软件包手工安装

rpm -Uvh --nodeps --force yum-utils*.rpm
  • 安装完成后,执行以下命令下载所需要的软件包

cat /var/log/rpmpkgs | sed 's,\.[^.]\+\.rpm$,,g' | while read nvr
    do
      yumdownloader --destdir=/var/tmp/recoverdb $nvr
    done
  • 重建rpm数据库

cd /var/tmp/recoverdb
ls *.rpm > MANIFEST
rpm -Uvh --noscripts --notriggers --force --justdb MANIFEST

出现报错

error: Failed dependencies:
    libc.so.6 is needed by atk-2.28.1-1.el7.i686
    ...
    libc.so.6(GLIBC_2.0) is needed by at-spi2-atk-2.26.2-1.el7.i686
    ...
    libc.so.6(GLIBC_2.0) is needed by at-spi2-core-2.28.0-1.el7.i686
    ...

由于报错都是 .i686 并且检查下载的rpm包中有 *.el7.i686.rpm ,推测是系统纯 x86_64 系统,所以缺乏相关依赖包。

先升级glibc x86_64,然后再安装i686版本

rpm -Uvh http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/glibc-common-2.17-260.el7.x86_64.rpm http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/glibc-2.17-260.el7.x86_64.rpm http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/glibc-devel-2.17-260.el7.x86_64.rpm http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/glibc-headers-2.17-260.el7.x86_64.rpm
rpm -ivh http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/glibc-2.17-260.el7.i686.rpm http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/glibc-devel-2.17-260.el7.i686.rpm

此时还报告缺少

error: Failed dependencies:
    libfreebl3.so is needed by glibc-2.17-260.el7.i686
    libfreebl3.so(NSSRAWHASH_3.12.3) is needed by glibc-2.17-260.el7.i686
rpm -ivh http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/glibc-2.17-260.el7.i686.rpm http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/glibc-devel-2.17-260.el7.i686.rpm http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/nss-softokn-freebl-3.36.0-5.el7_5.i686.rpm http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/nss-util-3.36.0-1.el7_5.i686.rpm http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/nspr-4.19.0-1.el7_5.i686.rpm

再次尝试 yum update 依然出现报错

OSError: [Errno 2] No such file or directory: '/var/lib/rpm/Packages'
Previous使用dnf管理软件包Next绝对不要删除keyutils-libs软件包

Last updated 4 years ago

Was this helpful?

注意,alios引入了fedora中使用的dnf包管理工具,我尝试卸载dnf和恢复yum标准环境,但是发现导致了yum环境混乱无法正常工作。所以还是恢复DNF工作,采用 来完成系统软件安装维护。(失败,最终未解决)

然后从 下载

突然看到 :

根据 说明:

请参考 重建:

尝试采用 可以检测和修复rpm,所以尝试如下:

参考

Red Hat提供了另外一个参考文档 ,此外提供了一个

参考 ,这个库位于 nss-softokn-freebl ,并且要和 glibc 一起安装

dnf管理软件包
https://sourceforge.net/projects/swig/files/swig/swig-2.0.12/
https://forums.fedoraforum.org/showthread.php?314779-DNF-Python-failure-after-upgrade-to-F26
https://people.redhat.com/mskinner/rhug/q3.2018/MSP-RHUG-YUM-is-dead-Long-live-YUM.pdf
How to Rebuild Corrupted RPM Database in CentOS
dcrpm
How to rebuild RPM database on a Red Hat Enterprise Linux system?
How to recover rpm database using /var/log/rpmpkgs?
How to rebuild RPM database on a Red Hat Enterprise Linux system?
https://zhidao.baidu.com/question/362945838409899652.html