diff --git "a/caselibrary/920X\345\207\272\347\216\260mountsysroot\345\244\261\350\264\245\347\232\204\351\227\256\351\242\230.md" "b/caselibrary/920X\345\207\272\347\216\260mountsysroot\345\244\261\350\264\245\347\232\204\351\227\256\351\242\230.md" index 9f31a79d64d4b578196cd1af4a2bc7533ea30bfa..237a1c3cbe11bbd4e0fec30a133bb64f99ab7e36 100644 --- "a/caselibrary/920X\345\207\272\347\216\260mountsysroot\345\244\261\350\264\245\347\232\204\351\227\256\351\242\230.md" +++ "b/caselibrary/920X\345\207\272\347\216\260mountsysroot\345\244\261\350\264\245\347\232\204\351\227\256\351\242\230.md" @@ -115,5 +115,3 @@ load_module->module_sig_check->mod_verify_sig->verify_pkcs7_signature->verify_pk **方案二:隔离CPU核130,131** 软件上通过CPU核隔离设置,可以隔离出异常的CPU核,作为规避方案。 - - diff --git "a/caselibrary/LVM\346\240\207\347\255\276\346\215\237\345\235\217.md" "b/caselibrary/LVM\346\240\207\347\255\276\346\215\237\345\235\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..a84f311062cf2475531a4c7e8d0705b1e2ef0a94 --- /dev/null +++ "b/caselibrary/LVM\346\240\207\347\255\276\346\215\237\345\235\217.md" @@ -0,0 +1,44 @@ +# LVM标签损坏 + +## 现象描述 + +pvs查询不到pv,blkid查询不到LVM2_member标签。 +正常情况: + +![](./figures/lvm-1.png) + +异常情况: + +![](./figures/lvm-2.png) + +## 原因分析 + +hexdump查看元数据区域,发现标签损坏。 + +![](./figures/lvm-3.png) + +![](./figures/lvm-4.png) + +## 解决方法 + +1. 在/etc/lvm/backup目录查询卷组备份信息,获取pv的uuid,使用pvcreate命令恢复。 + + ![](./figures/lvm-5.png) + + 命令如下: + + ``` + pvcreate --uuid D8v9Qw-1EJw-cmRc-nY2y-AZbC-8eLd-5Cpi2s --restorefile /etc/lvm/backup/vg /dev/sdb + ``` + +2. pv复之后,再恢复卷组。 + + ``` + vgcfgrestore --file /etc/lvm/backup/vg vg + ``` + +3. 最后激活卷组 + + ``` + vgchange -ay vg + ``` diff --git "a/caselibrary/audit\345\206\231\346\227\245\345\277\227\345\215\240\346\273\241\345\210\206\345\214\272\347\251\272\351\227\264\345\207\272\347\216\260\347\263\273\347\273\237\345\201\234\346\234\272\351\227\256\351\242\230\345\210\206\346\236\220.md" "b/caselibrary/audit\345\206\231\346\227\245\345\277\227\345\215\240\346\273\241\345\210\206\345\214\272\347\251\272\351\227\264\345\207\272\347\216\260\347\263\273\347\273\237\345\201\234\346\234\272\351\227\256\351\242\230\345\210\206\346\236\220.md" index 155d097b8a9c3468180a76e644cd36292ffc04ea..5a80b71f95fd41b97c935d9740c6c896d1ffe3d7 100644 --- "a/caselibrary/audit\345\206\231\346\227\245\345\277\227\345\215\240\346\273\241\345\210\206\345\214\272\347\251\272\351\227\264\345\207\272\347\216\260\347\263\273\347\273\237\345\201\234\346\234\272\351\227\256\351\242\230\345\210\206\346\236\220.md" +++ "b/caselibrary/audit\345\206\231\346\227\245\345\277\227\345\215\240\346\273\241\345\210\206\345\214\272\347\251\272\351\227\264\345\207\272\347\216\260\347\263\273\347\273\237\345\201\234\346\234\272\351\227\256\351\242\230\345\210\206\346\236\220.md" @@ -5,6 +5,7 @@ 系统异常停机,需要排查停机原因。 ## 现象描述 + 查看日志记录是由audit执行停机动作,按照预期已配置日志回滚,不应该停机。 查看audit日志目录,存在记录大量日志且已占满空间,如下: @@ -21,6 +22,7 @@ ``` ## 原因分析 + 从现象上看,疑似audit日志回滚能力失效,检查auditd.conf配置: ``` @@ -52,5 +54,7 @@ max_log_file_action = keep_logs //keep_logs 与rotate相似,但忽略num_logs ``` 综上所述,此案例下audit写日志占满空间是由于配置“max_log_file_action = keep_logs”导致"num_logs = 5"参数失效。 + ## 解决方案 -将max_log_file_action设置为rotate即可。 \ No newline at end of file + +将max_log_file_action设置为rotate即可。 diff --git a/caselibrary/figures/lvm-1.png b/caselibrary/figures/lvm-1.png new file mode 100644 index 0000000000000000000000000000000000000000..7f0b30deac8111cbc77658595b827825c3f45ce4 Binary files /dev/null and b/caselibrary/figures/lvm-1.png differ diff --git a/caselibrary/figures/lvm-2.png b/caselibrary/figures/lvm-2.png new file mode 100644 index 0000000000000000000000000000000000000000..fae687b735dd83fe8b6cdc487bbbd089b5e77c18 Binary files /dev/null and b/caselibrary/figures/lvm-2.png differ diff --git a/caselibrary/figures/lvm-3.png b/caselibrary/figures/lvm-3.png new file mode 100644 index 0000000000000000000000000000000000000000..87860adf7a715315df669d5ab8d9f5a3c78b891e Binary files /dev/null and b/caselibrary/figures/lvm-3.png differ diff --git a/caselibrary/figures/lvm-4.png b/caselibrary/figures/lvm-4.png new file mode 100644 index 0000000000000000000000000000000000000000..314b5435915fdeeb31722326ac6f3b24a7376c46 Binary files /dev/null and b/caselibrary/figures/lvm-4.png differ diff --git a/caselibrary/figures/lvm-5.png b/caselibrary/figures/lvm-5.png new file mode 100644 index 0000000000000000000000000000000000000000..c2ff4d2a9e20e5f988877d3589cbf567ba1fe140 Binary files /dev/null and b/caselibrary/figures/lvm-5.png differ diff --git a/caselibrary/figures/pvs-1.png b/caselibrary/figures/pvs-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c97a4effc7aa8b4b3a530c529ab33dbfe221568c Binary files /dev/null and b/caselibrary/figures/pvs-1.png differ diff --git a/caselibrary/figures/pvs-2.png b/caselibrary/figures/pvs-2.png new file mode 100644 index 0000000000000000000000000000000000000000..58628ea86f389d04be8dc4317ae5d60450eda370 Binary files /dev/null and b/caselibrary/figures/pvs-2.png differ diff --git "a/caselibrary/isulad\344\275\277\347\224\250grpc\344\270\216rest\347\233\264\346\216\245\350\260\203\347\224\250\346\234\215\345\212\241\346\226\271\346\263\225.md" "b/caselibrary/isulad\344\275\277\347\224\250grpc\344\270\216rest\347\233\264\346\216\245\350\260\203\347\224\250\346\234\215\345\212\241\346\226\271\346\263\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..f2ab80df13e8ce589c060c919e49f989c1f0fe38 --- /dev/null +++ "b/caselibrary/isulad\344\275\277\347\224\250grpc\344\270\216rest\347\233\264\346\216\245\350\260\203\347\224\250\346\234\215\345\212\241\346\226\271\346\263\225.md" @@ -0,0 +1,31 @@ +# isulad使用grpc与rest直接调用服务方法 + +## isulad使用grpc直接调用服务方法 + +isula与isulad之间的通信默认使用grpc,且k8s场景CRI接口调用只能使用grpc。 + +若用户想在第三方组件中直接通过gRPC连接向iSulad请求服务,可参照不同功能模块目录下的proto文件获取gRPC请求格式。 + +调试grpc调用可使用grpcurl工具,grpcurl 是 Go 语言开源社区开发的工具,需要手工安装: +```sh +$ go get github.com/fullstorydev/grpcurl +$ go install github.com/fullstorydev/grpcurl/cmd/grpcurl +``` + +调试grpc调用时可参照以下命令: +```sh +grpcurl -plaintext -H 'tls_mode:0' -proto=api.proto -import-path=../ -unix=true /var/run/isulad.sock runtime.v1alpha2.ImageService.ListImages +``` + +## isulad使用rest直接调用服务方法 + +若isula与isulad之间想要使用更轻量级的rest进行通信,需要在[iSulad](https://gitee.com/openeuler/iSulad) 仓库获取iSulad源码进行源码编译,源码编译的教程可参照: + +在源码编译时使用如下编译选项可更换isula与isulad的交互方式为rest: +```sh +cmake -DENABLE_GRPC=OFF …/ +``` +调试rest调用可直接使用curl工具,调试的具体方式可参照以下命令: +```sh +curl -d "{}" --unix-socket /var/run/isulad.sock http://localhost/ContainerService/Version +``` \ No newline at end of file diff --git "a/caselibrary/openEuler-22.03-LTS\345\256\211\350\243\205zabbix\346\225\231\347\250\213" "b/caselibrary/openEuler-22.03-LTS\345\256\211\350\243\205zabbix\346\225\231\347\250\213.md" similarity index 31% rename from "caselibrary/openEuler-22.03-LTS\345\256\211\350\243\205zabbix\346\225\231\347\250\213" rename to "caselibrary/openEuler-22.03-LTS\345\256\211\350\243\205zabbix\346\225\231\347\250\213.md" index 63ede44903e68f11992a2358f3af5d4138ff4c47..5e76aacf9aa9d848489e6fafc2f9f633a22aed03 100644 --- "a/caselibrary/openEuler-22.03-LTS\345\256\211\350\243\205zabbix\346\225\231\347\250\213" +++ "b/caselibrary/openEuler-22.03-LTS\345\256\211\350\243\205zabbix\346\225\231\347\250\213.md" @@ -1,104 +1,102 @@ -1. ## **OpenEuler 最小安装** - - ##### 关闭防火墙 - - ```text - systemctl stop firewalld - systemctl disable firewalld - ``` - -2. ## **MYSQL服务安装配置** - - 安装mysql - - ```text - dnf install mysql mysql-server mysql-common mysql-libs mysql-devel mysql-selinux --nogpgcheck - ``` - - 启动mysql服务 - - ```text - systemctl enable mysqld - systemctl start mysqld - systemctl status mysqld - ``` - - 配置密码 - - ```mysql - mysql -uroot -p - > password 回车 - ALTER USER 'root'@'localhost' IDENTIFIED BY '密码'; - ``` - -3. ## **安装ZABBIX服务** - - - - ```text - dnf config-manager --add-repo https://repo.oepkgs.net/openeuler/rpm/openEuler-22.03-LTS/contrib/others/aarch64/ - dnf clean all && dnf makecache - dnf install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent --nogpgcheck - ``` - -4. ## **配置和启动zabbix进程** - -​ 配置zabbix - -```mysql -mysql -uroot -p -> password -create database zabbix character set utf8mb4 collate utf8mb4_bin; -create user zabbix@localhost identified by '密码'; -grant all privileges on zabbix.* to zabbix@localhost; -set global log_bin_trust_function_creators = 1; -quit; -``` - -​ 初始化架构和数据 - -```text -zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix -``` - -​ Disable log_bin_trust_function_creators option after importing database schema. - -```mysql -mysql -uroot -p -> password -set global log_bin_trust_function_creators = 0; -quit; -``` - -修改zabbix server配置数据库和PHP - -```text -vi /etc/zabbix/zabbix_server.conf ---- -DBPassword=密码 ---- -vi /etc/nginx/conf.d/zabbix.conf ---- -listen 8080;#取消注释 -server_name example.com;#取消注释 ---- -``` - -升级net-snmp - -```text -dnf install net-snmp net-snmp-devel net-snmp-utils --nogpgcheck -``` - -启动zabbix进程 - -```text -systemctl restart zabbix-server zabbix-agent nginx php-fpm -systemctl enable zabbix-server zabbix-agent nginx php-fpm -``` - -访问zabbix首页 - -默认端口是8080 - -![1722339817383](C:\Users\Administrator\Documents\WeChat Files\wxid_3dvp7annei6j22\FileStorage\Temp\1722339817383.png) \ No newline at end of file +# 22.03 LTS 安装zabbix 教程 + +## openEuler 最小安装 + + 关闭防火墙 + + ```text + systemctl stop firewalld + systemctl disable firewalld + ``` + +## MYSQL服务安装配置 + +1. 安装mysql + + ```text + dnf install mysql mysql-server mysql-common mysql-libs mysql-devel mysql-selinux --nogpgcheck + ``` + +2. 启动mysql服务 + + ```text + systemctl enable mysqld + systemctl start mysqld + systemctl status mysqld + ``` + +3. 配置密码 + + ```mysql + mysql -uroot -p + > password 回车 + ALTER USER 'root'@'localhost' IDENTIFIED BY '密码'; + ``` + +## 安装ZABBIX服务 + + ```text + dnf config-manager --add-repo https://repo.oepkgs.net/openeuler/rpm/openEuler-22.03-LTS/contrib/others/aarch64/ + dnf clean all && dnf makecache + dnf install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent --nogpgcheck + ``` + +## 配置和启动zabbix进程 + +1. 配置zabbix + + ```mysql + mysql -uroot -p + > password + create database zabbix character set utf8mb4 collate utf8mb4_bin; + create user zabbix@localhost identified by '密码'; + grant all privileges on zabbix.* to zabbix@localhost; + set global log_bin_trust_function_creators = 1; + quit; + ``` + +2. 初始化架构和数据 + + ```text + zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix + ``` + + Disable log_bin_trust_function_creators option after importing database schema. + + ```mysql + mysql -uroot -p + > password + set global log_bin_trust_function_creators = 0; + quit; + ``` + +3. 修改zabbix server配置数据库和PHP + + ```text + vi /etc/zabbix/zabbix_server.conf + --- + DBPassword=密码 + --- + vi /etc/nginx/conf.d/zabbix.conf + --- + listen 8080;#取消注释 + server_name example.com;#取消注释 + --- + ``` + +4. 升级net-snmp + + ```text + dnf install net-snmp net-snmp-devel net-snmp-utils --nogpgcheck + ``` + +5. 启动zabbix进程 + + ```text + systemctl restart zabbix-server zabbix-agent nginx php-fpm + systemctl enable zabbix-server zabbix-agent nginx php-fpm + ``` + +6. 访问zabbix首页 + + 默认端口是8080 diff --git "a/caselibrary/openEuler_\346\241\210\344\276\213\345\272\223\346\261\207\346\200\273.md" "b/caselibrary/openEuler_\346\241\210\344\276\213\345\272\223\346\261\207\346\200\273.md" index c6e16aed8e1a9345717d98e085f15b18dcdcb953..f70c3acfd9ff34d0f9d91388dd6bffac43067832 100644 --- "a/caselibrary/openEuler_\346\241\210\344\276\213\345\272\223\346\261\207\346\200\273.md" +++ "b/caselibrary/openEuler_\346\241\210\344\276\213\345\272\223\346\261\207\346\200\273.md" @@ -8,4 +8,8 @@ | 4 | 开发者反馈 | 基础服务 | audit,log | [audit写日志占满分区空间出现系统停机](./audit写日志占满分区空间出现系统停机问题分析.md) | | 5 | 开发者反馈 | 容器 | docker,umask | [docker配置容器umask值](./docker配置容器umask值.md) | | 6 | 开发者反馈 | 容器 | docker,容器运行退出 | [docker容器运行一定时间后自动退出](./docker容器运行一定时间后自动退出.md) | -| 7 | 开发者反馈 | 基础服务 | kpatch,热补丁激活失败 | [制作内核热补丁,插入时dmesg提示缺少sssnic模块](./制作内核热补丁,插入时dmesg提示缺少sssnic模块.md) | \ No newline at end of file +| 7 | 开发者反馈 | 基础服务 | kpatch,热补丁激活失败 | [制作内核热补丁,插入时dmesg提示缺少sssnic模块](./制作内核热补丁,插入时dmesg提示缺少sssnic模块.md) | +| 8 | 开发者反馈 | 计算 | 22.03-LTS,安装zabbix教程 | [openEuler-22.03-LTS安装zabbix教程](./openEuler-22.03-LTS安装zabbix教程.md) | +| 9 | 开发者反馈 | 容器 | isulad,grpc,restful | [isulad使用grpc与rest直接调用服务方法](./isulad使用grpc与rest直接调用服务方法.md) | +| 10 | 开发者反馈 | 存算 | lvm,存算 | [LVM标签损坏](./LVM标签损坏.md) | +| 11 | 开发者反馈 | 容器 | pvs、vgs | [pvs或vgs出现Unknown问题](./pvs或vgs出现Unknown问题.md) | diff --git "a/caselibrary/pvs\346\210\226vgs\345\207\272\347\216\260Unknown\351\227\256\351\242\230.md" "b/caselibrary/pvs\346\210\226vgs\345\207\272\347\216\260Unknown\351\227\256\351\242\230.md" new file mode 100644 index 0000000000000000000000000000000000000000..9490d464ea009c4d3f15436e46f3af3ecddb3a5c --- /dev/null +++ "b/caselibrary/pvs\346\210\226vgs\345\207\272\347\216\260Unknown\351\227\256\351\242\230.md" @@ -0,0 +1,33 @@ +# pvs或vgs出现Unknown问题 + +## 现象描述 + +pvs或vgs的回显中,pv或vg报unknown错误。 + +![](./figures/pvs-1.png) + +![](./figures/pvs-2.png) + +## 原因分析 + +通常为元数据损坏,导致命令读取到不完整的信息,需要进行修复,否则无法正常使用pv或vg。可使用hexdump读取裸盘数据验证,见[LVM标签损坏](./LVM标签损坏.md)。 + +## 解决方法 + +问题一:vg无法识别,报错unknown + +``` +pvck --repair --file /etc/lvm/backup/vg /dev/sdb +``` +vg为卷组备份信息,保存在/etc/lvm/backup目录。 + +问题二:pv无法识别,报错unknown + +``` +pvcreate --uuid xxx --restorefile /etc/lvm/backup/vg /dev/sdc +vgcfgrestore --file /etc/lvm/backup/vg vg +vgchange -ay vg +``` +uuid在备份文件/etc/lvm/backup中获取。 + +执行完修复步骤后,输入pvs或vgs命令,可看到正常回显则说明修复成功。 diff --git "a/caselibrary/systemd-logind\346\234\215\345\212\241\346\227\240\346\263\225\350\216\267\345\217\226NIS\346\234\215\345\212\241\345\231\250\344\270\212\347\232\204\347\224\250\346\210\267\344\277\241\346\201\257\347\232\204\350\247\243\345\206\263\346\226\271\346\263\225.md" "b/caselibrary/systemd-logind\346\234\215\345\212\241\346\227\240\346\263\225\350\216\267\345\217\226NIS\346\234\215\345\212\241\345\231\250\344\270\212\347\232\204\347\224\250\346\210\267\344\277\241\346\201\257\347\232\204\350\247\243\345\206\263\346\226\271\346\263\225.md" index f52bb8c58250cfcceec2d88f5231f942eb4bad4e..8aaf77510fbe11cc9369515157982ab91ec4c8f7 100644 --- "a/caselibrary/systemd-logind\346\234\215\345\212\241\346\227\240\346\263\225\350\216\267\345\217\226NIS\346\234\215\345\212\241\345\231\250\344\270\212\347\232\204\347\224\250\346\210\267\344\277\241\346\201\257\347\232\204\350\247\243\345\206\263\346\226\271\346\263\225.md" +++ "b/caselibrary/systemd-logind\346\234\215\345\212\241\346\227\240\346\263\225\350\216\267\345\217\226NIS\346\234\215\345\212\241\345\231\250\344\270\212\347\232\204\347\224\250\346\210\267\344\277\241\346\201\257\347\232\204\350\247\243\345\206\263\346\226\271\346\263\225.md" @@ -14,7 +14,6 @@ systemd版本: systemd-249-75.oe2203sp1.aarch64 systemd-pam版本: systemd-pam-249-75.oe2203sp1.aarch64 - ## 现象描述 NIS服务器上创建了一个1015(ylp)用户,用户信息可以使用id命令查询到,但是登录1015用户后 /run/systemd/users/ 目录下没有uid对应的文件。 @@ -30,19 +29,25 @@ total 16 ``` ## 原因分析 + 1. 根据错误打印可以看出来是网络不通导致的连接不上NIS服务器。 + ``` systemd-logind[2989387]: yp_bind_client_create_v3: RPC: Remote system error - Address family not supported by protocol server1 sshd[2989498]: pam_systemd(sshd:session): Failed to create session: No such process server1 sshd[2989498]: pam_unix(sshd:session): session opened for user ylp(uid=1015) by (uid=0) server1 sshd[2989498]: pam_systemd(sshd:session): Failed to create session: Transport endpoint is not connected ``` + 2. 查找systemd社区, 发现了类似的提交和讨论。以下两个提交都可能会导致systemd-logind无法与NIS服务器建立通信: -- systemd在235版本对许多常驻的service(比如:systemd-logind.service)增加了`IPAddressDeny=any`,防止了与外部ip通信:https://github.com/systemd/systemd/pull/6921 -- systemd在239版本对systemd-logind.service的通信做了进一步的限制:禁止了`AF_INET` 和 `AF_INET6` 协议:https://github.com/systemd/systemd/issues/9072 + + - systemd在235版本对许多常驻的service(比如:systemd-logind.service)增加了`IPAddressDeny=any`,防止了与外部ip通信: + - systemd在239版本对systemd-logind.service的通信做了进一步的限制:禁止了`AF_INET` 和 `AF_INET6` 协议: + 3. 最终systemd社区对systemd-logind.service的兼容性变更做了一些解释以及文档承载: -- NWES文档中增加了不兼容说明:https://github.com/systemd/systemd/pull/7343 -- systemd的开发者认为类似NIS的网络通信会增加遭受网络攻击的风险,最好使用 NSCD 或 SSSD (缓存远程用户信息的服务),systemd不会去改变这个默认的策略: https://github.com/systemd/systemd/issues/7074#issuecomment-338157851 + + - NWES文档中增加了不兼容说明: + - systemd的开发者认为类似NIS的网络通信会增加遭受网络攻击的风险,最好使用 NSCD 或 SSSD (缓存远程用户信息的服务),systemd不会去改变这个默认的策略: ## 解决方案 @@ -53,25 +58,32 @@ total 16 方案二: 用户自行开启systemd-logind.service网络访问。 + 1. 首先在客户端的/usr/lib/systemd/system/systemd-logind.service.d/目录下查找 `IPAddressAllow`、`RestrictAddressFamilies`字段,保证这两个字段没有被其他服务重新设置。 + ``` grep -rn "IPAddressAllow" grep -rn "RestrictAddressFamilies" ``` + - 场景1:如果有字段不存在,则在/usr/lib/systemd/system/systemd-logind.service.d/目录下新增配置文件systemd-logind-nis.conf(权限与其他文件保持一致),并在文件中新增`IPAddressAllow`和`RestrictAddressFamilies`中不存在的字段,IPAddressAllow字段增加`NIS服务器的IP地址`,RestrictAddressFamilies字段增加`AF_UNIX AF_NETLINK AF_INET AF_INET6`。如下所示: + ``` IPAddressAllow=需增加的NIS服务器的IP地址 RestrictAddressFamilies=AF_UNIX AF_NETLINK AF_INET AF_INET6 ``` + - 场景2:如果有文件中存在这两个字段,则在包含该字段的文件中追加配置。IPAddressAllow字段追加`NIS服务器的IP地址`,RestrictAddressFamilies字段追加`AF_UNIX AF_NETLINK AF_INET AF_INET6`。如下所示: + ``` IPAddressAllow=原配置 需增加的NIS服务器的IP地址 RestrictAddressFamilies=原配置 AF_UNIX AF_NETLINK AF_INET AF_INET6 ``` - - 场景3:如果有文件中只配置了其中一个字段,则在包含该字段的文件中追加配置,并将不存在的字段写入到/usr/lib/systemd/system/systemd-logind.service.d/systemd-logind-nis.conf中(参考场景1和场景2)。 + - 场景3:如果有文件中只配置了其中一个字段,则在包含该字段的文件中追加配置,并将不存在的字段写入到/usr/lib/systemd/system/systemd-logind.service.d/systemd-logind-nis.conf中(参考场景1和场景2)。 2. 修改后需要在客户端重启systemd-logind.service服务。 + ``` systemctl daemon-reload systemctl restart systemd-logind.service diff --git "a/caselibrary/\345\210\266\344\275\234\345\206\205\346\240\270\347\203\255\350\241\245\344\270\201\357\274\214\346\217\222\345\205\245\346\227\266dmesg\346\217\220\347\244\272\347\274\272\345\260\221sssnic\346\250\241\345\235\227.md" "b/caselibrary/\345\210\266\344\275\234\345\206\205\346\240\270\347\203\255\350\241\245\344\270\201\357\274\214\346\217\222\345\205\245\346\227\266dmesg\346\217\220\347\244\272\347\274\272\345\260\221sssnic\346\250\241\345\235\227.md" index 9f53ee13075415bd31a5902656f6249e40137d2a..d95f63ad02caaff8d18b60a86432cb8b878088b6 100644 --- "a/caselibrary/\345\210\266\344\275\234\345\206\205\346\240\270\347\203\255\350\241\245\344\270\201\357\274\214\346\217\222\345\205\245\346\227\266dmesg\346\217\220\347\244\272\347\274\272\345\260\221sssnic\346\250\241\345\235\227.md" +++ "b/caselibrary/\345\210\266\344\275\234\345\206\205\346\240\270\347\203\255\350\241\245\344\270\201\357\274\214\346\217\222\345\205\245\346\227\266dmesg\346\217\220\347\244\272\347\274\272\345\260\221sssnic\346\250\241\345\235\227.md" @@ -13,6 +13,7 @@ kpatch版本:kpatch-0.9.5-7.oe2203sp3.aarch64 ### 现象描述 使用命令`./make_hotpatch -d .new -i procversion`制作内核热补丁,能够正常制作,但是制作完成后发现sssnic模块的函数有修改,导致热补丁依赖sssnic模块,实际补丁并未对该驱动模块源码进行修改;热补丁依赖sssnic模块会导致补丁激活失败,会报错未加载sssnic模块(sssnic模块为sss网卡驱动模块,默认不加载),制作出来的热补丁无法正常使用。 + ```shell [166439.721426] klp_procversion: tainting kernel with TAINT_LIVEPATCH [166439.760137] livepatch: module 'sssdk' not loaded @@ -24,13 +25,12 @@ kpatch版本:kpatch-0.9.5-7.oe2203sp3.aarch64 2.进一步排查后发现,增量编译时sssnic模块不论是否被修改,sssnic模块都会重新被编译,且增量编译前后的二进制.o文件会被kpatch识别存在变化,被制作成热补丁。 - - ## 解决方案 方案一: 若制作的热补丁并非sssnic模块,可以在识别差异段时尝试屏蔽该模块,修改`/usr/libexec/kpatch/kpatch-cc`文件,在忽略文件列表中增加sssnic源码路径,再次制作热补丁就可以看到不会再依赖sssnic模块,热补丁正常使用。 + ```shell diff --git a/kpatch-build/kpatch-cc b/kpatch-build/kpatch-cc index 80d310c...688d92b 100755 @@ -53,6 +53,7 @@ index 80d310c...688d92b 100755 有时未作出修改的函数被识别为变化函数可能是编译器优化后导致汇编结果发生了变化,这种场景下可以使用`KPATCH_IGNORE_FUNCTION`宏忽略该函数,在制作热补丁时就不会将该函数做到热补丁中。 查看热补丁制作时屏幕输出的日志可以发现sssnic模块对应有两个函数发生了变化: + ```txt Testing patch file(s) Reading special section data @@ -65,6 +66,7 @@ version.o: changed function: version_proc_show ``` 在sssnic模块显示变化的函数后,分别在对应函数发生修改的文件里增加以下两句(注意宏`KPATCH_IGNORE_FUNCTION`在函数声明后再使用,否则会报错找不到符号): + ```c #include "/usr/share/kpatch/patch/kpatch-macros.h" KPATCH_IGNORE_FUNCTION(sss_tool_ioctl); @@ -76,5 +78,3 @@ KPATCH_IGNORE_FUNCTION(sss_tool_get_hw_drv_version); ``` 重新执行命令`./make_hotpatch -d .new -i procversion`制作热补丁就不会再报关于sssnic模块未加载的错误。 - - diff --git "a/caselibrary/\346\241\210\344\276\213\346\240\267\344\276\213.md" "b/caselibrary/\346\241\210\344\276\213\346\240\267\344\276\213.md" index cf6a3a6f3bb111619583f18ba8917905ebbfa9c6..a874c8e20c28ba8b31c6d0d8c16ea8f866d5c42c 100644 --- "a/caselibrary/\346\241\210\344\276\213\346\240\267\344\276\213.md" +++ "b/caselibrary/\346\241\210\344\276\213\346\240\267\344\276\213.md" @@ -2,7 +2,7 @@ ## 问题背景 -### 硬软件信息(可选) +### 硬软件信息(可选) XXX @@ -24,4 +24,4 @@ XXX XX 方案二: -XXX \ No newline at end of file +XXX diff --git a/docs/en/docs/CTinspector/usage.md b/docs/en/docs/CTinspector/usage.md index f7cbe3ce9656a584c2a9b5eb6cb72bb960fa2dc0..b4487f99ce8e7f99be9269c2bb8e5ff5c0a69c93 100644 --- a/docs/en/docs/CTinspector/usage.md +++ b/docs/en/docs/CTinspector/usage.md @@ -39,5 +39,5 @@ clang -O2 -fno-inline -emit-llvm -I/usr/include/ctinspector/ -c migrate.c -o - | Running **vm_migrate** on node 1. ![](./figures/migrate_node_1.png) -Running the CTinspector main prgram on node 2. +Running the CTinspector main program on node 2. ![](./figures/migrate_node_2.png) diff --git a/docs/en/docs/Container/querying-information.md b/docs/en/docs/Container/querying-information.md index 34bc33a21945d246c518b75c690b3b68b74d536c..0c27a9d1d2e26769e8055e13206df1448fbbe32d 100644 --- a/docs/en/docs/Container/querying-information.md +++ b/docs/en/docs/Container/querying-information.md @@ -81,7 +81,7 @@ Containers: 2 Images: 8 Server Version: 1.0.31 Logging Driver: json-file -Cgroup Driverr: cgroupfs +Cgroup Driver: cgroupfs Hugetlb Pagesize: 2MB Kernel Version: 4.19 Operating System: Fedora 29 (Twenty Nine) diff --git a/docs/en/docs/Virtualization/Skylark.md b/docs/en/docs/Virtualization/Skylark.md index b844683707094f67ee57b094595aa48cb9612b3d..6528aeb5c97d4aa7970e868557bfef731c6ecd8d 100644 --- a/docs/en/docs/Virtualization/Skylark.md +++ b/docs/en/docs/Virtualization/Skylark.md @@ -127,7 +127,7 @@ After the Skylark component is installed, you can modify the configuration file Skylark's interference control on LLC/MB depends on the RDT/MPAM function provided by hardware. For Intel x86_64 processors, **rdt=cmt,mbmtotal,mbmlocal,l3cat,mba** needs to be added to kernel command line parameters. For Kunpeng920 processors, **mpam=acpi** needs to be added to kernel command line parameters. -- **MIN_LLC_WAYS_LOW_VMS** is an integer used to control the number of LLC ways that can be accessed by low-priority VMs. The value ranges from 1 to 3, with the default value being 2. During initialization, Skylark limits the numfer of accessible LLC ways for low-priority VMs to this value. +- **MIN_LLC_WAYS_LOW_VMS** is an integer used to control the number of LLC ways that can be accessed by low-priority VMs. The value ranges from 1 to 3, with the default value being 2. During initialization, Skylark limits the number of accessible LLC ways for low-priority VMs to this value. - **MIN_MBW_LOW_VMS** is a floating point number used to control the memory bandwidth ratio available to low-priority VMs. The value ranges from 0.1 to 0.2, with the default value being 0.1. Skylark limits the memory bandwidth of low-priority VMs based on this value during initialization. diff --git a/docs/en/docs/ops_guide/information-collection.md b/docs/en/docs/ops_guide/information-collection.md index 2f2c8d036bfc55d89e966667e1d56a683140416d..3b2d7e31a29bed9e79c94851e82a155c547459ea 100644 --- a/docs/en/docs/ops_guide/information-collection.md +++ b/docs/en/docs/ops_guide/information-collection.md @@ -115,7 +115,7 @@ 4. View the file list of a software package. ```shell - rpm -ql python3-rpm # (python3-rpm is used as an emple.) + rpm -ql python3-rpm # (python3-rpm is used as an example.) ``` ## Viewing OS Logs diff --git a/docs/zh/.DS_Store b/docs/zh/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5cfed0148a570586b960caad16cb4951386f3d90 Binary files /dev/null and b/docs/zh/.DS_Store differ diff --git a/docs/zh/docs/.DS_Store b/docs/zh/docs/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..2fc05304791b748c59cc9ce09a26172c37e292fb Binary files /dev/null and b/docs/zh/docs/.DS_Store differ diff --git "a/docs/zh/docs/A-Ops/AOps\351\203\250\347\275\262\346\214\207\345\215\227.md" "b/docs/zh/docs/A-Ops/AOps\351\203\250\347\275\262\346\214\207\345\215\227.md" index 73120be783f7f0f289ae1c7ca62c2636ed408085..0c9620b35fe236e82f0f4cf73f842a6e3ced01de 100644 --- "a/docs/zh/docs/A-Ops/AOps\351\203\250\347\275\262\346\214\207\345\215\227.md" +++ "b/docs/zh/docs/A-Ops/AOps\351\203\250\347\275\262\346\214\207\345\215\227.md" @@ -2,7 +2,7 @@ ## 一、环境要求 -- 2台openEuler 23.09机器 +- 2台openEuler 24.09机器 分别用于部署check模块的两种模式:调度器,执行器。其他服务如mysql、elasticsearch、aops-manager等可在任意一台机器独立部署,为便于操作,将这些服务部署在机器A。 @@ -455,4 +455,4 @@ task_group_id=CHECK_TASK_GROUP_ID systemctl start aops-check ``` -至此,两台机器的服务部署完成。 \ No newline at end of file +至此,两台机器的服务部署完成。 diff --git "a/docs/zh/docs/A-Ops/aops-agent\351\203\250\347\275\262\346\214\207\345\215\227.md" "b/docs/zh/docs/A-Ops/aops-agent\351\203\250\347\275\262\346\214\207\345\215\227.md" index da0184bd611a216be79c106127936885d17e2b59..81ec4dec353887f75eacf0b7e9bf027d0e2afc9a 100644 --- "a/docs/zh/docs/A-Ops/aops-agent\351\203\250\347\275\262\346\214\207\345\215\227.md" +++ "b/docs/zh/docs/A-Ops/aops-agent\351\203\250\347\275\262\346\214\207\345\215\227.md" @@ -621,7 +621,7 @@ gala-gopher更多信息可参考文档https://gitee.com/openeuler/gala-gopher/bl } ``` -## FAQ +## 注意事项 1. 若有报错,请查看日志/var/log/aops/aops.log,根据日志中相关报错提示解决问题,并重启服务。 diff --git "a/docs/zh/docs/A-Ops/gala-anteater\344\275\277\347\224\250\346\211\213\345\206\214.md" "b/docs/zh/docs/A-Ops/gala-anteater\344\275\277\347\224\250\346\211\213\345\206\214.md" index d1361678e98c8577b5814f05d5aca9ee44d652a8..3ce38364e33c1ffdef169323cc0b67cad7a0019e 100644 --- "a/docs/zh/docs/A-Ops/gala-anteater\344\275\277\347\224\250\346\211\213\345\206\214.md" +++ "b/docs/zh/docs/A-Ops/gala-anteater\344\275\277\347\224\250\346\211\213\345\206\214.md" @@ -22,6 +22,7 @@ baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/EPOL/main/$basearch/ enabled=1 gpgcheck=0 priority=1 + ``` 安装gala-anteater: @@ -32,52 +33,88 @@ yum install gala-anteater ## 配置 -> 说明:gala-anteater不包含额外需要配置的config文件,其参数通过命令行的启动参数传递。 +> 说明:gala-anteater采用配置的config文件设置参数启动,配置文件位置: /etc/gala-anteater/config/gala-anteater.yaml。 -##### 启动参数介绍 +##### 配置文件默认参数 -| 参数项 | 参数详细名 | 类型 | 是否必须 | 默认值 | 名称 | 含义 | -|---|---|---|---|---|---|---| -| -ks | --kafka_server | string | True | | KAFKA_SERVER | Kafka Server的ip地址,如:localhost / xxx.xxx.xxx.xxx | -| -kp | --kafka_port | string | True | | KAFKA_PORT | Kafka Server的port,如:9092 | -| -ps | --prometheus_server | string | True | | PROMETHEUS_SERVER | Prometheus Server的ip地址,如:localhost / xxx.xxx.xxx.xxx | -| -pp | --prometheus_port | string | True | | PROMETHEUS_PORT | Prometheus Server的port,如:9090 | -| -m | --model | string | False | vae | MODEL | 异常检测模型,目前支持两种异常检测模型,可选(random_forest,vae)
random_forest:随机森林模型,不支持在线学习
vae:Variational Autoencoder,无监督模型,支持首次启动时,利用历史数据,进行模型更新迭代 | -| -d | --duration | int | False | 1 | DURATION | 异常检测模型执行频率(单位:分),每x分钟,检测一次 | -| -r | --retrain | bool | False | False | RETRAIN | 是否在启动时,利用历史数据,进行模型更新迭代,目前仅支持vae模型 | -| -l | --look_back | int | False | 4 | LOOK_BACK | 利用过去x天的历史数据,更新模型 | -| -t | --threshold | float | False | 0.8 | THRESHOLD | 异常检测模型的阈值:(0,1),较大的值,能够减少模型的误报率,推荐大于等于0.5 | -| -sli | --sli_time | int | False | 400 | SLI_TIME | 表示应用性能指标(单位:毫秒),较大的值,能够减少模型的误报率,推荐大于等于200
对于误报率较高的场景,推荐1000以上 | +```yaml +Global: + data_source: "prometheus" -## 启动 +Arangodb: + url: "http://localhost:8529" + db_name: "spider" -执行如下命令启动gala-anteater。 -``` -systemctl start gala-anteater -``` +Kafka:f + server: "192.168.122.100" + port: "9092" + model_topic: "gala_anteater_hybrid_model" + rca_topic: "gala_cause_inference" + meta_topic: "gala_gopher_metadata" + group_id: "gala_anteater_kafka" + # auth_type: plaintext/sasl_plaintext, please set "" for no auth + auth_type: "" + username: "" + password: "" -### 在线训练方式运行(推荐) +Prometheus: + server: "localhost" + port: "9090" + steps: "5" -```bash -gala-anteater -ks {ip} -kp {port} -ps {ip} -pp {port} -m vae -r True -l 7 -t 0.6 -sli 400 -``` +Aom: + base_url: "" + project_id: "" + auth_type: "token" + auth_info: + iam_server: "" + iam_domain: "" + iam_user_name: "" + iam_password: "" + ssl_verify: 0 -### 普通方式运行 -systemctl start gala-anteater -预期结果:systemctl status gala-anteater命令的运行结果显示,服务启动状态为running。 +Schedule: + duration: 1 -```bash -gala-anteater -ks {ip} -kp {port} -ps {ip} -pp {port} -m vae -t 0.6 -sli 400 ``` +| 参数 | 含义 | 默认值 | +| ----------- | --------------------------------------------------- | ---------------------------- | +| Global | | | +| data_source | 设置数据来源 | “prometheus” | +| Arangodb | | | +| url | 图数据库Arangodb的ip地址 | "http://localhost:8529" | +| db_name | 图数据库名 | "spider" | +| Kafka | | | +| server | Kafka Server的ip地址,根据安装节点ip配置 | | +| port | Kafka Server的port,如:9092 | | +| model_topic | 故障检测结果上报topic | "gala_anteater_hybrid_model" | +| rca_topic | 根因定位结果上报topic | "gala_cause_inference" | +| meta_topic | gopher采集指标数据topic | "gala_gopher_metadata" | +| group_id | kafka设置组名 | "gala_anteater_kafka" | +| Prometheus | | | +| server | Prometheus Server的ip地址,根据安装节点ip配置 | | +| port | Prometheus Server的port,如:9090 | | +| steps | 指标采样间隔 | | +| Schedule | | | +| duration | 异常检测模型执行频率(单位:分),每x分钟,检测一次 | 1 | + +## 启动 + +执行如下命令启动gala-anteater +``` +systemctl start gala-anteater +``` +** 注意 **:gala-anteater支持启动一个进程实例,启动多个会导致内存占用过大,日志混乱。 ### 故障注入 gala-anteater为故障检测与根因定位模块,测试阶段需要通过故障注入来构造故障,从而通过故障检测和根因定位模块获得故障节点信息和故障传播根因节点信息。 * 故障注入(仅提供参考) ```bash chaosblade create disk burn --size 10 --read --write --path /var/lib/docker/overlay2/cf0a469be8a84cabe1d057216505f8d64735e9c63159e170743353a208f6c268/merged --timeout 120 + ``` - chaosblade为故障注入工具,可以模拟各种故障,包括但不限于磁盘故障、网络故障、IO故障等。 - 备注:通过注入不一样的故障,指标采集器(例如gala-gopher)监控关联指标并上报到promethues模块,prometheus graph指标图中部分关联指标会存在明显波动。 + *chaosblade 为故障注入工具, 可以模拟各种故障, 包括但不限于磁盘故障、网络故障、IO故障等待 + 备注: 通过注入不一样的故障, 指标采集器(例如 gala-gopher) 监控关联指标并上报到 promethues 模块, prometheus graph 指标图部分关联指标会存在明显波动。 ### 查询gala-anteater服务状态 @@ -113,9 +150,9 @@ gala-anteater为故障检测与根因定位模块,测试阶段需要通过故 2022-09-01 17:53:57,975 - apscheduler.scheduler - DEBUG - Next wakeup is due at 2022-09-01 17:54:57.973533+08:00 (in 59.998006 seconds) ``` -## 输出数据 +## 异常检测输出数据 -gala-anteater如果检测到异常点,会将结果输出至kafka。输出数据格式如下: +gala-anteater如果检测到异常点,会将结果输出至kafka的model_topic,输出数据格式如下: ```json { @@ -163,3 +200,190 @@ gala-anteater如果检测到异常点,会将结果输出至kafka。输出数 "Body":"TimeStamp, WARN, APP may be impacting sli performance issues." } ``` + +## 根因定位输出数据 + +异常检测结果的每个异常节点都会触发根因定位,根因定位的结果会上报至kafka的rca_topic。输出数据格式如下: + +```yaml +{ + "Timestamp": 1724287883452, + "event_id": "1721125159975_475ae627-7e88-41ed-8bb8-ff0fee95a69d_l7_3459438_192.168.11.103_192.168.11.102_26_tcp_server_server_http", + "Attributes": { + "event_id": "1721125159975_475ae627-7e88-41ed-8bb8-ff0fee95a69d_l7_3459438_192.168.11.103_192.168.11.102_26_tcp_server_server_http", + "event_source": "root-cause-inference" + }, + "Resource": { + "abnormal_kpi": { + "metric_id": "gala_gopher_l7_latency_sum", + "entity_id": "", + "metric_labels": { + "client_ip": "192.168.11.103", + "comm": "python", + "container_id": "83d0c2f4a7f4", + "container_image": "ba2d060a624e", + "container_name": "/k8s_backend_backend-node2-01-5bcb47fd7c-4jxxs_default_475ae627", + "instance": "192.168.122.102:8888", + "job": "192.168.122.102", + "l4_role": "tcp_server", + "l7_role": "server", + "machine_id": "66086618-3bad-489e-b17d-05245224f29a-192.168.122.102", + "pod": "default/backend-node2-01-5bcb47fd7c-4jxxs", + "pod_id": "475ae627-7e88-41ed-8bb8-ff0fee95a69d", + "pod_namespace": "default", + "protocol": "http", + "server_ip": "192.168.11.102", + "server_port": "26", + "ssl": "no_ssl", + "tgid": "3459438" + }, + "desc": "L7 session averaged latency.", + "score": 0.3498585816683402 + }, + "cause_metrics": [ + { + "metric_id": "gala_gopher_container_cpu_user_seconds_total@4a9fcc23-8ba2-4b0a-bcb0-b1bfd89ed929", + "entity_id": "", + "metric_labels": { + "container_id": "1319ff912a6f", + "container_image": "ba2d060a624e", + "container_name": "/k8s_backend_backend-node3-02-654dd97bf9-s8jg5_default_4a9fcc23", + "instance": "192.168.122.103:8888", + "job": "192.168.122.103", + "machine_id": "494a61be-23cc-4c97-a871-902866e43747-192.168.122.103", + "pod": "default/backend-node3-02-654dd97bf9-s8jg5", + "pod_id": "4a9fcc23-8ba2-4b0a-bcb0-b1bfd89ed929", + "pod_namespace": "default" + }, + "desc": "\u5bb9\u56681s\u5185\u7528\u6237\u6001CPU\u8d1f\u8f7d", + "keyword": "process", + "score": 0.1194249668036936, + "path": [ + { + "pod_id": "4a9fcc23-8ba2-4b0a-bcb0-b1bfd89ed929", + "pod": "default/backend-node3-02-654dd97bf9-s8jg5", + "instance": "192.168.122.103:8888", + "job": "192.168.122.103", + "pod_state": "normal" + }, + { + "pod_id": "475ae627-7e88-41ed-8bb8-ff0fee95a69d", + "pod": "default/backend-node2-01-5bcb47fd7c-4jxxs", + "instance": "192.168.122.102:8888", + "job": "192.168.122.102", + "pod_state": "abnormal" + } + ] + }, + { + "metric_id": "gala_gopher_proc_wchar_bytes@67134fb4-b2a3-43c5-a5b3-b3b463ad7d43", + "entity_id": "", + "metric_labels": { + "cmdline": "python ./backend.py ", + "comm": "python", + "container_id": "de570c7328bb", + "container_image": "ba2d060a624e", + "container_name": "/k8s_backend_backend-node2-02-548c79d989-bnl9g_default_67134fb4", + "instance": "192.168.122.102:8888", + "job": "192.168.122.102", + "machine_id": "66086618-3bad-489e-b17d-05245224f29a-192.168.122.102", + "pgid": "3459969", + "pod": "default/backend-node2-02-548c79d989-bnl9g", + "pod_id": "67134fb4-b2a3-43c5-a5b3-b3b463ad7d43", + "pod_namespace": "default", + "ppid": "3459936", + "start_time": "1139543501", + "tgid": "3459969" + }, + "desc": "\u8fdb\u7a0b\u7cfb\u7edf\u8c03\u7528\u81f3FS\u7684\u5199\u5b57\u8282\u6570", + "keyword": "process", + "score": 0.37121879175399997, + "path": [ + { + "pod_id": "67134fb4-b2a3-43c5-a5b3-b3b463ad7d43", + "pod": "default/backend-node2-02-548c79d989-bnl9g", + "instance": "192.168.122.102:8888", + "job": "192.168.122.102", + "pod_state": "normal" + }, + { + "pod_id": "4a9fcc23-8ba2-4b0a-bcb0-b1bfd89ed929", + "pod": "default/backend-node3-02-654dd97bf9-s8jg5", + "instance": "192.168.122.103:8888", + "job": "192.168.122.103", + "pod_state": "normal" + }, + { + "pod_id": "475ae627-7e88-41ed-8bb8-ff0fee95a69d", + "pod": "default/backend-node2-01-5bcb47fd7c-4jxxs", + "instance": "192.168.122.102:8888", + "job": "192.168.122.102", + "pod_state": "abnormal" + } + ] + }, + { + "metric_id": "gala_gopher_l7_latency_avg@956c70a2-9918-459c-a0a8-39396251f952", + "entity_id": "", + "metric_labels": { + "client_ip": "192.168.11.103", + "comm": "python", + "container_id": "eef1ca1082a7", + "container_image": "ba2d060a624e", + "container_name": "/k8s_backend_backend-node2-03-584f4c6cfd-w4d2b_default_956c70a2", + "instance": "192.168.122.102:8888", + "job": "192.168.122.102", + "l4_role": "tcp_server", + "l7_role": "server", + "machine_id": "66086618-3bad-489e-b17d-05245224f29a-192.168.122.102", + "pod": "default/backend-node2-03-584f4c6cfd-w4d2b", + "pod_id": "956c70a2-9918-459c-a0a8-39396251f952", + "pod_namespace": "default", + "protocol": "http", + "server_ip": "192.168.11.113", + "server_port": "26", + "ssl": "no_ssl", + "tgid": "3460169" + }, + "desc": "L7 session averaged latency.", + "keyword": null, + "score": 0.5624857367147617, + "path": [ + { + "pod_id": "956c70a2-9918-459c-a0a8-39396251f952", + "pod": "default/backend-node2-03-584f4c6cfd-w4d2b", + "instance": "192.168.122.102:8888", + "job": "192.168.122.102", + "pod_state": "abnormal" + }, + { + "pod_id": "4a9fcc23-8ba2-4b0a-bcb0-b1bfd89ed929", + "pod": "default/backend-node3-02-654dd97bf9-s8jg5", + "instance": "192.168.122.103:8888", + "job": "192.168.122.103", + "pod_state": "normal" + }, + { + "pod_id": "475ae627-7e88-41ed-8bb8-ff0fee95a69d", + "pod": "default/backend-node2-01-5bcb47fd7c-4jxxs", + "instance": "192.168.122.102:8888", + "job": "192.168.122.102", + "pod_state": "abnormal" + } + ] + } + ] + }, + "desc": "L7 session averaged latency.", + "top1": "gala_gopher_container_cpu_user_seconds_total@4a9fcc23-8ba2-4b0a-bcb0-b1bfd89ed929\u5f02\u5e38", + "top2": "gala_gopher_proc_wchar_bytes@67134fb4-b2a3-43c5-a5b3-b3b463ad7d43\u5f02\u5e38", + "top3": "gala_gopher_l7_latency_avg@956c70a2-9918-459c-a0a8-39396251f952\u5f02\u5e38", + "keywords": [ + "process", + null + ], + "SeverityText": "WARN", + "SeverityNumber": 13, + "Body": "A cause inferring event for an abnormal event" +} +``` \ No newline at end of file diff --git "a/docs/zh/docs/A-Ops/gala-gopher\344\275\277\347\224\250\346\211\213\345\206\214.md" "b/docs/zh/docs/A-Ops/gala-gopher\344\275\277\347\224\250\346\211\213\345\206\214.md" index b611ac3485221f6f0b33400fb7c7e0041b0162d7..571247a8b5e055c944220a812eaabc044e824527 100644 --- "a/docs/zh/docs/A-Ops/gala-gopher\344\275\277\347\224\250\346\211\213\345\206\214.md" +++ "b/docs/zh/docs/A-Ops/gala-gopher\344\275\277\347\224\250\346\211\213\345\206\214.md" @@ -1127,15 +1127,15 @@ curl -X PUT http://localhost:9999/sli -d json='{"params":{"report_period":15}, " ![gopher软件架构图](./figures/gopher软件架构图.png) -如上图所示,绿色部分为gala-gopher的外部依赖组件。gala-gopher会将指标数据metrics输出到promethous,将元数据metadata、异常事件event输出到kafka,灰色部分的gala-anteater和gala-spider会从promethous和kafka获取数据。 +如上图所示,绿色部分为gala-gopher的外部依赖组件。gala-gopher会将指标数据metrics输出到prometheus,将元数据metadata、异常事件event输出到kafka,灰色部分的gala-anteater和gala-spider会从prometheus和kafka获取数据。 -> 说明:安装kafka、promethous软件包时,需要从官网获取安装包进行部署。 +> 说明:安装kafka、prometheus软件包时,需要从官网获取安装包进行部署。 ### 输出数据 - **指标数据metrics** - Promethous Server内置了Express Browser UI,用户可以通过PromQL查询语句查询指标数据内容。详细教程参见官方文档:[Using the expression browser](https://prometheus.io/docs/prometheus/latest/getting_started/#using-the-expression-browser)。示例如下: + Prometheus Server内置了Express Browser UI,用户可以通过PromQL查询语句查询指标数据内容。详细教程参见官方文档:[Using the expression browser](https://prometheus.io/docs/prometheus/latest/getting_started/#using-the-expression-browser)。示例如下: 指定指标名称为`gala_gopher_tcp_link_rcv_rtt`,UI显示的指标数据为: diff --git "a/docs/zh/docs/A-Ops/image/\344\273\273\345\212\241\347\273\223\346\236\234\346\237\245\347\234\213.png" "b/docs/zh/docs/A-Ops/image/\344\273\273\345\212\241\347\273\223\346\236\234\346\237\245\347\234\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..31fe24f44facaaa62fbeddd3eef0090a3be88908 Binary files /dev/null and "b/docs/zh/docs/A-Ops/image/\344\273\273\345\212\241\347\273\223\346\236\234\346\237\245\347\234\213.png" differ diff --git "a/docs/zh/docs/A-Ops/image/\345\210\233\345\273\272\350\204\232\346\234\254.png" "b/docs/zh/docs/A-Ops/image/\345\210\233\345\273\272\350\204\232\346\234\254.png" new file mode 100644 index 0000000000000000000000000000000000000000..feb95836d056335d9d7ef673acc5fdf39e29bd8e Binary files /dev/null and "b/docs/zh/docs/A-Ops/image/\345\210\233\345\273\272\350\204\232\346\234\254.png" differ diff --git "a/docs/zh/docs/A-Ops/image/\345\210\233\345\273\272\350\204\232\346\234\254\344\273\273\345\212\241.png" "b/docs/zh/docs/A-Ops/image/\345\210\233\345\273\272\350\204\232\346\234\254\344\273\273\345\212\241.png" new file mode 100644 index 0000000000000000000000000000000000000000..e7b1c5fc77c4027f1cdb96941440220db8637e5f Binary files /dev/null and "b/docs/zh/docs/A-Ops/image/\345\210\233\345\273\272\350\204\232\346\234\254\344\273\273\345\212\241.png" differ diff --git "a/docs/zh/docs/A-Ops/image/\345\215\225\346\254\241\346\211\247\350\241\214.png" "b/docs/zh/docs/A-Ops/image/\345\215\225\346\254\241\346\211\247\350\241\214.png" new file mode 100644 index 0000000000000000000000000000000000000000..8020c60843c11e566778a1a03c1fa7516de9dd6b Binary files /dev/null and "b/docs/zh/docs/A-Ops/image/\345\215\225\346\254\241\346\211\247\350\241\214.png" differ diff --git "a/docs/zh/docs/A-Ops/image/\345\221\250\346\234\237\346\211\247\350\241\214.png" "b/docs/zh/docs/A-Ops/image/\345\221\250\346\234\237\346\211\247\350\241\214.png" new file mode 100644 index 0000000000000000000000000000000000000000..b75743556384fe58690847b3794607ef9a890d6d Binary files /dev/null and "b/docs/zh/docs/A-Ops/image/\345\221\250\346\234\237\346\211\247\350\241\214.png" differ diff --git "a/docs/zh/docs/A-Ops/image/\345\221\275\344\273\244\346\211\247\350\241\214.png" "b/docs/zh/docs/A-Ops/image/\345\221\275\344\273\244\346\211\247\350\241\214.png" new file mode 100644 index 0000000000000000000000000000000000000000..b5c9fbbeb5a4bba5f81d753fa5aa620ad261804c Binary files /dev/null and "b/docs/zh/docs/A-Ops/image/\345\221\275\344\273\244\346\211\247\350\241\214.png" differ diff --git "a/docs/zh/docs/A-Ops/image/\345\221\275\344\273\244\347\256\241\347\220\206\347\225\214\351\235\242.png" "b/docs/zh/docs/A-Ops/image/\345\221\275\344\273\244\347\256\241\347\220\206\347\225\214\351\235\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..c0357fc88d33c8b706203b70016d53629a3db70c Binary files /dev/null and "b/docs/zh/docs/A-Ops/image/\345\221\275\344\273\244\347\256\241\347\220\206\347\225\214\351\235\242.png" differ diff --git "a/docs/zh/docs/A-Ops/image/\346\223\215\344\275\234\347\256\241\347\220\206.png" "b/docs/zh/docs/A-Ops/image/\346\223\215\344\275\234\347\256\241\347\220\206.png" new file mode 100644 index 0000000000000000000000000000000000000000..3a1b8c3accdfb688da2e8e54eb17e86d18ee4d0b Binary files /dev/null and "b/docs/zh/docs/A-Ops/image/\346\223\215\344\275\234\347\256\241\347\220\206.png" differ diff --git "a/docs/zh/docs/A-Ops/image/\346\226\207\344\273\266\346\216\250\351\200\201.png" "b/docs/zh/docs/A-Ops/image/\346\226\207\344\273\266\346\216\250\351\200\201.png" new file mode 100644 index 0000000000000000000000000000000000000000..c449eb18608e0146275f1b9f4ca41d05d48af021 Binary files /dev/null and "b/docs/zh/docs/A-Ops/image/\346\226\207\344\273\266\346\216\250\351\200\201.png" differ diff --git "a/docs/zh/docs/A-Ops/image/\346\226\260\345\273\272\345\221\275\344\273\244.png" "b/docs/zh/docs/A-Ops/image/\346\226\260\345\273\272\345\221\275\344\273\244.png" new file mode 100644 index 0000000000000000000000000000000000000000..50d5bd4ce5499512acf2b8af86445fe6df6ce29f Binary files /dev/null and "b/docs/zh/docs/A-Ops/image/\346\226\260\345\273\272\345\221\275\344\273\244.png" differ diff --git "a/docs/zh/docs/A-Ops/image/\346\226\260\345\273\272\345\221\275\344\273\244\344\273\273\345\212\241.png" "b/docs/zh/docs/A-Ops/image/\346\226\260\345\273\272\345\221\275\344\273\244\344\273\273\345\212\241.png" new file mode 100644 index 0000000000000000000000000000000000000000..792ec4e81017575fd27466a275c0502563808296 Binary files /dev/null and "b/docs/zh/docs/A-Ops/image/\346\226\260\345\273\272\345\221\275\344\273\244\344\273\273\345\212\241.png" differ diff --git "a/docs/zh/docs/A-Ops/image/\350\204\232\346\234\254\346\211\247\350\241\214.png" "b/docs/zh/docs/A-Ops/image/\350\204\232\346\234\254\346\211\247\350\241\214.png" new file mode 100644 index 0000000000000000000000000000000000000000..4ab626ad5949e17a5d486431ae4c0481ca42a442 Binary files /dev/null and "b/docs/zh/docs/A-Ops/image/\350\204\232\346\234\254\346\211\247\350\241\214.png" differ diff --git "a/docs/zh/docs/A-Ops/image/\350\204\232\346\234\254\347\256\241\347\220\206.png" "b/docs/zh/docs/A-Ops/image/\350\204\232\346\234\254\347\256\241\347\220\206.png" new file mode 100644 index 0000000000000000000000000000000000000000..62c60399dc58a79a9ab48a7eb584ce615c11b05c Binary files /dev/null and "b/docs/zh/docs/A-Ops/image/\350\204\232\346\234\254\347\256\241\347\220\206.png" differ diff --git "a/docs/zh/docs/A-Ops/\350\207\252\345\212\250\345\214\226\350\277\220\347\273\264\346\234\215\345\212\241\344\275\277\347\224\250\346\211\213\345\206\214.md" "b/docs/zh/docs/A-Ops/\350\207\252\345\212\250\345\214\226\350\277\220\347\273\264\346\234\215\345\212\241\344\275\277\347\224\250\346\211\213\345\206\214.md" new file mode 100644 index 0000000000000000000000000000000000000000..c075767137aa34c9753000d5752f1789fa97f88f --- /dev/null +++ "b/docs/zh/docs/A-Ops/\350\207\252\345\212\250\345\214\226\350\277\220\347\273\264\346\234\215\345\212\241\344\275\277\347\224\250\346\211\213\345\206\214.md" @@ -0,0 +1,66 @@ +# 自动化运维服务使用手册 + +## 主要功能 + +本服务主要包括批量命令执行和批量脚本执行的功能,两者均支持定时任务。 + +#### 命令相关 + +命令页面包含命令管理和命令执行两个页签 + +##### 命令管理 + +命令管理界面可以对命令进行增删查改功能: +![](./image/新建命令.png) +![](./image/命令管理界面.png) + + +##### 命令执行 + +命令执行界面可以创建命令执行任务: +![](./image/新建命令任务.png) + + +命令执行界面可以对创建的任务进行任务信息查看,任务执行,任务结果查看,删除任务等操作: +![](./image/命令执行.png) +任务结果查看: +![](./image/任务结果查看.png) + + +#### 脚本相关 + +脚本页面包含脚本管理、脚本执行、操作管理三个页签 + +##### 操作管理 + +为了屏蔽操作系统的架构,系统对脚本执行的影响,抽象出操作的概念。一个操作对应一组包括各类架构和系统的脚本,脚本执行时选择主机和操作后,根据主机的系统和架构选择对应的脚本进行执行。 + +操作管理界面可以对操作进行增删查改功能: + +![](./image/操作管理.png) + +##### 脚本管理 + +脚本管理界面可以对脚本进行上传,查询,删除,编辑功能: +![](./image/脚本管理.png) +创建脚本: +![](./image/创建脚本.png) + +##### 脚本执行 + +脚本执行界面可以创建脚本执行任务,创建脚本任务仅能通过选择操作来选择对应脚本: +![](./image/脚本执行.png) +创建脚本任务: +![](./image/创建脚本任务.png) + +#### 定时任务 + +定时任务支持指定时间执行和周期执行功能 +单次执行: +![](./image/单次执行.png) +周期执行: +![](./image/周期执行.png) +#### 文件推送 + +文件推送功能支持将脚本推送至指定目录,此类任务不会执行脚本,且推送任务与定时任务互斥: +![](./image/文件推送.png) \ No newline at end of file diff --git "a/docs/zh/docs/Administration/\344\275\277\347\224\250DNF\347\256\241\347\220\206\350\275\257\344\273\266\345\214\205.md" "b/docs/zh/docs/Administration/\344\275\277\347\224\250DNF\347\256\241\347\220\206\350\275\257\344\273\266\345\214\205.md" index 4bd83de68a95f809a50169286e81318e09c921ec..f8b566d4e7a84cd5e90dcee1c7b26063670dc2ed 100644 --- "a/docs/zh/docs/Administration/\344\275\277\347\224\250DNF\347\256\241\347\220\206\350\275\257\344\273\266\345\214\205.md" +++ "b/docs/zh/docs/Administration/\344\275\277\347\224\250DNF\347\256\241\347\220\206\350\275\257\344\273\266\345\214\205.md" @@ -295,7 +295,7 @@ repository部分允许您定义定制化的openEuler软件源仓库,各个仓 ``` >![](./public_sys-resources/icon-note.gif) **说明:** ->安装RPM包过程中,若出现安装失败,可参考[安装时出现软件包冲突、文件冲突或缺少软件包导致安装失败](./FAQ-54.md#安装时出现软件包冲突文件冲突或缺少软件包导致安装失败)。 +>安装RPM包过程中,若出现安装失败,可参考[安装时出现软件包冲突、文件冲突或缺少软件包导致安装失败](./系统管理常见问题与解决方法.md#安装时出现软件包冲突文件冲突或缺少软件包导致安装失败)。 ### 下载软件包 diff --git "a/docs/zh/docs/Administration/\345\206\205\346\240\270\345\256\214\346\225\264\346\200\247\345\272\246\351\207\217\357\274\210IMA\357\274\211.md" "b/docs/zh/docs/Administration/\345\206\205\346\240\270\345\256\214\346\225\264\346\200\247\345\272\246\351\207\217\357\274\210IMA\357\274\211.md" index 40590ae87c8c8eb1661528a5015bdccc60b298b1..98f1afc8b1de1afb58e4a87c3efb79629395dbdc 100644 --- "a/docs/zh/docs/Administration/\345\206\205\346\240\270\345\256\214\346\225\264\346\200\247\345\272\246\351\207\217\357\274\210IMA\357\274\211.md" +++ "b/docs/zh/docs/Administration/\345\206\205\346\240\270\345\256\214\346\225\264\346\200\247\345\272\246\351\207\217\357\274\210IMA\357\274\211.md" @@ -1138,224 +1138,3 @@ openEuler 22.03版本使用RPM密钥对IMA摘要列表进行签名,为保证IM openEuler 24.03及之后的版本支持IMA专用证书,详见[证书签名](../CertSignature/签名证书介绍.md)文档相关章节。 如果用户不使用IMA摘要列表功能或使用其他密钥实现签名/验签,则可将相关代码移除,自行实现内核根证书配置。 - -### FAQ - -#### FAQ1:开启IMA评估enforce模式并配置默认策略后,系统启动失败 - -IMA默认策略可能包含对应用程序执行、内核模块加载等关键文件访问流程的校验,如果关键文件访问失败,可能导致系统无法启动。通常原因有: - -1) IMA校验证书未导入内核,导致摘要列表无法被正确校验; -2) 摘要列表文件未正确签名,导致摘要列表校验失败; -3) 摘要列表文件未导入initrd中,导致启动过程无法导入摘要列表; -4) 摘要列表文件和应用程序不匹配,导致应用程序匹配已导入的摘要列表失败。 - -用户需要通过log模式进入系统进行问题定位和修复。重启系统,进入grub界面修改启动参数,采用log模式启动: - -``` -ima_appraise=log -``` - -系统启动后,可参考如下流程进行问题排查: - -**步骤1:** 检查keyring中的IMA证书: - -``` -keyctl show %:.builtin_trusted_keys -``` - -对于openEuler LTS版本,至少应存在以下几本内核证书(其他未列出版本可根据发布时间前推参考): - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
版本证书
openEuler 22.03 LTSprivate OBS b25e7f66
openEuler 22.03 LTS SP1/2/3private OBS b25e7f66
openeuler <openeuler@compass-ci.com> b675600b
openEuler 22.03 LTS SP4private OBS b25e7f66
openeuler <openeuler@compass-ci.com> b675600b
openeuler <openeuler@compass-ci.com> fb37bc6f
openEuler 24.03openEuler kernel ICA 1: 90bb67eb4b57eb62bf6f867e4f56bd4e19e7d041
- -如果用户导入了其他内核根证书,也同样需要通过`keyctl`命令查询确认证书是否被成功导入。openEuler默认不使用IMA密钥环,如果用户存在使用的情况,则需要通过如下命令查询IMA密钥环中是否存在用户证书: - -``` -keyctl show %:.ima -``` - -如果排查结果为证书未正确导入,则用户需要根据*用户证书导入场景*章节进行流程排查。 - -**步骤2:** 检查摘要列表携带签名信息: - -用户可通过如下命令查询当前系统中的摘要列表文件: - -``` -ls /etc/ima/digest_lists | grep '_list-compact-' -``` - -对于每个摘要列表文件,需要检查存在**以下三种之一**的签名信息: - -1) 检查该摘要列表文件存在对应的**RPM摘要列表文件**,且**RPM摘要列表文件**的ima扩展属性中包含签名值。以bash软件包的摘要列表为例,摘要列表文件路径为: - -``` -/etc/ima/digest_lists/0-metadata_list-compact-bash-5.1.8-6.oe2203sp1.x86_64 -``` - -RPM摘要列表路径为: - -``` -/etc/ima/digest_lists/0-metadata_list-rpm-bash-5.1.8-6.oe2203sp1.x86_64 -``` - -检查RPM摘要列表签名,即文件的`security.ima`扩展属性不为空: - -``` -getfattr -n security.ima /etc/ima/digest_lists/0-metadata_list-rpm-bash-5.1.8-6.oe2203sp1.x86_64 -``` - -2) 检查摘要列表文件的`security.ima`扩展属性不为空: - -``` -getfattr -n security.ima /etc/ima/digest_lists/0-metadata_list-compact-bash-5.1.8-6.oe2203sp1.x86_64 -``` - -3) 检查摘要列表文件的末尾包含了签名信息,可通过检查文件内容末尾是否包含`~Module signature appended~`魔鬼字符串进行判断(仅openEuler 24.03 LTS及之后版本支持的签名方式): - -``` -tail -c 28 /etc/ima/digest_lists/0-metadata_list-compact-kernel-6.6.0-28.0.0.34.oe2403.x86_64 -``` - -如果排查结果为摘要列表未包含签名信息,则用户需要根据*摘要列表签名机制说明*章节进行流程排查。 - -**步骤3:** 检查摘要列表的签名信息正确: - -在确保摘要列表已携带签名信息的情况下,用户还需要确保摘要列表采用正确的私钥签名,即签名私钥和内核中的证书匹配。除用户自行进行私钥检查外,还可通过dmesg日志或audit日志(默认路径为`/var/log/audit/audit.log`)判断是否有签名校验失败的情况发生。典型的日志输出如下: - -``` -type=INTEGRITY_DATA msg=audit(1722578008.756:154): pid=3358 uid=0 auid=0 ses=1 subj=unconfined_u:unconfined_r:haikang_t:s0-s0:c0.c1023 op=appraise_data cause=invalid-signature comm="bash" name="/root/0-metadata_list-compact-bash-5.1.8-6.oe2203sp1.x86_64" dev="dm-0" ino=785161 res=0 errno=0UID="root" AUID="root" -``` - -如果检查结果为签名信息错误,则用户需要根据*摘要列表签名机制说明*章节进行流程排查。 - -**步骤4:** 检查initrd中是否导入摘要列表文件: - -用户需要通过如下命令查询当前initrd中是否存在摘要列表文件: - -``` -lsinitrd | grep 'etc/ima/digest_lists' -``` - -如果未查询到摘要列表文件,则用户需要重新制作initrd,并再次检查摘要列表导入成功: - -``` -dracut -f -e xattr -``` - -**步骤5:** 检查IMA摘要列表和应用程序是否匹配: - -参考FAQ2章节。 - -#### FAQ2:开启IMA评估enforce模式后,部分文件执行失败 - -开启IMA评估enforce模式后,对于配置IMA策略的文件访问,如果文件的内容或扩展属性设置有误(和导入的摘要列表不匹配),则可能会导致文件访问被拒绝。通常原因有: - -1) 摘要列表未成功导入(可参考FAQ1); - -2) 文件内容或属性被篡改。 - - 对于出现文件执行失败的场景,首先需要确定摘要列表文件已经成功导入内核,用户可以检查摘要列表数量判断导入情况: - -``` -cat /sys/kernel/security/ima/digests_count -``` - -然后用户可通过audit日志(默认路径为`/var/log/audit/audit.log`)判断具体哪个文件校验失败以及原因。典型的日志输出如下: - -``` -type=INTEGRITY_DATA msg=audit(1722811960.997:2967): pid=7613 uid=0 auid=0 ses=1 subj=unconfined_u:unconfined_r:haikang_t:s0-s0:c0.c1023 op=appraise_data cause=IMA-signature-required comm="bash" name="/root/test" dev="dm-0" ino=814424 res=0 errno=0UID="root" AUID="root" -``` - -在确定校验失败的文件后,可对比TLV摘要列表确定文件被篡改的原因。对于未开启扩展属性校验的场景,仅对比文件SHA256哈希值和TLV摘要列表中的`IMA digest`项即可,对于开启扩展属性校验的场景,则还需要对比文件当前的属性和TLV摘要列表中显示扩展属性的区别。 - -在确定问题原因后,可通过还原文件的内容及属性,或对当前文件再次生成摘要列表,签名并导入内核的方式解决问题。 - -#### FAQ3:开启IMA评估模式后,跨openEuler 22.03 LTS SP版本安装软件包时出现报错信息 - -开启IMA评估模式后,当安装不同版本的openEuler 22.03 LTS的软件包时,会自动触发IMA摘要列表的导入。其中包含对摘要列表的签名验证流程,即使用内核中的证书验证摘要列表的签名。由于openEuler在演进过程中,签名证书发生变化,因此部分跨版本安装场景存在后向兼容问题(无前向兼容问题,即新版本的内核可正常校验旧版本的IMA摘要列表文件)。 - -建议用户确认当前内核中包含以下几本签名证书: - -``` -# keyctl show %:.builtin_trusted_keys -Keyring - 566488577 ---lswrv 0 0 keyring: .builtin_trusted_keys - 383580336 ---lswrv 0 0 \_ asymmetric: openeuler b675600b - 453794670 ---lswrv 0 0 \_ asymmetric: private OBS b25e7f66 - 938520011 ---lswrv 0 0 \_ asymmetric: openeuler fb37bc6f -``` - -如缺少证书,建议将内核升级至最新版本。 - -``` -yum update kernel -``` - -openEuler 24.03 LTS及之后版本已具备IMA专用证书,且支持证书链校验,证书生命周期可覆盖整个LTS版本。 - -#### FAQ4:开启IMA摘要列表评估模式后,IMA摘要列表文件签名正确,但是导入失败 - -IMA摘要列表导入存在检查机制,如果某次导入过程中,摘要列表的签名校验失败,则会关闭摘要列表导入功能,从而导致后续即使正确签名的摘要列表文件也无法被导入。用户可检查dmesg日志中是否存在如下打印确认是否为该原因导致: - -``` -# dmesg -ima: 0-metadata_list-compact-bash-5.1.8-6.oe2203sp1.x86_64 not appraised, disabling digest lists lookup for appraisal -``` - -如上述日志,则说明在开启IMA摘要列表评估模式的情况下,已经导入了一个签名错误的摘要列表文件,从而导致功能关闭。此时用户需要重启系统,并修复错误的摘要列表签名信息。 - -#### FAQ5:openEuler 24.03 LTS及之后版本导入用户自定义的IMA证书失败 - -Linux 6.6内核新增了对导入证书的字段校验限制,对于导入IMA密钥环的证书,需要满足如下约束(遵循X.509标准格式): - -- 为数字签名证书,即设置`keyUsage=digitalSignature`字段; -- 非CA证书,即不可设置`basicConstraints=CA:TRUE`字段; -- 非中间证书,即不可设置`keyUsage=keyCertSign`字段。 - -#### FAQ6:开启IMA评估模式后kdump服务启动失败 - -开启IMA评估enforce模式后,如果IMA策略中配置了如下KEXEC_KERNEL_CHECK规则,可能导致kdump服务启动失败。 - -```shell -appraise func=KEXEC_KERNEL_CHECK appraise_type=imasig -``` - -原因是在该场景下,所有通过KEXEC加载的文件都需要经过完整性校验,因此内核限制kdump加载内核映像文件时必须使用kexec_file_load系统调用。可通过修改/etc/sysconfig/kdump配置文件的KDUMP_FILE_LOAD开启kexec_file_load系统调用。 - -```shell -KDUMP_FILE_LOAD="on" -``` - -同时,kexec_file_load系统调用自身也会执行文件的签名校验,因此要求被加载的内核映像文件必须包含正确的安全启动签名,而且当前内核中必须包含对应的验签证书。 diff --git "a/docs/zh/docs/Administration/\345\217\257\344\277\241\350\256\241\347\256\227\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" "b/docs/zh/docs/Administration/\345\217\257\344\277\241\350\256\241\347\256\227\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..3ea692d5617db348608021dfec4a4287b0139788 --- /dev/null +++ "b/docs/zh/docs/Administration/\345\217\257\344\277\241\350\256\241\347\256\227\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" @@ -0,0 +1,254 @@ +# 常见问题与解决方法 + +## **问题1:开启IMA评估enforce模式并配置默认策略后,系统启动失败** + +### 原因分析 + +IMA默认策略可能包含对应用程序执行、内核模块加载等关键文件访问流程的校验,如果关键文件访问失败,可能导致系统无法启动。通常原因有: + +1) IMA校验证书未导入内核,导致摘要列表无法被正确校验; +2) 摘要列表文件未正确签名,导致摘要列表校验失败; +3) 摘要列表文件未导入initrd中,导致启动过程无法导入摘要列表; +4) 摘要列表文件和应用程序不匹配,导致应用程序匹配已导入的摘要列表失败。 + +### 解决方法 + +用户需要通过log模式进入系统进行问题定位和修复。重启系统,进入grub界面修改启动参数,采用log模式启动: + +``` +ima_appraise=log +``` + +系统启动后,可参考如下流程进行问题排查: + +**步骤1:** 检查keyring中的IMA证书: + +``` +keyctl show %:.builtin_trusted_keys +``` + +对于openEuler LTS版本,至少应存在以下几本内核证书(其他未列出版本可根据发布时间前推参考): + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
版本证书
openEuler 22.03 LTSprivate OBS b25e7f66
openEuler 22.03 LTS SP1/2/3private OBS b25e7f66
openeuler <openeuler@compass-ci.com> b675600b
openEuler 22.03 LTS SP4private OBS b25e7f66
openeuler <openeuler@compass-ci.com> b675600b
openeuler <openeuler@compass-ci.com> fb37bc6f
openEuler 24.03openEuler kernel ICA 1: 90bb67eb4b57eb62bf6f867e4f56bd4e19e7d041
+ +如果用户导入了其他内核根证书,也同样需要通过`keyctl`命令查询确认证书是否被成功导入。openEuler默认不使用IMA密钥环,如果用户存在使用的情况,则需要通过如下命令查询IMA密钥环中是否存在用户证书: + +``` +keyctl show %:.ima +``` + +如果排查结果为证书未正确导入,则用户需要根据*用户证书导入场景*章节进行流程排查。 + +**步骤2:** 检查摘要列表携带签名信息: + +用户可通过如下命令查询当前系统中的摘要列表文件: + +``` +ls /etc/ima/digest_lists | grep '_list-compact-' +``` + +对于每个摘要列表文件,需要检查存在**以下三种之一**的签名信息: + +1) 检查该摘要列表文件存在对应的**RPM摘要列表文件**,且**RPM摘要列表文件**的ima扩展属性中包含签名值。以bash软件包的摘要列表为例,摘要列表文件路径为: + +``` +/etc/ima/digest_lists/0-metadata_list-compact-bash-5.1.8-6.oe2203sp1.x86_64 +``` + +RPM摘要列表路径为: + +``` +/etc/ima/digest_lists/0-metadata_list-rpm-bash-5.1.8-6.oe2203sp1.x86_64 +``` + +检查RPM摘要列表签名,即文件的`security.ima`扩展属性不为空: + +``` +getfattr -n security.ima /etc/ima/digest_lists/0-metadata_list-rpm-bash-5.1.8-6.oe2203sp1.x86_64 +``` + +2) 检查摘要列表文件的`security.ima`扩展属性不为空: + +``` +getfattr -n security.ima /etc/ima/digest_lists/0-metadata_list-compact-bash-5.1.8-6.oe2203sp1.x86_64 +``` + +3) 检查摘要列表文件的末尾包含了签名信息,可通过检查文件内容末尾是否包含`~Module signature appended~`魔鬼字符串进行判断(仅openEuler 24.03 LTS及之后版本支持的签名方式): + +``` +tail -c 28 /etc/ima/digest_lists/0-metadata_list-compact-kernel-6.6.0-28.0.0.34.oe2403.x86_64 +``` + +如果排查结果为摘要列表未包含签名信息,则用户需要根据*摘要列表签名机制说明*章节进行流程排查。 + +**步骤3:** 检查摘要列表的签名信息正确: + +在确保摘要列表已携带签名信息的情况下,用户还需要确保摘要列表采用正确的私钥签名,即签名私钥和内核中的证书匹配。除用户自行进行私钥检查外,还可通过dmesg日志或audit日志(默认路径为`/var/log/audit/audit.log`)判断是否有签名校验失败的情况发生。典型的日志输出如下: + +``` +type=INTEGRITY_DATA msg=audit(1722578008.756:154): pid=3358 uid=0 auid=0 ses=1 subj=unconfined_u:unconfined_r:haikang_t:s0-s0:c0.c1023 op=appraise_data cause=invalid-signature comm="bash" name="/root/0-metadata_list-compact-bash-5.1.8-6.oe2203sp1.x86_64" dev="dm-0" ino=785161 res=0 errno=0UID="root" AUID="root" +``` + +如果检查结果为签名信息错误,则用户需要根据*摘要列表签名机制说明*章节进行流程排查。 + +**步骤4:** 检查initrd中是否导入摘要列表文件: + +用户需要通过如下命令查询当前initrd中是否存在摘要列表文件: + +``` +lsinitrd | grep 'etc/ima/digest_lists' +``` + +如果未查询到摘要列表文件,则用户需要重新制作initrd,并再次检查摘要列表导入成功: + +``` +dracut -f -e xattr +``` + +**步骤5:** 检查IMA摘要列表和应用程序是否匹配: + +参考[问题2章节](#问题2开启IMA评估enforce模式后部分文件执行失败)。 + +## **问题2:开启IMA评估enforce模式后,部分文件执行失败** + +### 原因分析 + +开启IMA评估enforce模式后,对于配置IMA策略的文件访问,如果文件的内容或扩展属性设置有误(和导入的摘要列表不匹配),则可能会导致文件访问被拒绝。通常原因有: + +1) 摘要列表未成功导入(可参考FAQ1); + +2) 文件内容或属性被篡改。 + +### 解决方法 + + 对于出现文件执行失败的场景,首先需要确定摘要列表文件已经成功导入内核,用户可以检查摘要列表数量判断导入情况: + +``` +cat /sys/kernel/security/ima/digests_count +``` + +然后用户可通过audit日志(默认路径为`/var/log/audit/audit.log`)判断具体哪个文件校验失败以及原因。典型的日志输出如下: + +``` +type=INTEGRITY_DATA msg=audit(1722811960.997:2967): pid=7613 uid=0 auid=0 ses=1 subj=unconfined_u:unconfined_r:haikang_t:s0-s0:c0.c1023 op=appraise_data cause=IMA-signature-required comm="bash" name="/root/test" dev="dm-0" ino=814424 res=0 errno=0UID="root" AUID="root" +``` + +在确定校验失败的文件后,可对比TLV摘要列表确定文件被篡改的原因。对于未开启扩展属性校验的场景,仅对比文件SHA256哈希值和TLV摘要列表中的`IMA digest`项即可,对于开启扩展属性校验的场景,则还需要对比文件当前的属性和TLV摘要列表中显示扩展属性的区别。 + +在确定问题原因后,可通过还原文件的内容及属性,或对当前文件再次生成摘要列表,签名并导入内核的方式解决问题。 + +## **问题3:开启IMA评估模式后,跨openEuler 22.03 LTS SP版本安装软件包时出现报错信息** + +### 原因分析 + +开启IMA评估模式后,当安装不同版本的openEuler 22.03 LTS的软件包时,会自动触发IMA摘要列表的导入。其中包含对摘要列表的签名验证流程,即使用内核中的证书验证摘要列表的签名。由于openEuler在演进过程中,签名证书发生变化,因此部分跨版本安装场景存在后向兼容问题(无前向兼容问题,即新版本的内核可正常校验旧版本的IMA摘要列表文件)。 + +### 解决方法 + +建议用户确认当前内核中包含以下几本签名证书: + +``` +# keyctl show %:.builtin_trusted_keys +Keyring + 566488577 ---lswrv 0 0 keyring: .builtin_trusted_keys + 383580336 ---lswrv 0 0 \_ asymmetric: openeuler b675600b + 453794670 ---lswrv 0 0 \_ asymmetric: private OBS b25e7f66 + 938520011 ---lswrv 0 0 \_ asymmetric: openeuler fb37bc6f +``` + +如缺少证书,建议将内核升级至最新版本。 + +``` +yum update kernel +``` + +openEuler 24.03 LTS及之后版本已具备IMA专用证书,且支持证书链校验,证书生命周期可覆盖整个LTS版本。 + +## **问题4:开启IMA摘要列表评估模式后,IMA摘要列表文件签名正确,但是导入失败** + +### 原因分析 + +IMA摘要列表导入存在检查机制,如果某次导入过程中,摘要列表的签名校验失败,则会关闭摘要列表导入功能,从而导致后续即使正确签名的摘要列表文件也无法被导入。用户可检查dmesg日志中是否存在如下打印确认是否为该原因导致: + +``` +# dmesg +ima: 0-metadata_list-compact-bash-5.1.8-6.oe2203sp1.x86_64 not appraised, disabling digest lists lookup for appraisal +``` + +如上述日志,则说明在开启IMA摘要列表评估模式的情况下,已经导入了一个签名错误的摘要列表文件,从而导致功能关闭。 + +### 解决方法 + +用户需要重启系统,并修复错误的摘要列表签名信息。 + +## **问题5:openEuler 24.03 LTS及之后版本导入用户自定义的IMA证书失败** + +Linux 6.6内核新增了对导入证书的字段校验限制,对于导入IMA密钥环的证书,需要满足如下约束(遵循X.509标准格式): + +- 为数字签名证书,即设置`keyUsage=digitalSignature`字段; +- 非CA证书,即不可设置`basicConstraints=CA:TRUE`字段; +- 非中间证书,即不可设置`keyUsage=keyCertSign`字段。 + +## **问题6:开启IMA评估模式后kdump服务启动失败** + +开启IMA评估enforce模式后,如果IMA策略中配置了如下KEXEC_KERNEL_CHECK规则,可能导致kdump服务启动失败。 + +```shell +appraise func=KEXEC_KERNEL_CHECK appraise_type=imasig +``` + +原因是在该场景下,所有通过KEXEC加载的文件都需要经过完整性校验,因此内核限制kdump加载内核映像文件时必须使用kexec_file_load系统调用。可通过修改/etc/sysconfig/kdump配置文件的KDUMP_FILE_LOAD开启kexec_file_load系统调用。 + +```shell +KDUMP_FILE_LOAD="on" +``` + +同时,kexec_file_load系统调用自身也会执行文件的签名校验,因此要求被加载的内核映像文件必须包含正确的安全启动签名,而且当前内核中必须包含对应的验签证书。 + +## **问题7:RAS安装后无法启动** + +### 原因分析 + +因为在当前RAS的设计逻辑中,程序启动后需要从当前目录查找一份名为 `ecdsakey.pub` 的文件进行读取并作为之后访问该程序的身份验证码,若当前目录没有该文件,则RAS启动会报错。 + +### 解决方法 + +解决方法一:运行 `ras -T` 生成测试用token后会生成 `ecdsakey.pub` 。 + +解决方法二:自行部署oauth2认证服务后,将对应JWT token生成方对应的验证公钥保存为 `ecdsakey.pub` 。 + +## **问题8:RAS启动后,通过restapi无法访问** + +因为RAS默认以https模式启动,开发者需要向RAS提供合法的证书才能正常访问,而http模式下启动的RAS则不需要提供证书。 diff --git a/docs/zh/docs/Administration/FAQ-54.md "b/docs/zh/docs/Administration/\347\263\273\347\273\237\347\256\241\347\220\206\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" similarity index 90% rename from docs/zh/docs/Administration/FAQ-54.md rename to "docs/zh/docs/Administration/\347\263\273\347\273\237\347\256\241\347\220\206\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" index 7ba3fd243d35e33216c36fd4a7ece5765f76634f..8e0ad63bb141d736342557467460ffc5138a31bc 100644 --- a/docs/zh/docs/Administration/FAQ-54.md +++ "b/docs/zh/docs/Administration/\347\263\273\347\273\237\347\256\241\347\220\206\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" @@ -1,23 +1,6 @@ -# FAQ +# 常见问题与解决方法 - - -- [FAQ](#faq) - - [使用systemctl和top命令查询libvirtd服务占用内存不同](#使用systemctl和top命令查询libvirtd服务占用内存不同) - - [设置RAID0卷,参数stripsize设置为4时出错](#设置raid0卷参数stripsize设置为4时出错) - - [使用rpmbuild编译mariadb失败](#使用rpmbuild编译mariadb失败) - - [使用默认配置启动SNTP服务失败](#使用默认配置启动sntp服务失败) - - [安装时出现软件包冲突、文件冲突或缺少软件包导致安装失败](#安装时出现软件包冲突文件冲突或缺少软件包导致安装失败) - - [libiscsi降级失败](#libiscsi降级失败) - - [xfsprogs降级失败](#xfsprogs降级失败) - - [elfutils降级失败](#elfutils降级失败) - - [cpython/Lib发现CVE-2019-9674:Zip炸弹漏洞](#cpythonlib发现cve-2019-9674zip炸弹漏洞) - - [不合理使用glibc正则表达式引起ReDoS攻击](#不合理使用glibc正则表达式引起redos攻击) - - [带参数f执行modprobe或insmod报错](#带参数f执行modprobe或insmod报错) - - - -## 使用systemctl和top命令查询libvirtd服务占用内存不同 +## **问题1:使用systemctl和top命令查询libvirtd服务占用内存不同** ### 问题描述 @@ -42,7 +25,7 @@ CGroup里的memory.usage\_in\_bytes = cache + RSS + swap。 由上可知,syestemd相关命令和top命令的内存占用率含义不同,所以查询结果不同。 -## 设置RAID0卷,参数stripsize设置为4时出错 +## **问题2:设置RAID0卷,参数stripsize设置为4时出错** ### 问题现象 @@ -56,7 +39,7 @@ CGroup里的memory.usage\_in\_bytes = cache + RSS + swap。 不需要修改配置文件,openEuler执行lvcreate命令时,条带化规格支持的stripesize最小值为64KB,将参数stripesize设置为64。 -## 使用rpmbuild编译mariadb失败 +## **问题3:使用rpmbuild编译mariadb失败** ### 问题描述 @@ -90,7 +73,7 @@ mariadb数据库不允许使用root权限的帐号进行测试用例执行,所 该修改关闭了编译阶段执行测试用例的功能,但不会影响编译和编译后的RPM包内容。 -## 使用默认配置启动SNTP服务失败 +## **问题4:使用默认配置启动SNTP服务失败** ### 问题现象 @@ -104,7 +87,7 @@ mariadb数据库不允许使用root权限的帐号进行测试用例执行,所 修改/etc/sysconfig/sntp文件 ,在文件中添加中国NTP快速授时服务器域名:0.generic.pool.ntp.org。 -## 安装时出现软件包冲突、文件冲突或缺少软件包导致安装失败 +## **问题5:安装时出现软件包冲突、文件冲突或缺少软件包导致安装失败** ### 问题现象 @@ -198,7 +181,7 @@ Error: file /usr/bin/build conflicts between attempted installs of python3-edk2-devel-202002-3.oe1.noarch and build-20191114-324.4.oe1.noarch ``` -## libiscsi降级失败 +## **问题6:libiscsi降级失败** ### 问题现象 @@ -227,7 +210,7 @@ libiscsi-1.19.3 之前的版本把 iscsi-xxx 等二进制文件打包进了主 yum remove libiscsi-utils ``` -## xfsprogs降级失败 +## **问题7:xfsprogs降级失败** ### 问题现象 @@ -256,7 +239,7 @@ Problem: problem with installed package xfsprogs-xfs_scrub-5.6.0-2.oe1.x86_64 # yum remove xfsprogs-xfs_scrub ``` -## elfutils降级失败 +## **问题8:elfutils降级失败** ### 问题现象 @@ -282,7 +265,7 @@ master分支:elfutils-0.187-7 # yum remove -y elfutils-extra ``` -## cpython/Lib发现CVE-2019-9674:Zip炸弹漏洞 +## **问题9:cpython/Lib发现CVE-2019-9674:Zip炸弹漏洞** ### 问题现象 @@ -296,7 +279,7 @@ Python 3.7.2 及以下版本中的 Lib/zipfile.py 允许远程攻击者通过 zi 在 zipfile 文档中添加告警信息: -## 不合理使用glibc正则表达式引起ReDoS攻击 +## **问题10:不合理使用glibc正则表达式引起ReDoS攻击** ### 问题现象 @@ -331,7 +314,7 @@ Segmentation fault (core dumped) 3. 用户程序在检测到进程异常之后,通过重启进程等手段恢复业务,提升程序的可靠性。 -## 安装卸载httpd-devel和apr-util-devel软件包,其中的依赖包gdbm-devel安装、卸载有报错 +## **问题11:安装卸载httpd-devel和apr-util-devel软件包,其中的依赖包gdbm-devel安装、卸载有报错** ### 问题现象 @@ -353,7 +336,7 @@ Segmentation fault (core dumped) 1. 单包升级gdbm,安装使用gdbm-1.18.1-2版本相关软件包后,告警信息消失; 2. 在单包升级gdbm后,再进行安装依赖的gdbm-devel软件包安装,让其依赖高版本gdbm软件包,告警信息消失。 -## 系统reboot后,执行yum/dnf等命令报错,提示rpmdb error +## **问题12:系统reboot后,执行yum/dnf等命令报错,提示rpmdb error** ### 问题现象 @@ -373,7 +356,7 @@ Segmentation fault (core dumped) 步骤2 执行`rm -rf /var/lib/rpm/__db.00*`删除所有db.00的文件。 步骤3 执行`rpmdb --rebuilddb`命令,重建rpm db后即可。 -## 执行 rpmrebuild -d /home/test filesystem对filesystem包rebuild时,rebuild失败 +## **问题13:执行 rpmrebuild -d /home/test filesystem对filesystem包rebuild时,rebuild失败** ### 问题现象 @@ -391,7 +374,7 @@ Segmentation fault (core dumped) 暂时不使用rpmrebuild命令对filesystem进行rebuild。 -## 带参数f执行modprobe或insmod报错 +## **问题14:带参数f执行modprobe或insmod报错** ### 问题现象 diff --git "a/docs/zh/docs/Administration/\350\277\234\347\250\213\350\257\201\346\230\216\357\274\210\351\262\262\351\271\217\345\256\211\345\205\250\345\272\223\357\274\211.md" "b/docs/zh/docs/Administration/\350\277\234\347\250\213\350\257\201\346\230\216\357\274\210\351\262\262\351\271\217\345\256\211\345\205\250\345\272\223\357\274\211.md" index e0b223804caf60e189f51b1cf2722c510f8bce28..1bf89f24a84b0b8d0eb8eaa4cc8c27a080da083e 100644 --- "a/docs/zh/docs/Administration/\350\277\234\347\250\213\350\257\201\346\230\216\357\274\210\351\262\262\351\271\217\345\256\211\345\205\250\345\272\223\357\274\211.md" +++ "b/docs/zh/docs/Administration/\350\277\234\347\250\213\350\257\201\346\230\216\357\274\210\351\262\262\351\271\217\345\256\211\345\205\250\345\272\223\357\274\211.md" @@ -398,15 +398,3 @@ curl -X POST -H "Content-Type: application/json" -H "Authorization: $AUTHTOKEN" **注意:** >TAS的配置信息读取与修改目前仅支持基准值 - -## FAQ - -1. RAS安装后,为什么无法启动? - - >因为在当前RAS的设计逻辑中,程序启动后需要从当前目录查找一份名为 `ecdsakey.pub` 的文件进行读取并作为之后访问该程序的身份验证码,若当前目录没有该文件,则RAS启动会报错。 - >>解决方法一:运行 `ras -T` 生成测试用token后会生成 `ecdsakey.pub` 。 - >>解决方法二:自行部署oauth2认证服务后,将对应JWT token生成方对应的验证公钥保存为 `ecdsakey.pub` 。 - -2. 为什么RAS启动后,通过restapi无法访问? - - >因为RAS默认以https模式启动,您需要向RAS提供合法的证书才能正常访问,而http模式下启动的RAS则不需要提供证书。 \ No newline at end of file diff --git a/docs/zh/docs/ApplicationDev/FAQ.md "b/docs/zh/docs/ApplicationDev/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" similarity index 86% rename from docs/zh/docs/ApplicationDev/FAQ.md rename to "docs/zh/docs/ApplicationDev/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" index b997844d819dd62509e039d9483c4305053927ee..a84d3a2cb3d5fd7eb7bf2637b97a385ed2222dde 100644 --- a/docs/zh/docs/ApplicationDev/FAQ.md +++ "b/docs/zh/docs/ApplicationDev/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" @@ -1,6 +1,6 @@ -# FAQ +# 常见问题与解决方法 -## 部分依赖java-devel的应用程序自编译失败 +## **问题1:部分依赖java-devel的应用程序自编译失败** ### 问题描述 diff --git "a/docs/zh/docs/ApplicationDev/\346\236\204\345\273\272RPM\345\214\205.md" "b/docs/zh/docs/ApplicationDev/\346\236\204\345\273\272RPM\345\214\205.md" index 4ce187b00f70213faf086b2675faffe017940141..c65b48d0e8c21aef02ae0fed91a4e2ef36b75784 100644 --- "a/docs/zh/docs/ApplicationDev/\346\236\204\345\273\272RPM\345\214\205.md" +++ "b/docs/zh/docs/ApplicationDev/\346\236\204\345\273\272RPM\345\214\205.md" @@ -197,54 +197,43 @@ rpmbuild命令格式为:rpmbuild \[_option_...\] ```Conf Name: hello Version: 2.10 -Release: 1%{?dist} +Release: 1 Summary: The "Hello World" program from GNU -Summary(zh_CN): GNU "Hello World" 程序 -License: GPLv3+ -URL: http://ftp.gnu.org/gnu/hello -Source0: http://ftp.gnu.org/gnu/hello/%{name}-%{version}.tar.gz +License: GPL-3.0-or-later +URL: https://ftp.gnu.org/gnu/hello +Source0: https://ftp.gnu.org/gnu/hello/%{name}-%{version}.tar.gz BuildRequires: gettext -Requires(post): info -Requires(preun): info %description The "Hello World" program, done with all bells and whistles of a proper FOSS project, including configuration, build, internationalization, help files, etc. -%description -l zh_CN -"Hello World" 程序, 包含 FOSS 项目所需的所有部分, 包括配置, 构建, 国际化, 帮助文件等. - %prep -%setup -q +%autosetup -p1 -n %{name}-%{version} %build %configure -make %{?_smp_mflags} +%make_build %install -make install DESTDIR=%{buildroot} +%make_install %find_lang %{name} -rm -f %{buildroot}/%{_infodir}/dir - -%post -/sbin/install-info %{_infodir}/%{name}.info %{_infodir}/dir || : -%preun -if [ $1 = 0 ] ; then -/sbin/install-info --delete %{_infodir}/%{name}.info %{_infodir}/dir || : -fi +%check +%make_build check %files -f %{name}.lang %doc AUTHORS ChangeLog NEWS README THANKS TODO %license COPYING -%{_mandir}/man1/hello.1.* -%{_infodir}/hello.info.* %{_bindir}/hello +%{_mandir}/man1/hello.1* +%{_infodir}/hello.info* %changelog * Thu Dec 26 2019 Your Name - 2.10-1 - Update to 2.10 + * Sat Dec 3 2016 Your Name - 2.9-1 - Update to 2.9 ``` diff --git "a/docs/zh/docs/Container/isula-build\344\275\277\347\224\250\346\214\207\345\215\227.md" "b/docs/zh/docs/Container/isula-build\344\275\277\347\224\250\346\214\207\345\215\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..66bb078dafa76c29b23c0b60601e5d26a8cbac86 --- /dev/null +++ "b/docs/zh/docs/Container/isula-build\344\275\277\347\224\250\346\214\207\345\215\227.md" @@ -0,0 +1,934 @@ +# 安装 + +## 环境准备 + +为了确保isula-build成功安装,需满足以下软件硬件要求。 + +* 支持的机器架构:x86_64 和 AArch64 +* 支持的操作系统:openEuler +* 用户具有root权限。 + +### 安装isula-build + +使用isula-build构建容器镜像,需要先安装以下软件包。 + +#### (推荐)方法一:使用yum安装 + +1. 配置openEuler yum源。 + +2. 使用root权限,登录目标服务器,安装isula-build。 + + ```sh + sudo yum install -y isula-build + ``` + +#### 方法二:使用rpm包安装 + +1. 从openEuler yum源中获取isula-build对应安装包isula-build-*.rpm。例如isula-build-0.9.6-4.oe1.x86_64.rpm。 + +2. 将获取的rpm软件包上传至目标服务器的任一目录,例如 /home/。 + +3. 使用root权限,登录目标服务器,参考如下命令安装isula-build。 + + ```sh + sudo rpm -ivh /home/isula-build-*.rpm + ``` + +> ![](./public_sys-resources/icon-note.gif) **说明:** +> +> 安装完成后,需要手工启动isula-build服务。启动请参见[管理服务](isula-build构建工具.md#管理服务)。 + +# 配置与管理服务 + +## 配置服务 + +在安装完 isula-build 软件包之后,systemd 管理服务会以 isula-build 软件包自带的 isula-build 服务端默认配置启动 isula-build 服务。如果 isula-build 服务端的默认配置文件不能满足用户的需求,可以参考如下介绍进行定制化配置。需要注意的是,修改完默认配置之后,需要重启 isula-build 服务端使新配置生效,具体操作可参考下一章节。 + +目前 isula-build 服务端包含如下配置文件: + +* /etc/isula-build/configuration.toml:isula-builder 总体配置文件,用于设置 isula-builder 日志级别、持久化目录和运行时目录、OCI runtime等。其中各参数含义如下: + +| 配置项 | 是否可选 | 配置项含义 | 配置项取值 | +| --------- | -------- | --------------------------------- | ----------------------------------------------- | +| debug | 可选 | 设置是否打开debug日志 | true:打开debug日志
false:关闭debug日志 | +| loglevel | 可选 | 设置日志级别 | debug
info
warn
error | +| run_root | 必选 | 设置运行时数据根目录 | 运行时数据根目录路径,例如/var/run/isula-build/ | +| data_root | 必选 | 设置本地持久化目录 | 本地持久化目录路径,例如/var/lib/isula-build/ | +| runtime | 可选 | 设置runtime种类,目前仅支持runc | runc | +| group | 可选 | 设置本地套接字isula_build.sock文件属组使得加入该组的非特权用户可以操作isula-build | isula | +| experimental | 可选 | 设置是否开启实验特性 | true:开启实验特性;false:关闭实验特性 | + +* /etc/isula-build/storage.toml: 本地持久化存储的配置文件,包含所使用的存储驱动的配置。 + +| 配置项 | 是否可选 | 配置项含义 | +| ------ | -------- | ------------------------------ | +| driver | 可选 | 存储驱动类型,目前支持overlay2 | + + 更多设置可参考 [containers-storage.conf.5](https://github.com/containers/storage/blob/main/docs/containers-storage.conf.5.md)。 + +* /etc/isula-build/registries.toml : 针对各个镜像仓库的配置文件。 + +| 配置项 | 是否可选 | 配置项含义 | +| ------------------- | -------- | ------------------------------------------------------------ | +| registries.search | 可选 | 镜像仓库搜索域,在此list的镜像仓库可以被感知,不在此列的不被感知。 | +| registries.insecure | 可选 | 可访问的不安全镜像仓库地址,在此列表中的镜像仓库将不会通过鉴权,不推荐使用。 | + + 更多设置可参考 [containers-registries.conf.5](https://github.com/containers/image/blob/main/docs/containers-registries.conf.5.md)。 + +* /etc/isula-build/policy.json:镜像pull/push策略文件。当前不支持对其进行配置。 + +> ![](./public_sys-resources/icon-note.gif) **说明:** +> +> * isula-build 支持最大 1MiB 的上述配置文件。 +> * isula-build 不支持将持久化工作目录 dataroot 配置在内存盘上,比如 tmpfs。 +> * isula-build 目前仅支持使用overlay2为底层 graphdriver。 +> * 在设置--group参数前,需保证本地OS已经创建了对应的用户组,且非特权用户已经加入该组。重启isula-builder之后即可使该非特权用户使用isula-build功能。同时,为了保持权限一致性,isula-build的配置文件目录/etc/isula-build的属组也会被设置为--group指定的组。 + +## 管理服务 + +目前 openEuler 采用 systemd 管理软件服务,isula-build 软件包已经自带了 systemd 的服务文件,用户安装完 isula-build 软件包之后,可以直接通过 systemd 工具对它进行服务启停等操作。用户同样可以手动启动 isula-build 服务端软件。需要注意的是,同一个节点上不可以同时启动多个 isula-build 服务端软件。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +> 同一个节点上不可以同时启动多个 isula-build 服务端软件。 + +### 通过 systemd 管理(推荐方式) + +用户可以通过如下 systemd 的标准指令控制 isula-build 服务的启动、停止、重启等动作: + +* 启动 isula-build 服务: + + ```sh + sudo systemctl start isula-build.service + ``` + +* 停止 isula-build 服务: + + ```sh + sudo systemctl stop isula-build.service + ``` + +* 重启 isula-build 服务: + + ```sh + sudo systemctl restart isula-build.service + ``` + +isula-build 软件包安装的 systemd 服务文件保存在 `/usr/lib/systemd/system/isula-build.service`。如果用户需要修改 isula-build 服务的 systemd 配置,可以修改该文件,执行如下命令使配置生效,之后再根据上面提到的 systemd 管理指令重启 isula-build 服务 + +```sh +sudo systemctl daemon-reload +``` + +### 直接运行 isula-build 服务端 + +您也可以通过执行 isula-build 服务端命令( isula-builder)的方式启动服务。其中,服务端启动配置,可通过isula-builder命令支持的 flags 设置。isula-build 服务端目前支持的 flags 如下: + +* -D, --debug: 是否开启调测模式。 +* --log-level: 日志级别,支持 “debug”, “info”, “warn” or “error”,默认为 “info”。 +* --dataroot: 本地持久化路径,默认为”/var/lib/isula-build/“。 +* --runroot: 运行时路径,默认为”/var/run/isula-build/“。 +* --storage-driver:底层存储驱动类型。 +* --storage-opt: 底层存储驱动配置。 +* --group: 设置本地套接字isula_build.sock文件属组使得加入该组的非特权用户可以操作isula-build,默认为“isula”。 +* --experimental: 是否开启实验特性,默认为false。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +> 当命令行启动参数中传递了与配置文件相同的配置选项时,优先使用命令行参数启动。 + +启动 isula-build 服务。例如指定本地持久化路径/var/lib/isula-build,且不开启调试的参考命令如下: + +```sh +sudo isula-builder --dataroot "/var/lib/isula-build" --debug=false +``` + +# 使用指南 + +## 前提条件 + +isula-build 构建 Dockerfile 内的 RUN 指令时依赖可执行文件 runc ,需要 isula-build 的运行环境上预装好 runc。安装方式视用户使用场景而定,如果用户不需要使用完整的 docker-engine 工具链,则可以仅安装 docker-runc rpm包: + +```sh +sudo yum install -y docker-runc +``` + +如果用户需要使用完整的 docker-engine 工具链,则可以安装 docker-engine rpm包,默认包含可执行文件 runc : + +```sh +sudo yum install -y docker-engine +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +> 用户需保证OCI runtime(runc)可执行文件的安全性,避免被恶意替换。 + +## 总体说明 + +isula-build 客户端提供了一系列命令用于构建和管理容器镜像,当前 isula-build 包含的命令行指令如下: + +* ctr-img,容器镜像管理。ctr-img又包含如下子命令: + * build,根据给定dockerfile构建出容器镜像。 + * images,列出本地容器镜像。 + * import,导入容器基础镜像。 + * load,导入层叠镜像。 + * rm,删除本地容器镜像。 + * save,导出层叠镜像至本地磁盘。 + * tag,给本地容器镜像打tag。 + * pull,拉取镜像到本地。 + * push,推送本地镜像到远程仓库。 +* info,查看isula-build的运行环境和系统信息。 +* login,登录远端容器镜像仓库。 +* logout,退出远端容器镜像仓库。 +* version,查看isula-build和isula-builder的版本号。 +* manifest(实验特性),管理manifest列表。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +> * isula-build completion 和 isula-builder completion 命令用于生成bash命令补全脚本。该命令为命令行框架隐式提供,不会显示在help信息中。 +> * isula-build客户端不包含配置文件,当用户需要使用isula-build实验特性时,需要在客户端通过命令`export ISULABUILD_CLI_EXPERIMENTAL=enabled`配置环境变量ISULABUILD_CLI_EXPERIMENTAL来开启实验特性。 + +以下按照上述维度依次详细介绍这些命令行指令的使用。 + +## ctr-img: 容器镜像管理 + +isula-build 将所有容器镜像管理相关命令划分在子命令 `ctr-img` 下,命令原型为: + +```sh +isula-build ctr-img [command] +``` + +### build: 容器镜像构建 + +ctr-img 的子命令 build 用于构建容器镜像,命令原型为: + +```sh +isula-build ctr-img build [flags] +``` + +其中 build 包含如下 flags: + +* --build-arg:string列表,构建过程中需要用到的变量。 +* --build-static:KeyValue值,构建二进制一致性。目前包含如下Key值: + * build-time:string,使用固定时间戳来构建容器镜像;时间戳格式为“YYYY-MM-DD HH-MM-SS”。 +* -f, --filename:string,Dockerfile的路径,不指定则是使用当前路径的Dockerfile文件。 +* --format: string, 设置构建镜像的镜像格式:oci | docker(需开启实验特性选项)。 +* --iidfile:string,输出 image ID 到本地文件。 +* -o, --output:string,镜像导出的方式和路径。 +* --proxy:布尔值,继承主机侧环境的proxy环境变量(默认为true)。 +* --tag:string,设置构建成功的镜像的tag值。 +* --cap-add:string列表,构建过程中RUN指令所需要的权限。 + +**以下为各个 flags 的详解。** + +**\--build-arg** + +从命令行接受参数作为Dockerfile中的参数,用法: + +```sh +$ echo "This is bar file" > bar.txt +$ cat Dockerfile_arg +FROM busybox +ARG foo +ADD ${foo}.txt . +RUN cat ${foo}.txt +$ sudo isula-build ctr-img build --build-arg foo=bar -f Dockerfile_arg +STEP 1: FROM busybox +Getting image source signatures +Copying blob sha256:8f52abd3da461b2c0c11fda7a1b53413f1a92320eb96525ddf92c0b5cde781ad +Copying config sha256:e4db68de4ff27c2adfea0c54bbb73a61a42f5b667c326de4d7d5b19ab71c6a3b +Writing manifest to image destination +Storing signatures +STEP 2: ARG foo +STEP 3: ADD ${foo}.txt . +STEP 4: RUN cat ${foo}.txt +This is bar file +Getting image source signatures +Copying blob sha256:6194458b07fcf01f1483d96cd6c34302ffff7f382bb151a6d023c4e80ba3050a +Copying blob sha256:6bb56e4a46f563b20542171b998cb4556af4745efc9516820eabee7a08b7b869 +Copying config sha256:39b62a3342eed40b41a1bcd9cd455d77466550dfa0f0109af7a708c3e895f9a2 +Writing manifest to image destination +Storing signatures +Build success with image id: 39b62a3342eed40b41a1bcd9cd455d77466550dfa0f0109af7a708c3e895f9a2 +``` + +**\--build-static** + +指定为静态构建,即使用isula-build构建容器镜像时消除所有时间戳和其他构建因素(例如容器ID、hostname等)的差异。最终构建出满足静态要求的容器镜像。 + +在使用isula-build进行容器镜像构建时,假如给 build 子命令一个固定的时间戳,并在限定如下条件的时候: + +* 构建环境前后保持一致。 +* 构建Dockerfile前后保持一致。 +* 构建产生的中间数据前后保持一致。 +* 构建命令相同。 +* 第三方库版本一致。 + +对于容器镜像构建,isula-build支持相同的Dockerfile。如果构建环境相同,则多次构建生成的镜像内容和镜像ID相同。 + +--build-static接受k=v形式的键值对选项,当前支持的选项有: + +* build-time:字符串类型。构建静态镜像的固定时间戳,格式为“YYYY-MM-DD HH-MM-SS”。时间戳影响diff层创建修改时间的文件属性。 + + 使用示例如下: + + ```sh + sudo isula-build ctr-img build -f Dockerfile --build-static='build-time=2020-05-23 10:55:33' . + ``` + + 以此方式,同一环境多次构建出来的容器镜像和镜像ID均会保持一致。 + +**\--format** +开始实验特性后该选项可用,默认为OCI镜像格式。可以手动指定镜像格式进行构建,例如,下面分别为构建OCI镜像格式以及Docker镜像格式镜像的命令。 + + ```sh + export ISULABUILD_CLI_EXPERIMENTAL=enabled; sudo isula-build ctr-img build -f Dockerfile --format oci . + ``` + + ```sh + export ISULABUILD_CLI_EXPERIMENTAL=enabled; sudo isula-build ctr-img build -f Dockerfile --format docker . + ``` + +**\--iidfile** + +将构建的镜像ID输出到文件,用法: + +```sh +isula-build ctr-img build --iidfile filename +``` + +例如,将容器镜像ID输出到testfile的参考命令如下: + + ```sh +sudo isula-build ctr-img build -f Dockerfile_arg --iidfile testfile + ``` + + 查看testfile中的容器镜像ID: + + ```sh +$ cat testfile +76cbeed38a8e716e22b68988a76410eaf83327963c3b29ff648296d5cd15ce7b + ``` + +**\-o, --output** + +目前 -o, --output 支持如下形式: + +* `isulad:image:tag`:将构建成功的镜像直接推送到 iSulad。比如:`-o isulad:busybox:latest`。同时需要注意如下约束: + + * isula-build 和 iSulad 必须在同一个节点上 + * tag必须配置 + * isula-build client端需要将构建成功的镜像暂存成 `/var/tmp/isula-build-tmp-%v.tar` 再导入至 iSulad,用户需要保证 `/var/tmp/` 目录有足够磁盘空间 + +* `docker-daemon:image:tag`:将构建成功的镜像直接推送到 Docker daemon。比如:`-o docker-daemon:busybox:latest`。同时需要注意如下约束: + * isula-build 和 docker 必须在同一个节点上 + * tag必须配置 + +* `docker://registry.example.com/repository:tag`:将构建成功的镜像以Docker镜像格式直接推送到远端镜像仓库。比如:`-o docker://localhost:5000/library/busybox:latest`。 + +* `docker-archive:/:image:tag`:将构建成功的镜像以Docker镜像格式保存至本地。比如:`-o docker-archive:/root/image.tar:busybox:latest`。 + +打开实验特性之后,可以启用相应OCI镜像的构建: + +* `oci://registry.example.com/repository:tag`:将构建成功的镜像以OCI镜像格式直接推送到远端镜像仓库(远程镜像仓库须支持OCI镜像格式)。比如:`-o oci://localhost:5000/library/busybox:latest`。 + +* `oci-archive:/:image:tag`:将构建成功的镜像以OCI镜像的格式保存至本地。比如:`-o oci-archive:/root/image.tar:busybox:latest`。 + +除去各个flags之外,build子命令的命令行最后还会接收一个argument,该argument类型是string,意义为context,即该Dockerfile构建环境的上下文。该参数缺省值为isula-build被执行的当前路径。该路径会影响 .dockerignore 和 Dockerfile的ADD/COPY指令 所检索的路径。 + +**\--proxy** + +选择构建时RUN指令启动的容器是否从环境上继承proxy相关环境变量“http_proxy”,“https_proxy”,“ftp_proxy”,“no_proxy”,“HTTP_PROXY”,“HTTPS_PROXY”,“FTP_PROXY”,“NO_PROXY”,默认为true。 + +当用户在Dockerfile配置proxy相关ARG或ENV,将覆盖所继承的环境变量。 + +注意:若client与daemon不在同一个终端运行,所能继承的环境变量为daemon所在终端的环境变量。 + +**\--tag** + +设置镜像构建成功之后,该镜像在本地磁盘存储时的tag。 + +**\--cap-add** + +添加构建过程中RUN指令所需权限,用法: + +```sh +isula-build ctr-img build --cap-add ${CAP} +``` + +使用举例: + +```sh +sudo isula-build ctr-img build --cap-add CAP_SYS_ADMIN --cap-add CAP_SYS_PTRACE -f Dockerfile +``` + +> ![](./public_sys-resources/icon-note.gif) **说明:** +> +> * isula-build最大支持并发构建100个容器镜像。 +> * isula-build支持Dockerfile最大为1MiB。 +> * isula-build支持 .dockerignore 最大为 1MiB。 +> * 用户需保证Dockerfile文件的权限为仅当前用户可读写,避免别的用户进行篡改。 +> * 构建时,RUN指令会启动容器在容器内进行构建,目前 isula-build 仅支持使用主机网络。 +> * isula-build 导出的镜像压缩格式,目前仅支持tar格式。 +> * isula-build 在每一个镜像构建stage完成后做一次提交,而不是每执行 Dockerfile的一行就提交一次。 +> * isula-build 暂不支持构建缓存。 +> * isula-build 仅在构建RUN指令时会启动构建容器。 +> * 目前不支持docker镜像格式的history功能。 +> * isula-build 的stage name支持以数字开头。 +> * isula-build 的stage name最长可为64个字符。 +> * isula-build 暂不支持对单次Dockerfile的构建进行资源限制。如有资源限制需求,可通过对 isula-builder 服务端配置资源限额的方式进行限制。 +> * isula-build 目前不支持Dockerfile里的ADD指令提供的数据来源是远端url。 +> * isula-build 使用docker-archive以及oci-archive类型导出的本地tar包未经压缩。如有需求,用户可以手动进行压缩。 + +### image: 查看本地持久化构建镜像 + +可通过images命令查看当前本地持久化存储的镜像: + +```sh +$ sudo isula-build ctr-img images +--------------------------------------- ----------- ----------------- ------------------------ ------------ +REPOSITORY TAG IMAGE ID CREATED SIZE +--------------------------------------- ----------- ----------------- ------------------------ ------------ +localhost:5000/library/alpine latest a24bb4013296 2022-01-17 10:02:19 5.85 MB + 39b62a3342ee 2022-01-17 10:01:12 1.45 MB +--------------------------------------- ----------- ----------------- ------------------------ ------------ +``` + +> ![](./public_sys-resources/icon-note.gif) **说明:** +> +> 通过`isula-build ctr-img images`查看的镜像大小与`docker images`的显示上有一定差异。这是因为统计镜像大小时,isula-build是直接计算每层tar包大小之和,而docker是通过解压tar遍历diff目录计算文件大小之和,因此存在统计上的差异。 + +### import: 导入容器基础镜像 + +可以通过`ctr-img import`指令将rootfs形式的tar文件导入到isula-build中。 + +命令原型如下: + +```sh +isula-build ctr-img import [flags] +``` + +使用举例: + +```sh +$ sudo isula-build ctr-img import busybox.tar mybusybox:latest +Getting image source signatures +Copying blob sha256:7b8667757578df68ec57bfc9fb7754801ec87df7de389a24a26a7bf2ebc04d8d +Copying config sha256:173b3cf612f8e1dc34e78772fcf190559533a3b04743287a32d549e3c7d1c1d1 +Writing manifest to image destination +Storing signatures +Import success with image id: "173b3cf612f8e1dc34e78772fcf190559533a3b04743287a32d549e3c7d1c1d1" +$ sudo isula-build ctr-img images +--------------------------------------- ----------- ----------------- ------------------------ ------------ +REPOSITORY TAG IMAGE ID CREATED SIZE +--------------------------------------- ----------- ----------------- ------------------------ ------------ +mybusybox latest 173b3cf612f8 2022-01-12 16:02:31 1.47 MB +--------------------------------------- ----------- ----------------- ------------------------ ------------ +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +> isula-build 支持导入最大1GiB的容器基础镜像。 + +### load: 导入层叠镜像 + +层叠镜像指的是通过 docker save 或 isula-build ctr-img save 等指令,将一个构建完成的镜像保存至本地之后,镜像压缩包内是一层一层 layer.tar 的镜像包。可以通过 ctr-img load 指令将它导入至 isula-build。 + +命令原型如下: + +```sh +isula-build ctr-img load [flags] +``` + +目前支持的 flags 为: + +* -i, --input:本地tar包的路径 + +使用举例如下: + +```sh +$ sudo isula-build ctr-img load -i ubuntu.tar +Getting image source signatures +Copying blob sha256:cf612f747e0fbcc1674f88712b7bc1cd8b91cf0be8f9e9771235169f139d507c +Copying blob sha256:f934e33a54a60630267df295a5c232ceb15b2938ebb0476364192b1537449093 +Copying blob sha256:943edb549a8300092a714190dfe633341c0ffb483784c4fdfe884b9019f6a0b4 +Copying blob sha256:e7ebc6e16708285bee3917ae12bf8d172ee0d7684a7830751ab9a1c070e7a125 +Copying blob sha256:bf6751561805be7d07d66f6acb2a33e99cf0cc0a20f5fd5d94a3c7f8ae55c2a1 +Copying blob sha256:c1bd37d01c89de343d68867518b1155cb297d8e03942066ecb44ae8f46b608a3 +Copying blob sha256:a84e57b779297b72428fc7308e63d13b4df99140f78565be92fc9dbe03fc6e69 +Copying blob sha256:14dd68f4c7e23d6a2363c2320747ab88986dfd43ba0489d139eeac3ac75323b2 +Copying blob sha256:a2092d776649ea2301f60265f378a02405539a2a68093b2612792cc65d00d161 +Copying blob sha256:879119e879f682c04d0784c9ae7bc6f421e206b95d20b32ce1cb8a49bfdef202 +Copying blob sha256:e615448af51b848ecec00caeaffd1e30e8bf5cffd464747d159f80e346b7a150 +Copying blob sha256:f610bd1e9ac6aa9326d61713d552eeefef47d2bd49fc16140aa9bf3db38c30a4 +Copying blob sha256:bfe0a1336d031bf5ff3ce381e354be7b2bf310574cc0cd1949ad94dda020cd27 +Copying blob sha256:f0f15db85788c1260c6aa8ad225823f45c89700781c4c793361ac5fa58d204c7 +Copying config sha256:c07ddb44daa97e9e8d2d68316b296cc9343ab5f3d2babc5e6e03b80cd580478e +Writing manifest to image destination +Storing signatures +Loaded image as c07ddb44daa97e9e8d2d68316b296cc9343ab5f3d2babc5e6e03b80cd580478e +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +> * isula-build 支持导入最大50G的容器层叠镜像。 +> * isula-build 会自动识别容器层叠镜像的格式并进行导入。 + +### rm: 删除本地持久化镜像 + +可通过rm命令删除当前本地持久化存储的镜像。命令原型为: + +```sh +isula-build ctr-img rm IMAGE [IMAGE...] [FLAGS] +``` + +目前支持的 flags 为: + +* -a, --all:删除所有本地持久化存储的镜像。 +* -p, --prune:删除所有没有tag的本地持久化存储的镜像。 + +使用示例如下: + +```sh +$ sudo isula-build ctr-img rm -p +Deleted: sha256:78731c1dde25361f539555edaf8f0b24132085b7cab6ecb90de63d72fa00c01d +Deleted: sha256:eeba1bfe9fca569a894d525ed291bdaef389d28a88c288914c1a9db7261ad12c +``` + +### save: 导出层叠镜像 + +可通过save命令导出层叠镜像到本地磁盘。命令原型如下: + +```sh +isula-build ctr-img save [REPOSITORY:TAG]|imageID -o xx.tar +``` + +目前支持的 flags 为: + +* -f, --format:导出层叠镜像的镜像格式:oci | docker(需开启实验特性选项) +* -o, --output:本地tar包路径 + +以下示例通过 `image/tag` 的形式将镜像进行导出: + +```sh +$ sudo isula-build ctr-img save busybox:latest -o busybox.tar +Getting image source signatures +Copying blob sha256:50644c29ef5a27c9a40c393a73ece2479de78325cae7d762ef3cdc19bf42dd0a +Copying blob sha256:824082a6864774d5527bda0d3c7ebd5ddc349daadf2aa8f5f305b7a2e439806f +Copying blob sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef +Copying config sha256:21c3e96ac411242a0e876af269c0cbe9d071626bdfb7cc79bfa2ddb9f7a82db6 +Writing manifest to image destination +Storing signatures +Save success with image: busybox:latest +``` + +以下示例通过 `ImageID` 的形式将镜像进行导出: + +```sh +$ sudo isula-build ctr-img save 21c3e96ac411 -o busybox.tar +Getting image source signatures +Copying blob sha256:50644c29ef5a27c9a40c393a73ece2479de78325cae7d762ef3cdc19bf42dd0a +Copying blob sha256:824082a6864774d5527bda0d3c7ebd5ddc349daadf2aa8f5f305b7a2e439806f +Copying blob sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef +Copying config sha256:21c3e96ac411242a0e876af269c0cbe9d071626bdfb7cc79bfa2ddb9f7a82db6 +Writing manifest to image destination +Storing signatures +Save success with image: 21c3e96ac411 +``` + +以下示例导出多个镜像到同一个tar包: + +```sh +$ sudo isula-build ctr-img save busybox:latest nginx:latest -o all.tar +Getting image source signatures +Copying blob sha256:eb78099fbf7fdc70c65f286f4edc6659fcda510b3d1cfe1caa6452cc671427bf +Copying blob sha256:29f11c413898c5aad8ed89ad5446e89e439e8cfa217cbb404ef2dbd6e1e8d6a5 +Copying blob sha256:af5bd3938f60ece203cd76358d8bde91968e56491daf3030f6415f103de26820 +Copying config sha256:b8efb18f159bd948486f18bd8940b56fd2298b438229f5bd2bcf4cedcf037448 +Writing manifest to image destination +Storing signatures +Getting image source signatures +Copying blob sha256:e2d6930974a28887b15367769d9666116027c411b7e6c4025f7c850df1e45038 +Copying config sha256:a33de3c85292c9e65681c2e19b8298d12087749b71a504a23c576090891eedd6 +Writing manifest to image destination +Storing signatures +Save success with image: [busybox:latest nginx:latest] +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +> * save 导出的镜像默认格式为未压缩的tar格式,如有需求,用户可以再save之后手动压缩。 +> * 在使用镜像名导出镜像时,需要给出完整的镜像名格式:REPOSITORY:TAG。 + +### tag: 给本地持久化镜像打标签 + +可使用tag命令给本地持久化的容器镜像打tag。命令原型如下: + +```sh +isula-build ctr-img tag / busybox:latest +``` + +使用举例: + +```sh +$ sudo isula-build ctr-img images +--------------------------------------- ----------- ----------------- -------------------------- ------------ +REPOSITORY TAG IMAGE ID CREATED SIZE +--------------------------------------- ----------- ----------------- -------------------------- ------------ +alpine latest a24bb4013296 2020-05-29 21:19:46 5.85 MB +--------------------------------------- ----------- ----------------- -------------------------- ------------ +$ sudo isula-build ctr-img tag a24bb4013296 alpine:v1 +$ sudo isula-build ctr-img images +--------------------------------------- ----------- ----------------- ------------------------ ------------ +REPOSITORY TAG IMAGE ID CREATED SIZE +--------------------------------------- ----------- ----------------- ------------------------ ------------ +alpine latest a24bb4013296 2020-05-29 21:19:46 5.85 MB +alpine v1 a24bb4013296 2020-05-29 21:19:46 5.85 MB +--------------------------------------- ----------- ----------------- ------------------------ ------------ +``` + +### pull: 拉取镜像到本地 + +可通过pull命令拉取远程镜像仓库中的镜像到本地。命令原型如下: + +```sh +isula-build ctr-img pull REPOSITORY[:TAG] +``` + +使用示例: + +```sh +$ sudo isula-build ctr-img pull example-registry/library/alpine:latest +Getting image source signatures +Copying blob sha256:8f52abd3da461b2c0c11fda7a1b53413f1a92320eb96525ddf92c0b5cde781ad +Copying config sha256:e4db68de4ff27c2adfea0c54bbb73a61a42f5b667c326de4d7d5b19ab71c6a3b +Writing manifest to image destination +Storing signatures +Pull success with image: example-registry/library/alpine:latest +``` + +### push: 将本地镜像推送到远程仓库 + +可通过push命令将本地镜像推送到远程仓库。命令原型如下: + +```sh +isula-build ctr-img push REPOSITORY[:TAG] +``` + +目前支持的 flags 为: + +* -f, --format:推送的镜像格式:oci|docker(需开启实验特性选项) + +使用示例: + +```sh +$ sudo isula-build ctr-img push example-registry/library/mybusybox:latest +Getting image source signatures +Copying blob sha256:d2421964bad195c959ba147ad21626ccddc73a4f2638664ad1c07bd9df48a675 +Copying config sha256:f0b02e9d092d905d0d87a8455a1ae3e9bb47b4aa3dc125125ca5cd10d6441c9f +Writing manifest to image destination +Storing signatures +Push success with image: example-registry/library/mybusybox:latest +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +> 推送镜像时,需要先登录对应的镜像仓库 + +## info: 查看运行环境与系统信息 + +可以通过“isula-build info”指令查看 isula-build 目前的运行环境与系统信息。命令原型如下: + +```sh +isula-build info [flags] +``` + +支持如下Flags: + +* -H, --human-readable 布尔值,以常用内存表示格式打印内存信息,使用1000次幂 +* -V, --verbose 布尔值,显示运行时内存占用信息 + +使用示例: + +```sh +$ sudo isula-build info -HV + General: + MemTotal: 7.63 GB + MemFree: 757 MB + SwapTotal: 8.3 GB + SwapFree: 8.25 GB + OCI Runtime: runc + DataRoot: /var/lib/isula-build/ + RunRoot: /var/run/isula-build/ + Builders: 0 + Goroutines: 12 + Store: + Storage Driver: overlay + Backing Filesystem: extfs + Registry: + Search Registries: + oepkgs.net + Insecure Registries: + localhost:5000 + oepkgs.net + Runtime: + MemSys: 68.4 MB + HeapSys: 63.3 MB + HeapAlloc: 7.41 MB + MemHeapInUse: 8.98 MB + MemHeapIdle: 54.4 MB + MemHeapReleased: 52.1 MB +``` + +## login: 登录远端镜像仓库 + +用户可以运行 login 命令来登录远程镜像仓库。命令原型如下: + +```sh + isula-build login SERVER [FLAGS] +``` + +目前支持的flag有: + +```Conf + Flags: + -p, --password-stdin Read password from stdin + -u, --username string Username to access registry +``` + +通过stdin输入密码。以下示例通过通过管道将creds.txt里的密码传给isula-build的stdin进行输入: + +```sh + $ cat creds.txt | sudo isula-build login -u cooper -p mydockerhub.io + Login Succeeded +``` + +通过交互式输入密码: + +```sh + $ sudo isula-build login mydockerhub.io -u cooper + Password: + Login Succeeded +``` + +## logout: 退出远端镜像仓库 + +用户可以运行 logout 命令来登出远程镜像仓库。命令原型如下: + +```sh +isula-build logout [SERVER] [FLAGS] +``` + +目前支持的flag有: + +```sh + Flags: + -a, --all Logout all registries +``` + +使用示例如下: + +```sh +$ sudo isula-build logout -a + Removed authentications +``` + +## version: 版本查询 + +可通过version命令查看当前版本信息: + +```sh +$ sudo isula-build version +Client: + Version: 0.9.6-4 + Go Version: go1.15.7 + Git Commit: 83274e0 + Built: Wed Jan 12 15:32:55 2022 + OS/Arch: linux/amd64 + +Server: + Version: 0.9.6-4 + Go Version: go1.15.7 + Git Commit: 83274e0 + Built: Wed Jan 12 15:32:55 2022 + OS/Arch: linux/amd64 +``` + +## manifest: manifest列表管理 + +manifest列表包含不同系统架构对应的镜像信息,通过使用manifest列表,用户可以在不同的架构中使用相同的manifest(例如openeuler:latest)获取对应架构的镜像,manifest包含create、annotate、inspect和push子命令。 +> ![](./public_sys-resources/icon-note.gif) **说明:** +> +> manifest为实验特性,使用时需开启客户端和服务端的实验选项,方式详见客户端总体说明和配置服务章节。 + +### create: manifest列表创建 + +manifest的子命令create用于创建manifest列表,命令原型为: + +```sh +isula-build manifest create MANIFEST_LIST MANIFEST [MANIFEST...] +``` + +用户可以指定manifest列表的名称以及需要加入到列表中的远程镜像,若不指定任何远程镜像,则会创建一个空的manifest列表。 + +使用示例如下: + +```sh +sudo isula-build manifest create openeuler localhost:5000/openeuler_x86:latest localhost:5000/openeuler_aarch64:latest +``` + +### annotate: manifest列表更新 + +manifest的子命令annotate用于更新manifest列表,命令原型为: + +```sh +isula-build manifest annotate MANIFEST_LIST MANIFEST [flags] +``` + +用户可以指定需要更新的manifest列表以及其中的镜像,通过flags指定需要更新的选项,此命令也可用于添加新的镜像到列表中。 + +其中annotate包含如下flags: + +* --arch: string,重写镜像适用架构 +* --os: string,重写镜像适用系统 +* --os-features: string列表,指定镜像需要的OS特性,很少使用 +* --variant: string,指定列表中记录镜像的变量 + +使用示例如下: + +```sh +sudo isula-build manifest annotate --os linux --arch arm64 openeuler:latest localhost:5000/openeuler_aarch64:latest +``` + +### inspect: manifest列表查询 + +manifest子命令inspect用于查询manifest列表信息,命令原型为: + +```sh +isula-build manifest inspect MANIFEST_LIST +``` + +使用示例如下: + +```sh +$ sudo isula-build manifest inspect openeuler:latest +{ + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "size": 527, + "digest": "sha256:bf510723d2cd2d4e3f5ce7e93bf1e52c8fd76831995ac3bd3f90ecc866643aff", + "platform": { + "architecture": "amd64", + "os": "linux" + } + }, + { + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "size": 527, + "digest": "sha256:f814888b4bb6149bd39ba8375a1932fb15071b4dbffc7f76c7b602b06abbb820", + "platform": { + "architecture": "arm64", + "os": "linux" + } + } + ] +} +``` + +### push: 将manifest列表推送到远程仓库 + +manifest子命令push用于将manifest列表推送到远程仓库,命令原型为: + +```sh +isula-build manifest push MANIFEST_LIST DESTINATION +``` + +使用示例如下: + +```sh +sudo isula-build manifest push openeuler:latest localhost:5000/openeuler:latest +``` + +# 直接集成容器引擎 + +isula-build可以与iSulad和docker集成,将构建好的容器镜像导入到容器引擎的本地存储中。 + +## 与iSulad集成 + +支持将构建成功的镜像直接导出到iSulad。 + +命令行举例: + +```sh +sudo isula-build ctr-img build -f Dockerfile -o isulad:busybox:2.0 +``` + +通过在-o参数中指定iSulad,将构建好的容器镜像导出到iSulad,可以通过isula images查询: + +```sh +$ sudo isula images +isula images +REPOSITORY TAG IMAGE ID CREATED SIZE +busybox 2.0 2d414a5cad6d 2020-08-01 06:41:36 5.577 MB +``` + +> ![](./public_sys-resources/icon-note.gif) **说明:** +> +> * 要求isula-build和iSulad在同一节点。 +> * 直接导出镜像到iSulad时,isula-build client端需要将构建成功的镜像暂存成 `/var/lib/isula-build/tmp/[buildid]/isula-build-tmp-%v.tar` 再导入至 iSulad,用户需要保证 /var/lib/isula-build/tmp/ 目录有足够磁盘空间;同时如果在导出过程中 isula-build client进程被KILL或Ctrl+C终止,需要依赖用户手动清理 `/var/lib/isula-build/tmp/[buildid]/isula-build-tmp-%v.tar` 文件。 + +## 与Docker集成 + +支持将构建成功的镜像直接导出到Docker daemon。 + +命令行举例: + +```sh +sudo isula-build ctr-img build -f Dockerfile -o docker-daemon:busybox:2.0 +``` + +通过在-o参数中指定docker-daemon,将构建好的容器镜像导出到docker, 可以通过docker images查询。 + +```sh +$ sudo docker images +REPOSITORY TAG IMAGE ID CREATED SIZE +busybox 2.0 2d414a5cad6d 2 months ago 5.22MB +``` + +> ![](./public_sys-resources/icon-note.gif) **说明:** +> +> 要求isula-build和Docker在同一节点。 + +# 使用注意事项 + +本章节主要介绍在使用isula-build构建镜像时相关的约束和限制,以及与docker build的差异。 + +## 约束和限制 + +1. 当导出镜像到[`iSulad`](https://gitee.com/openeuler/iSulad/blob/master/README.md/)时,镜像必须指明tag。 +2. 因为isula-builder运行`RUN`指令时,需要调用系统中的oci 运行时(如`runc`),用户需要保证该运行时的安全性,不受篡改。 +3. `DataRoot`不能设置在内存盘上(tmpfs)。 +4. `Overlay2`是目前isula-builder唯一支持的存储驱动。 +5. `Docker`镜像是目前唯一支持的镜像格式,未来即将支持`oci`格式镜像。 +6. `Dockerfile`文件权限强烈建议设置为**0600**以防止恶意篡改。 +7. `RUN`命令中目前只支持主机侧网络(host network)。 +8. 当导出镜像到本地tar包时,目前只支持保存为`tar`格式。 +9. 当使用`import`功能导入基础镜像时,最大支持**1G**。 + +## 与“docker build”差异 + +`isula-build`兼容[Docker镜像格式规范](https://docs.docker.com/engine/reference/builder/),但仍然和`docker build`存在一些差异: + +1. 支持镜像压缩,即对每个`stage`进行提交而非每一行。 +2. 目前不支持构建缓存。 +3. 只有`RUN`指令会运行容器进行构建。 +4. 目前不支持查询镜像构建历史。 +5. `Stage`名称可以用数字开头。 +6. `Stage`名称最大长度为64。 +7. `ADD`命令不支持远端URL格式。 +8. 暂不支持对单次构建进行资源限额,可采取对isula-builder配置资源限额的方式进行限制。 +9. 统计镜像大小时,isula-build是直接计算每层tar包大小之和,而docker是通过解压tar遍历diff目录计算文件大小之和,因此通过`isula-build ctr-img images`查看的镜像大小与`docker images`的显示上有一定差异。 +10. 操作时的镜像名称需要明确,格式为IMAGE_NAME:IMAGE_TAG。例如 busybox:latest, 其中latest不可省略。 diff --git "a/docs/zh/docs/Container/isula-build\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" "b/docs/zh/docs/Container/isula-build\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..5e59780ada97ebd50778f197edb33073f9c7ee6a --- /dev/null +++ "b/docs/zh/docs/Container/isula-build\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" @@ -0,0 +1,7 @@ +# 常见问题与解决方法 + +## **问题1:isula-build拉取镜像报错:pinging container registry xx: get xx: dial tcp host:repo: connect: connection refused** + +原因:拉取的镜像来源于非授信仓库。 + +解决方法:修改isula-build镜像仓库的配置文件/etc/isula-build/registries.toml,将该非授信仓库加入[registries.insecure],重启isula-build。 \ No newline at end of file diff --git "a/docs/zh/docs/Container/isula-build\346\236\204\345\273\272\345\267\245\345\205\267.md" "b/docs/zh/docs/Container/isula-build\346\236\204\345\273\272\345\267\245\345\205\267.md" index 9536a5a0ac8d134563ae62edc5aa02db8235db19..cae6ba47cf95eca19b13e452e8234294293f0272 100644 --- "a/docs/zh/docs/Container/isula-build\346\236\204\345\273\272\345\267\245\345\205\267.md" +++ "b/docs/zh/docs/Container/isula-build\346\236\204\345\273\272\345\267\245\345\205\267.md" @@ -1,7 +1,5 @@ # 容器镜像构建 -## 概述 - isula-build是iSula容器团队推出的容器镜像构建工具,支持通过Dockerfile文件快速构建容器镜像。 isula-build采用服务端/客户端模式,其中,isula-build为客户端,提供了一组命令行工具,用于镜像构建及管理等;isula-builder为服务端,用于处理客户端管理请求,作为守护进程常驻后台。 @@ -11,1030 +9,3 @@ isula-build采用服务端/客户端模式,其中,isula-build为客户端, > ![](./public_sys-resources/icon-note.gif) **说明:** > > isula-build当前支持OCI镜像格式([OCI Image Format Specification](https://github.com/opencontainers/image-spec/blob/main/spec.md/))以及Docker镜像格式([Image Manifest Version 2, Schema 2](https://docs.docker.com/registry/spec/manifest-v2-2/))。通过命令`export ISULABUILD_CLI_EXPERIMENTAL=enabled`开启实验特性以支持OCI镜像格式。不开启实验特性时,isula-build默认采用Docker镜像格式;当开启实验特性后,将默认采用OCI镜像格式。 - -## 安装 - -### 环境准备 - -为了确保isula-build成功安装,需满足以下软件硬件要求。 - -* 支持的机器架构:x86_64 和 AArch64 -* 支持的操作系统:openEuler -* 用户具有root权限。 - -#### 安装isula-build - -使用isula-build构建容器镜像,需要先安装以下软件包。 - -##### (推荐)方法一:使用yum安装 - -1. 配置openEuler yum源。 - -2. 使用root权限,登录目标服务器,安装isula-build。 - - ```sh - sudo yum install -y isula-build - ``` - -##### 方法二:使用rpm包安装 - -1. 从openEuler yum源中获取isula-build对应安装包isula-build-*.rpm。例如isula-build-0.9.6-4.oe1.x86_64.rpm。 - -2. 将获取的rpm软件包上传至目标服务器的任一目录,例如 /home/。 - -3. 使用root权限,登录目标服务器,参考如下命令安装isula-build。 - - ```sh - sudo rpm -ivh /home/isula-build-*.rpm - ``` - -> ![](./public_sys-resources/icon-note.gif) **说明:** -> -> 安装完成后,需要手工启动isula-build服务。启动请参见[管理服务](isula-build构建工具.md#管理服务)。 - -## 配置与管理服务 - -### 配置服务 - -在安装完 isula-build 软件包之后,systemd 管理服务会以 isula-build 软件包自带的 isula-build 服务端默认配置启动 isula-build 服务。如果 isula-build 服务端的默认配置文件不能满足用户的需求,可以参考如下介绍进行定制化配置。需要注意的是,修改完默认配置之后,需要重启 isula-build 服务端使新配置生效,具体操作可参考下一章节。 - -目前 isula-build 服务端包含如下配置文件: - -* /etc/isula-build/configuration.toml:isula-builder 总体配置文件,用于设置 isula-builder 日志级别、持久化目录和运行时目录、OCI runtime等。其中各参数含义如下: - -| 配置项 | 是否可选 | 配置项含义 | 配置项取值 | -| --------- | -------- | --------------------------------- | ----------------------------------------------- | -| debug | 可选 | 设置是否打开debug日志 | true:打开debug日志
false:关闭debug日志 | -| loglevel | 可选 | 设置日志级别 | debug
info
warn
error | -| run_root | 必选 | 设置运行时数据根目录 | 运行时数据根目录路径,例如/var/run/isula-build/ | -| data_root | 必选 | 设置本地持久化目录 | 本地持久化目录路径,例如/var/lib/isula-build/ | -| runtime | 可选 | 设置runtime种类,目前仅支持runc | runc | -| group | 可选 | 设置本地套接字isula_build.sock文件属组使得加入该组的非特权用户可以操作isula-build | isula | -| experimental | 可选 | 设置是否开启实验特性 | true:开启实验特性;false:关闭实验特性 | - -* /etc/isula-build/storage.toml: 本地持久化存储的配置文件,包含所使用的存储驱动的配置。 - -| 配置项 | 是否可选 | 配置项含义 | -| ------ | -------- | ------------------------------ | -| driver | 可选 | 存储驱动类型,目前支持overlay2 | - - 更多设置可参考 [containers-storage.conf.5](https://github.com/containers/storage/blob/main/docs/containers-storage.conf.5.md)。 - -* /etc/isula-build/registries.toml : 针对各个镜像仓库的配置文件。 - -| 配置项 | 是否可选 | 配置项含义 | -| ------------------- | -------- | ------------------------------------------------------------ | -| registries.search | 可选 | 镜像仓库搜索域,在此list的镜像仓库可以被感知,不在此列的不被感知。 | -| registries.insecure | 可选 | 可访问的不安全镜像仓库地址,在此列表中的镜像仓库将不会通过鉴权,不推荐使用。 | - - 更多设置可参考 [containers-registries.conf.5](https://github.com/containers/image/blob/main/docs/containers-registries.conf.5.md)。 - -* /etc/isula-build/policy.json:镜像pull/push策略文件。当前不支持对其进行配置。 - -> ![](./public_sys-resources/icon-note.gif) **说明:** -> -> * isula-build 支持最大 1MiB 的上述配置文件。 -> * isula-build 不支持将持久化工作目录 dataroot 配置在内存盘上,比如 tmpfs。 -> * isula-build 目前仅支持使用overlay2为底层 graphdriver。 -> * 在设置--group参数前,需保证本地OS已经创建了对应的用户组,且非特权用户已经加入该组。重启isula-builder之后即可使该非特权用户使用isula-build功能。同时,为了保持权限一致性,isula-build的配置文件目录/etc/isula-build的属组也会被设置为--group指定的组。 - -### 管理服务 - -目前 openEuler 采用 systemd 管理软件服务,isula-build 软件包已经自带了 systemd 的服务文件,用户安装完 isula-build 软件包之后,可以直接通过 systemd 工具对它进行服务启停等操作。用户同样可以手动启动 isula-build 服务端软件。需要注意的是,同一个节点上不可以同时启动多个 isula-build 服务端软件。 - ->![](./public_sys-resources/icon-note.gif) **说明:** -> -> 同一个节点上不可以同时启动多个 isula-build 服务端软件。 - -#### 通过 systemd 管理(推荐方式) - -用户可以通过如下 systemd 的标准指令控制 isula-build 服务的启动、停止、重启等动作: - -* 启动 isula-build 服务: - - ```sh - sudo systemctl start isula-build.service - ``` - -* 停止 isula-build 服务: - - ```sh - sudo systemctl stop isula-build.service - ``` - -* 重启 isula-build 服务: - - ```sh - sudo systemctl restart isula-build.service - ``` - -isula-build 软件包安装的 systemd 服务文件保存在 `/usr/lib/systemd/system/isula-build.service`。如果用户需要修改 isula-build 服务的 systemd 配置,可以修改该文件,执行如下命令使配置生效,之后再根据上面提到的 systemd 管理指令重启 isula-build 服务 - -```sh -sudo systemctl daemon-reload -``` - -#### 直接运行 isula-build 服务端 - -您也可以通过执行 isula-build 服务端命令( isula-builder)的方式启动服务。其中,服务端启动配置,可通过isula-builder命令支持的 flags 设置。isula-build 服务端目前支持的 flags 如下: - -* -D, --debug: 是否开启调测模式。 -* --log-level: 日志级别,支持 “debug”, “info”, “warn” or “error”,默认为 “info”。 -* --dataroot: 本地持久化路径,默认为”/var/lib/isula-build/“。 -* --runroot: 运行时路径,默认为”/var/run/isula-build/“。 -* --storage-driver:底层存储驱动类型。 -* --storage-opt: 底层存储驱动配置。 -* --group: 设置本地套接字isula_build.sock文件属组使得加入该组的非特权用户可以操作isula-build,默认为“isula”。 -* --experimental: 是否开启实验特性,默认为false。 - ->![](./public_sys-resources/icon-note.gif) **说明:** -> -> 当命令行启动参数中传递了与配置文件相同的配置选项时,优先使用命令行参数启动。 - -启动 isula-build 服务。例如指定本地持久化路径/var/lib/isula-build,且不开启调试的参考命令如下: - -```sh -sudo isula-builder --dataroot "/var/lib/isula-build" --debug=false -``` - -## 使用指南 - -### 前提条件 - -isula-build 构建 Dockerfile 内的 RUN 指令时依赖可执行文件 runc ,需要 isula-build 的运行环境上预装好 runc。安装方式视用户使用场景而定,如果用户不需要使用完整的 docker-engine 工具链,则可以仅安装 docker-runc rpm包: - -```sh -sudo yum install -y docker-runc -``` - -如果用户需要使用完整的 docker-engine 工具链,则可以安装 docker-engine rpm包,默认包含可执行文件 runc : - -```sh -sudo yum install -y docker-engine -``` - ->![](./public_sys-resources/icon-note.gif) **说明:** -> -> 用户需保证OCI runtime(runc)可执行文件的安全性,避免被恶意替换。 - -### 总体说明 - -isula-build 客户端提供了一系列命令用于构建和管理容器镜像,当前 isula-build 包含的命令行指令如下: - -* ctr-img,容器镜像管理。ctr-img又包含如下子命令: - * build,根据给定dockerfile构建出容器镜像。 - * images,列出本地容器镜像。 - * import,导入容器基础镜像。 - * load,导入层叠镜像。 - * rm,删除本地容器镜像。 - * save,导出层叠镜像至本地磁盘。 - * tag,给本地容器镜像打tag。 - * pull,拉取镜像到本地。 - * push,推送本地镜像到远程仓库。 -* info,查看isula-build的运行环境和系统信息。 -* login,登录远端容器镜像仓库。 -* logout,退出远端容器镜像仓库。 -* version,查看isula-build和isula-builder的版本号。 -* manifest(实验特性),管理manifest列表。 - ->![](./public_sys-resources/icon-note.gif) **说明:** -> -> * isula-build completion 和 isula-builder completion 命令用于生成bash命令补全脚本。该命令为命令行框架隐式提供,不会显示在help信息中。 -> * isula-build客户端不包含配置文件,当用户需要使用isula-build实验特性时,需要在客户端通过命令`export ISULABUILD_CLI_EXPERIMENTAL=enabled`配置环境变量ISULABUILD_CLI_EXPERIMENTAL来开启实验特性。 - -以下按照上述维度依次详细介绍这些命令行指令的使用。 - -### ctr-img: 容器镜像管理 - -isula-build 将所有容器镜像管理相关命令划分在子命令 `ctr-img` 下,命令原型为: - -```sh -isula-build ctr-img [command] -``` - -#### build: 容器镜像构建 - -ctr-img 的子命令 build 用于构建容器镜像,命令原型为: - -```sh -isula-build ctr-img build [flags] -``` - -其中 build 包含如下 flags: - -* --build-arg:string列表,构建过程中需要用到的变量。 -* --build-static:KeyValue值,构建二进制一致性。目前包含如下Key值: - * build-time:string,使用固定时间戳来构建容器镜像;时间戳格式为“YYYY-MM-DD HH-MM-SS”。 -* -f, --filename:string,Dockerfile的路径,不指定则是使用当前路径的Dockerfile文件。 -* --format: string, 设置构建镜像的镜像格式:oci | docker(需开启实验特性选项)。 -* --iidfile:string,输出 image ID 到本地文件。 -* -o, --output:string,镜像导出的方式和路径。 -* --proxy:布尔值,继承主机侧环境的proxy环境变量(默认为true)。 -* --tag:string,设置构建成功的镜像的tag值。 -* --cap-add:string列表,构建过程中RUN指令所需要的权限。 - -**以下为各个 flags 的详解。** - -**\--build-arg** - -从命令行接受参数作为Dockerfile中的参数,用法: - -```sh -$ echo "This is bar file" > bar.txt -$ cat Dockerfile_arg -FROM busybox -ARG foo -ADD ${foo}.txt . -RUN cat ${foo}.txt -$ sudo isula-build ctr-img build --build-arg foo=bar -f Dockerfile_arg -STEP 1: FROM busybox -Getting image source signatures -Copying blob sha256:8f52abd3da461b2c0c11fda7a1b53413f1a92320eb96525ddf92c0b5cde781ad -Copying config sha256:e4db68de4ff27c2adfea0c54bbb73a61a42f5b667c326de4d7d5b19ab71c6a3b -Writing manifest to image destination -Storing signatures -STEP 2: ARG foo -STEP 3: ADD ${foo}.txt . -STEP 4: RUN cat ${foo}.txt -This is bar file -Getting image source signatures -Copying blob sha256:6194458b07fcf01f1483d96cd6c34302ffff7f382bb151a6d023c4e80ba3050a -Copying blob sha256:6bb56e4a46f563b20542171b998cb4556af4745efc9516820eabee7a08b7b869 -Copying config sha256:39b62a3342eed40b41a1bcd9cd455d77466550dfa0f0109af7a708c3e895f9a2 -Writing manifest to image destination -Storing signatures -Build success with image id: 39b62a3342eed40b41a1bcd9cd455d77466550dfa0f0109af7a708c3e895f9a2 -``` - -**\--build-static** - -指定为静态构建,即使用isula-build构建容器镜像时消除所有时间戳和其他构建因素(例如容器ID、hostname等)的差异。最终构建出满足静态要求的容器镜像。 - -在使用isula-build进行容器镜像构建时,假如给 build 子命令一个固定的时间戳,并在限定如下条件的时候: - -* 构建环境前后保持一致。 -* 构建Dockerfile前后保持一致。 -* 构建产生的中间数据前后保持一致。 -* 构建命令相同。 -* 第三方库版本一致。 - -对于容器镜像构建,isula-build支持相同的Dockerfile。如果构建环境相同,则多次构建生成的镜像内容和镜像ID相同。 - ---build-static接受k=v形式的键值对选项,当前支持的选项有: - -* build-time:字符串类型。构建静态镜像的固定时间戳,格式为“YYYY-MM-DD HH-MM-SS”。时间戳影响diff层创建修改时间的文件属性。 - - 使用示例如下: - - ```sh - sudo isula-build ctr-img build -f Dockerfile --build-static='build-time=2020-05-23 10:55:33' . - ``` - - 以此方式,同一环境多次构建出来的容器镜像和镜像ID均会保持一致。 - -**\--format** -开始实验特性后该选项可用,默认为OCI镜像格式。可以手动指定镜像格式进行构建,例如,下面分别为构建OCI镜像格式以及Docker镜像格式镜像的命令。 - - ```sh - export ISULABUILD_CLI_EXPERIMENTAL=enabled; sudo isula-build ctr-img build -f Dockerfile --format oci . - ``` - - ```sh - export ISULABUILD_CLI_EXPERIMENTAL=enabled; sudo isula-build ctr-img build -f Dockerfile --format docker . - ``` - -**\--iidfile** - -将构建的镜像ID输出到文件,用法: - -```sh -isula-build ctr-img build --iidfile filename -``` - -例如,将容器镜像ID输出到testfile的参考命令如下: - - ```sh -sudo isula-build ctr-img build -f Dockerfile_arg --iidfile testfile - ``` - - 查看testfile中的容器镜像ID: - - ```sh -$ cat testfile -76cbeed38a8e716e22b68988a76410eaf83327963c3b29ff648296d5cd15ce7b - ``` - -**\-o, --output** - -目前 -o, --output 支持如下形式: - -* `isulad:image:tag`:将构建成功的镜像直接推送到 iSulad。比如:`-o isulad:busybox:latest`。同时需要注意如下约束: - - * isula-build 和 iSulad 必须在同一个节点上 - * tag必须配置 - * isula-build client端需要将构建成功的镜像暂存成 `/var/tmp/isula-build-tmp-%v.tar` 再导入至 iSulad,用户需要保证 `/var/tmp/` 目录有足够磁盘空间 - -* `docker-daemon:image:tag`:将构建成功的镜像直接推送到 Docker daemon。比如:`-o docker-daemon:busybox:latest`。同时需要注意如下约束: - * isula-build 和 docker 必须在同一个节点上 - * tag必须配置 - -* `docker://registry.example.com/repository:tag`:将构建成功的镜像以Docker镜像格式直接推送到远端镜像仓库。比如:`-o docker://localhost:5000/library/busybox:latest`。 - -* `docker-archive:/:image:tag`:将构建成功的镜像以Docker镜像格式保存至本地。比如:`-o docker-archive:/root/image.tar:busybox:latest`。 - -打开实验特性之后,可以启用相应OCI镜像的构建: - -* `oci://registry.example.com/repository:tag`:将构建成功的镜像以OCI镜像格式直接推送到远端镜像仓库(远程镜像仓库须支持OCI镜像格式)。比如:`-o oci://localhost:5000/library/busybox:latest`。 - -* `oci-archive:/:image:tag`:将构建成功的镜像以OCI镜像的格式保存至本地。比如:`-o oci-archive:/root/image.tar:busybox:latest`。 - -除去各个flags之外,build子命令的命令行最后还会接收一个argument,该argument类型是string,意义为context,即该Dockerfile构建环境的上下文。该参数缺省值为isula-build被执行的当前路径。该路径会影响 .dockerignore 和 Dockerfile的ADD/COPY指令 所检索的路径。 - -**\--proxy** - -选择构建时RUN指令启动的容器是否从环境上继承proxy相关环境变量“http_proxy”,“https_proxy”,“ftp_proxy”,“no_proxy”,“HTTP_PROXY”,“HTTPS_PROXY”,“FTP_PROXY”,“NO_PROXY”,默认为true。 - -当用户在Dockerfile配置proxy相关ARG或ENV,将覆盖所继承的环境变量。 - -注意:若client与daemon不在同一个终端运行,所能继承的环境变量为daemon所在终端的环境变量。 - -**\--tag** - -设置镜像构建成功之后,该镜像在本地磁盘存储时的tag。 - -**\--cap-add** - -添加构建过程中RUN指令所需权限,用法: - -```sh -isula-build ctr-img build --cap-add ${CAP} -``` - -使用举例: - -```sh -sudo isula-build ctr-img build --cap-add CAP_SYS_ADMIN --cap-add CAP_SYS_PTRACE -f Dockerfile -``` - -> ![](./public_sys-resources/icon-note.gif) **说明:** -> -> * isula-build最大支持并发构建100个容器镜像。 -> * isula-build支持Dockerfile最大为1MiB。 -> * isula-build支持 .dockerignore 最大为 1MiB。 -> * 用户需保证Dockerfile文件的权限为仅当前用户可读写,避免别的用户进行篡改。 -> * 构建时,RUN指令会启动容器在容器内进行构建,目前 isula-build 仅支持使用主机网络。 -> * isula-build 导出的镜像压缩格式,目前仅支持tar格式。 -> * isula-build 在每一个镜像构建stage完成后做一次提交,而不是每执行 Dockerfile的一行就提交一次。 -> * isula-build 暂不支持构建缓存。 -> * isula-build 仅在构建RUN指令时会启动构建容器。 -> * 目前不支持docker镜像格式的history功能。 -> * isula-build 的stage name支持以数字开头。 -> * isula-build 的stage name最长可为64个字符。 -> * isula-build 暂不支持对单次Dockerfile的构建进行资源限制。如有资源限制需求,可通过对 isula-builder 服务端配置资源限额的方式进行限制。 -> * isula-build 目前不支持Dockerfile里的ADD指令提供的数据来源是远端url。 -> * isula-build 使用docker-archive以及oci-archive类型导出的本地tar包未经压缩。如有需求,用户可以手动进行压缩。 - -#### image: 查看本地持久化构建镜像 - -可通过images命令查看当前本地持久化存储的镜像: - -```sh -$ sudo isula-build ctr-img images ---------------------------------------- ----------- ----------------- ------------------------ ------------ -REPOSITORY TAG IMAGE ID CREATED SIZE ---------------------------------------- ----------- ----------------- ------------------------ ------------ -localhost:5000/library/alpine latest a24bb4013296 2022-01-17 10:02:19 5.85 MB - 39b62a3342ee 2022-01-17 10:01:12 1.45 MB ---------------------------------------- ----------- ----------------- ------------------------ ------------ -``` - -> ![](./public_sys-resources/icon-note.gif) **说明:** -> -> 通过`isula-build ctr-img images`查看的镜像大小与`docker images`的显示上有一定差异。这是因为统计镜像大小时,isula-build是直接计算每层tar包大小之和,而docker是通过解压tar遍历diff目录计算文件大小之和,因此存在统计上的差异。 - -#### import: 导入容器基础镜像 - -可以通过`ctr-img import`指令将rootfs形式的tar文件导入到isula-build中。 - -命令原型如下: - -```sh -isula-build ctr-img import [flags] -``` - -使用举例: - -```sh -$ sudo isula-build ctr-img import busybox.tar mybusybox:latest -Getting image source signatures -Copying blob sha256:7b8667757578df68ec57bfc9fb7754801ec87df7de389a24a26a7bf2ebc04d8d -Copying config sha256:173b3cf612f8e1dc34e78772fcf190559533a3b04743287a32d549e3c7d1c1d1 -Writing manifest to image destination -Storing signatures -Import success with image id: "173b3cf612f8e1dc34e78772fcf190559533a3b04743287a32d549e3c7d1c1d1" -$ sudo isula-build ctr-img images ---------------------------------------- ----------- ----------------- ------------------------ ------------ -REPOSITORY TAG IMAGE ID CREATED SIZE ---------------------------------------- ----------- ----------------- ------------------------ ------------ -mybusybox latest 173b3cf612f8 2022-01-12 16:02:31 1.47 MB ---------------------------------------- ----------- ----------------- ------------------------ ------------ -``` - ->![](./public_sys-resources/icon-note.gif) **说明:** -> -> isula-build 支持导入最大1GiB的容器基础镜像。 - -#### load: 导入层叠镜像 - -层叠镜像指的是通过 docker save 或 isula-build ctr-img save 等指令,将一个构建完成的镜像保存至本地之后,镜像压缩包内是一层一层 layer.tar 的镜像包。可以通过 ctr-img load 指令将它导入至 isula-build。 - -命令原型如下: - -```sh -isula-build ctr-img load [flags] -``` - -目前支持的 flags 为: - -* -i, --input:本地tar包的路径 - -使用举例如下: - -```sh -$ sudo isula-build ctr-img load -i ubuntu.tar -Getting image source signatures -Copying blob sha256:cf612f747e0fbcc1674f88712b7bc1cd8b91cf0be8f9e9771235169f139d507c -Copying blob sha256:f934e33a54a60630267df295a5c232ceb15b2938ebb0476364192b1537449093 -Copying blob sha256:943edb549a8300092a714190dfe633341c0ffb483784c4fdfe884b9019f6a0b4 -Copying blob sha256:e7ebc6e16708285bee3917ae12bf8d172ee0d7684a7830751ab9a1c070e7a125 -Copying blob sha256:bf6751561805be7d07d66f6acb2a33e99cf0cc0a20f5fd5d94a3c7f8ae55c2a1 -Copying blob sha256:c1bd37d01c89de343d68867518b1155cb297d8e03942066ecb44ae8f46b608a3 -Copying blob sha256:a84e57b779297b72428fc7308e63d13b4df99140f78565be92fc9dbe03fc6e69 -Copying blob sha256:14dd68f4c7e23d6a2363c2320747ab88986dfd43ba0489d139eeac3ac75323b2 -Copying blob sha256:a2092d776649ea2301f60265f378a02405539a2a68093b2612792cc65d00d161 -Copying blob sha256:879119e879f682c04d0784c9ae7bc6f421e206b95d20b32ce1cb8a49bfdef202 -Copying blob sha256:e615448af51b848ecec00caeaffd1e30e8bf5cffd464747d159f80e346b7a150 -Copying blob sha256:f610bd1e9ac6aa9326d61713d552eeefef47d2bd49fc16140aa9bf3db38c30a4 -Copying blob sha256:bfe0a1336d031bf5ff3ce381e354be7b2bf310574cc0cd1949ad94dda020cd27 -Copying blob sha256:f0f15db85788c1260c6aa8ad225823f45c89700781c4c793361ac5fa58d204c7 -Copying config sha256:c07ddb44daa97e9e8d2d68316b296cc9343ab5f3d2babc5e6e03b80cd580478e -Writing manifest to image destination -Storing signatures -Loaded image as c07ddb44daa97e9e8d2d68316b296cc9343ab5f3d2babc5e6e03b80cd580478e -``` - ->![](./public_sys-resources/icon-note.gif) **说明:** -> -> * isula-build 支持导入最大50G的容器层叠镜像。 -> * isula-build 会自动识别容器层叠镜像的格式并进行导入。 - -#### rm: 删除本地持久化镜像 - -可通过rm命令删除当前本地持久化存储的镜像。命令原型为: - -```sh -isula-build ctr-img rm IMAGE [IMAGE...] [FLAGS] -``` - -目前支持的 flags 为: - -* -a, --all:删除所有本地持久化存储的镜像。 -* -p, --prune:删除所有没有tag的本地持久化存储的镜像。 - -使用示例如下: - -```sh -$ sudo isula-build ctr-img rm -p -Deleted: sha256:78731c1dde25361f539555edaf8f0b24132085b7cab6ecb90de63d72fa00c01d -Deleted: sha256:eeba1bfe9fca569a894d525ed291bdaef389d28a88c288914c1a9db7261ad12c -``` - -#### save: 导出层叠镜像 - -可通过save命令导出层叠镜像到本地磁盘。命令原型如下: - -```sh -isula-build ctr-img save [REPOSITORY:TAG]|imageID -o xx.tar -``` - -目前支持的 flags 为: - -* -f, --format:导出层叠镜像的镜像格式:oci | docker(需开启实验特性选项) -* -o, --output:本地tar包路径 - -以下示例通过 `image/tag` 的形式将镜像进行导出: - -```sh -$ sudo isula-build ctr-img save busybox:latest -o busybox.tar -Getting image source signatures -Copying blob sha256:50644c29ef5a27c9a40c393a73ece2479de78325cae7d762ef3cdc19bf42dd0a -Copying blob sha256:824082a6864774d5527bda0d3c7ebd5ddc349daadf2aa8f5f305b7a2e439806f -Copying blob sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef -Copying config sha256:21c3e96ac411242a0e876af269c0cbe9d071626bdfb7cc79bfa2ddb9f7a82db6 -Writing manifest to image destination -Storing signatures -Save success with image: busybox:latest -``` - -以下示例通过 `ImageID` 的形式将镜像进行导出: - -```sh -$ sudo isula-build ctr-img save 21c3e96ac411 -o busybox.tar -Getting image source signatures -Copying blob sha256:50644c29ef5a27c9a40c393a73ece2479de78325cae7d762ef3cdc19bf42dd0a -Copying blob sha256:824082a6864774d5527bda0d3c7ebd5ddc349daadf2aa8f5f305b7a2e439806f -Copying blob sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef -Copying config sha256:21c3e96ac411242a0e876af269c0cbe9d071626bdfb7cc79bfa2ddb9f7a82db6 -Writing manifest to image destination -Storing signatures -Save success with image: 21c3e96ac411 -``` - -以下示例导出多个镜像到同一个tar包: - -```sh -$ sudo isula-build ctr-img save busybox:latest nginx:latest -o all.tar -Getting image source signatures -Copying blob sha256:eb78099fbf7fdc70c65f286f4edc6659fcda510b3d1cfe1caa6452cc671427bf -Copying blob sha256:29f11c413898c5aad8ed89ad5446e89e439e8cfa217cbb404ef2dbd6e1e8d6a5 -Copying blob sha256:af5bd3938f60ece203cd76358d8bde91968e56491daf3030f6415f103de26820 -Copying config sha256:b8efb18f159bd948486f18bd8940b56fd2298b438229f5bd2bcf4cedcf037448 -Writing manifest to image destination -Storing signatures -Getting image source signatures -Copying blob sha256:e2d6930974a28887b15367769d9666116027c411b7e6c4025f7c850df1e45038 -Copying config sha256:a33de3c85292c9e65681c2e19b8298d12087749b71a504a23c576090891eedd6 -Writing manifest to image destination -Storing signatures -Save success with image: [busybox:latest nginx:latest] -``` - ->![](./public_sys-resources/icon-note.gif) **说明:** -> -> * save 导出的镜像默认格式为未压缩的tar格式,如有需求,用户可以再save之后手动压缩。 -> * 在使用镜像名导出镜像时,需要给出完整的镜像名格式:REPOSITORY:TAG。 - -#### tag: 给本地持久化镜像打标签 - -可使用tag命令给本地持久化的容器镜像打tag。命令原型如下: - -```sh -isula-build ctr-img tag / busybox:latest -``` - -使用举例: - -```sh -$ sudo isula-build ctr-img images ---------------------------------------- ----------- ----------------- -------------------------- ------------ -REPOSITORY TAG IMAGE ID CREATED SIZE ---------------------------------------- ----------- ----------------- -------------------------- ------------ -alpine latest a24bb4013296 2020-05-29 21:19:46 5.85 MB ---------------------------------------- ----------- ----------------- -------------------------- ------------ -$ sudo isula-build ctr-img tag a24bb4013296 alpine:v1 -$ sudo isula-build ctr-img images ---------------------------------------- ----------- ----------------- ------------------------ ------------ -REPOSITORY TAG IMAGE ID CREATED SIZE ---------------------------------------- ----------- ----------------- ------------------------ ------------ -alpine latest a24bb4013296 2020-05-29 21:19:46 5.85 MB -alpine v1 a24bb4013296 2020-05-29 21:19:46 5.85 MB ---------------------------------------- ----------- ----------------- ------------------------ ------------ -``` - -#### pull: 拉取镜像到本地 - -可通过pull命令拉取远程镜像仓库中的镜像到本地。命令原型如下: - -```sh -isula-build ctr-img pull REPOSITORY[:TAG] -``` - -使用示例: - -```sh -$ sudo isula-build ctr-img pull example-registry/library/alpine:latest -Getting image source signatures -Copying blob sha256:8f52abd3da461b2c0c11fda7a1b53413f1a92320eb96525ddf92c0b5cde781ad -Copying config sha256:e4db68de4ff27c2adfea0c54bbb73a61a42f5b667c326de4d7d5b19ab71c6a3b -Writing manifest to image destination -Storing signatures -Pull success with image: example-registry/library/alpine:latest -``` - -#### push: 将本地镜像推送到远程仓库 - -可通过push命令将本地镜像推送到远程仓库。命令原型如下: - -```sh -isula-build ctr-img push REPOSITORY[:TAG] -``` - -目前支持的 flags 为: - -* -f, --format:推送的镜像格式:oci|docker(需开启实验特性选项) - -使用示例: - -```sh -$ sudo isula-build ctr-img push example-registry/library/mybusybox:latest -Getting image source signatures -Copying blob sha256:d2421964bad195c959ba147ad21626ccddc73a4f2638664ad1c07bd9df48a675 -Copying config sha256:f0b02e9d092d905d0d87a8455a1ae3e9bb47b4aa3dc125125ca5cd10d6441c9f -Writing manifest to image destination -Storing signatures -Push success with image: example-registry/library/mybusybox:latest -``` - ->![](./public_sys-resources/icon-note.gif) **说明:** -> -> 推送镜像时,需要先登录对应的镜像仓库 - -### info: 查看运行环境与系统信息 - -可以通过“isula-build info”指令查看 isula-build 目前的运行环境与系统信息。命令原型如下: - -```sh -isula-build info [flags] -``` - -支持如下Flags: - -* -H, --human-readable 布尔值,以常用内存表示格式打印内存信息,使用1000次幂 -* -V, --verbose 布尔值,显示运行时内存占用信息 - -使用示例: - -```sh -$ sudo isula-build info -HV - General: - MemTotal: 7.63 GB - MemFree: 757 MB - SwapTotal: 8.3 GB - SwapFree: 8.25 GB - OCI Runtime: runc - DataRoot: /var/lib/isula-build/ - RunRoot: /var/run/isula-build/ - Builders: 0 - Goroutines: 12 - Store: - Storage Driver: overlay - Backing Filesystem: extfs - Registry: - Search Registries: - oepkgs.net - Insecure Registries: - localhost:5000 - oepkgs.net - Runtime: - MemSys: 68.4 MB - HeapSys: 63.3 MB - HeapAlloc: 7.41 MB - MemHeapInUse: 8.98 MB - MemHeapIdle: 54.4 MB - MemHeapReleased: 52.1 MB -``` - -### login: 登录远端镜像仓库 - -用户可以运行 login 命令来登录远程镜像仓库。命令原型如下: - -```sh - isula-build login SERVER [FLAGS] -``` - -目前支持的flag有: - -```Conf - Flags: - -p, --password-stdin Read password from stdin - -u, --username string Username to access registry -``` - -通过stdin输入密码。以下示例通过通过管道将creds.txt里的密码传给isula-build的stdin进行输入: - -```sh - $ cat creds.txt | sudo isula-build login -u cooper -p mydockerhub.io - Login Succeeded -``` - -通过交互式输入密码: - -```sh - $ sudo isula-build login mydockerhub.io -u cooper - Password: - Login Succeeded -``` - -### logout: 退出远端镜像仓库 - -用户可以运行 logout 命令来登出远程镜像仓库。命令原型如下: - -```sh -isula-build logout [SERVER] [FLAGS] -``` - -目前支持的flag有: - -```sh - Flags: - -a, --all Logout all registries -``` - -使用示例如下: - -```sh -$ sudo isula-build logout -a - Removed authentications -``` - -### version: 版本查询 - -可通过version命令查看当前版本信息: - -```sh -$ sudo isula-build version -Client: - Version: 0.9.6-4 - Go Version: go1.15.7 - Git Commit: 83274e0 - Built: Wed Jan 12 15:32:55 2022 - OS/Arch: linux/amd64 - -Server: - Version: 0.9.6-4 - Go Version: go1.15.7 - Git Commit: 83274e0 - Built: Wed Jan 12 15:32:55 2022 - OS/Arch: linux/amd64 -``` - -### manifest: manifest列表管理 - -manifest列表包含不同系统架构对应的镜像信息,通过使用manifest列表,用户可以在不同的架构中使用相同的manifest(例如openeuler:latest)获取对应架构的镜像,manifest包含create、annotate、inspect和push子命令。 -> ![](./public_sys-resources/icon-note.gif) **说明:** -> -> manifest为实验特性,使用时需开启客户端和服务端的实验选项,方式详见客户端总体说明和配置服务章节。 - -#### create: manifest列表创建 - -manifest的子命令create用于创建manifest列表,命令原型为: - -```sh -isula-build manifest create MANIFEST_LIST MANIFEST [MANIFEST...] -``` - -用户可以指定manifest列表的名称以及需要加入到列表中的远程镜像,若不指定任何远程镜像,则会创建一个空的manifest列表。 - -使用示例如下: - -```sh -sudo isula-build manifest create openeuler localhost:5000/openeuler_x86:latest localhost:5000/openeuler_aarch64:latest -``` - -#### annotate: manifest列表更新 - -manifest的子命令annotate用于更新manifest列表,命令原型为: - -```sh -isula-build manifest annotate MANIFEST_LIST MANIFEST [flags] -``` - -用户可以指定需要更新的manifest列表以及其中的镜像,通过flags指定需要更新的选项,此命令也可用于添加新的镜像到列表中。 - -其中annotate包含如下flags: - -* --arch: string,重写镜像适用架构 -* --os: string,重写镜像适用系统 -* --os-features: string列表,指定镜像需要的OS特性,很少使用 -* --variant: string,指定列表中记录镜像的变量 - -使用示例如下: - -```sh -sudo isula-build manifest annotate --os linux --arch arm64 openeuler:latest localhost:5000/openeuler_aarch64:latest -``` - -#### inspect: manifest列表查询 - -manifest子命令inspect用于查询manifest列表信息,命令原型为: - -```sh -isula-build manifest inspect MANIFEST_LIST -``` - -使用示例如下: - -```sh -$ sudo isula-build manifest inspect openeuler:latest -{ - "schemaVersion": 2, - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "manifests": [ - { - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "size": 527, - "digest": "sha256:bf510723d2cd2d4e3f5ce7e93bf1e52c8fd76831995ac3bd3f90ecc866643aff", - "platform": { - "architecture": "amd64", - "os": "linux" - } - }, - { - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "size": 527, - "digest": "sha256:f814888b4bb6149bd39ba8375a1932fb15071b4dbffc7f76c7b602b06abbb820", - "platform": { - "architecture": "arm64", - "os": "linux" - } - } - ] -} -``` - -#### push: 将manifest列表推送到远程仓库 - -manifest子命令push用于将manifest列表推送到远程仓库,命令原型为: - -```sh -isula-build manifest push MANIFEST_LIST DESTINATION -``` - -使用示例如下: - -```sh -sudo isula-build manifest push openeuler:latest localhost:5000/openeuler:latest -``` - -## 直接集成容器引擎 - -isula-build可以与iSulad和docker集成,将构建好的容器镜像导入到容器引擎的本地存储中。 - -### 与iSulad集成 - -支持将构建成功的镜像直接导出到iSulad。 - -命令行举例: - -```sh -sudo isula-build ctr-img build -f Dockerfile -o isulad:busybox:2.0 -``` - -通过在-o参数中指定iSulad,将构建好的容器镜像导出到iSulad,可以通过isula images查询: - -```sh -$ sudo isula images -isula images -REPOSITORY TAG IMAGE ID CREATED SIZE -busybox 2.0 2d414a5cad6d 2020-08-01 06:41:36 5.577 MB -``` - -> ![](./public_sys-resources/icon-note.gif) **说明:** -> -> * 要求isula-build和iSulad在同一节点。 -> * 直接导出镜像到iSulad时,isula-build client端需要将构建成功的镜像暂存成 `/var/lib/isula-build/tmp/[buildid]/isula-build-tmp-%v.tar` 再导入至 iSulad,用户需要保证 /var/lib/isula-build/tmp/ 目录有足够磁盘空间;同时如果在导出过程中 isula-build client进程被KILL或Ctrl+C终止,需要依赖用户手动清理 `/var/lib/isula-build/tmp/[buildid]/isula-build-tmp-%v.tar` 文件。 - -### 与Docker集成 - -支持将构建成功的镜像直接导出到Docker daemon。 - -命令行举例: - -```sh -sudo isula-build ctr-img build -f Dockerfile -o docker-daemon:busybox:2.0 -``` - -通过在-o参数中指定docker-daemon,将构建好的容器镜像导出到docker, 可以通过docker images查询。 - -```sh -$ sudo docker images -REPOSITORY TAG IMAGE ID CREATED SIZE -busybox 2.0 2d414a5cad6d 2 months ago 5.22MB -``` - -> ![](./public_sys-resources/icon-note.gif) **说明:** -> -> 要求isula-build和Docker在同一节点。 - -## 使用注意事项 - -本章节主要介绍在使用isula-build构建镜像时相关的约束和限制,以及与docker build的差异。 - -### 约束和限制 - -1. 当导出镜像到[`iSulad`](https://gitee.com/openeuler/iSulad/blob/master/README.md/)时,镜像必须指明tag。 -2. 因为isula-builder运行`RUN`指令时,需要调用系统中的oci 运行时(如`runc`),用户需要保证该运行时的安全性,不受篡改。 -3. `DataRoot`不能设置在内存盘上(tmpfs)。 -4. `Overlay2`是目前isula-builder唯一支持的存储驱动。 -5. `Docker`镜像是目前唯一支持的镜像格式,未来即将支持`oci`格式镜像。 -6. `Dockerfile`文件权限强烈建议设置为**0600**以防止恶意篡改。 -7. `RUN`命令中目前只支持主机侧网络(host network)。 -8. 当导出镜像到本地tar包时,目前只支持保存为`tar`格式。 -9. 当使用`import`功能导入基础镜像时,最大支持**1G**。 - -### 与“docker build”差异 - -`isula-build`兼容[Docker镜像格式规范](https://docs.docker.com/engine/reference/builder/),但仍然和`docker build`存在一些差异: - -1. 支持镜像压缩,即对每个`stage`进行提交而非每一行。 -2. 目前不支持构建缓存。 -3. 只有`RUN`指令会运行容器进行构建。 -4. 目前不支持查询镜像构建历史。 -5. `Stage`名称可以用数字开头。 -6. `Stage`名称最大长度为64。 -7. `ADD`命令不支持远端URL格式。 -8. 暂不支持对单次构建进行资源限额,可采取对isula-builder配置资源限额的方式进行限制。 -9. 统计镜像大小时,isula-build是直接计算每层tar包大小之和,而docker是通过解压tar遍历diff目录计算文件大小之和,因此通过`isula-build ctr-img images`查看的镜像大小与`docker images`的显示上有一定差异。 -10. 操作时的镜像名称需要明确,格式为IMAGE_NAME:IMAGE_TAG。例如 busybox:latest, 其中latest不可省略。 - -## 附录 - -### 命令行参数说明 - -**表1** ctr-img build 命令参数列表 - -| **命令** | **参数** | **说明** | -| ------------- | -------------- | ------------------------------------------------------------ | -| ctr-img build | --build-arg | string列表,构建过程中需要用到的变量 | -| | --build-static | KV值,构建二进制一致性。目前包含如下K值:- build-time:string,使用固定时间戳来构建容器镜像;时间戳格式为“YYYY-MM-DD HH-MM-SS” | -| | -f, --filename | string,Dockerfile的路径,不指定则是使用当前路径的Dockerfile文件 | -| | --format | string,设置构建镜像的镜像格式:oci|docker(需开启实验特性选项)| -| | --iidfile | string,输出 image ID 到本地文件 | -| | -o, --output | string,镜像导出的方式和路径 | -| | --proxy | 布尔值,继承主机侧环境的proxy环境变量(默认为true) | -| | --tag | string,给构建的镜像添加tag | -| | --cap-add | string列表,构建过程中RUN指令所需要的权限 | - -**表2** ctr-img load 命令参数列表 - -| **命令** | **参数** | **说明** | -| ------------ | ----------- | --------------------------------- | -| ctr-img load | -i, --input | string,需要导入的本地tar包的路径 | - -**表3** ctr-img push 命令参数列表 - -| **命令** | **参数** | **说明** | -| ------------ | ----------- | --------------------------------- | -| ctr-img push | -f, --format | string,推送的镜像格式:oci|docker(需开启实验特性选项)| - -**表4** ctr-img rm 命令参数列表 - -| **命令** | **参数** | **说明** | -| ---------- | ----------- | --------------------------------------------- | -| ctr-img rm | -a, --all | 布尔值,删除所有本地持久化存储的镜像 | -| | -p, --prune | 布尔值,删除所有没有tag的本地持久化存储的镜像 | - -**表5** ctr-img save 命令参数列表 - -| **命令** | **参数** | **说明** | -| ------------ | ------------ | ---------------------------------- | -| ctr-img save | -o, --output | string,镜像导出后在本地的存储路径 | -| | -f, --format | string,导出层叠镜像的镜像格式:oci|docker(需开启实验特性选项)| - -**表6** login 命令参数列表 - -| **命令** | **参数** | **说明** | -| -------- | -------------------- | ------------------------------------------------------- | -| login | -p, --password-stdin | 布尔值,是否通过stdin读入密码;或采用交互式界面输入密码 | -| | -u, --username | string,登录镜像仓库所使用的用户名 | - -**表7** logout 命令参数列表 - -| **命令** | **参数** | **说明** | -| -------- | --------- | ------------------------------------ | -| logout | -a, --all | 布尔值,是否登出所有已登录的镜像仓库 | - -**表8** manifest annotate命令参数列表 - -| **命令** | **说明** | **参数** | -| ----------------- | ------------- | ------------------------------------------ | -| manifest annotate | --arch | string,重写镜像适用架构 | -| | --os | string,重写镜像适用系统 | -| | --os-features | string列表,指定镜像需要的OS特性,很少使用 | -| | --variant | string,指定列表中记录镜像的变量 | - -### 通信矩阵 - -isula-build两个组件进程之间通过unix socket套接字文件进行通信,无端口通信。 - -### 文件与权限 - -* isula-build 所有的操作均需要使用 root 权限。如需使用非特权用户操作,则需要配置--group参数 - -* isula-build 运行涉及文件权限如下表所示: - -| **文件路径** | **文件/文件夹权限** | **说明** | -| ------------------------------------------- | ------------------- | ------------------------------------------------------------ | -| /usr/bin/isula-build | 550 | 命令行工具二进制文件。 | -| /usr/bin/isula-builder | 550 | 服务端isula-builder进程二进制文件。 | -| /usr/lib/systemd/system/isula-build.service | 640 | systemd配置文件,用于管理isula-build服务。 | -| /etc/isula-build | 650 | isula-builder 配置文件根目录 | -| /etc/isula-build/configuration.toml | 600 | isula-builder 总配置文件,包含设置 isula-builder 日志级别、持久化目录和运行时目录、OCI runtime等。 | -| /etc/isula-build/policy.json | 600 | 签名验证策略文件的语法文件。 | -| /etc/isula-build/registries.toml | 600 | 针对各个镜像仓库的配置文件,含可用的镜像仓库列表、镜像仓库黑名单。 | -| /etc/isula-build/storage.toml | 600 | 本地持久化存储的配置文件,包含所使用的存储驱动的配置。 | -| /etc/isula-build/isula-build.pub | 400 | 非对称加密公钥文件 | -| /var/run/isula_build.sock | 660 | 服务端isula-builder的本地套接字。 | -| /var/lib/isula-build | 700 | 本地持久化目录。 | -| /var/run/isula-build | 700 | 本地运行时目录。 | -| /var/lib/isula-build/tmp/[buildid]/isula-build-tmp-*.tar | 644 | 镜像导出至iSulad时的本地暂存目录。 | diff --git "a/docs/zh/docs/Container/isula-build\351\231\204\345\275\225.md" "b/docs/zh/docs/Container/isula-build\351\231\204\345\275\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..35b0fbcc9e4ad33ac420f0706a2c35acdaefa780 --- /dev/null +++ "b/docs/zh/docs/Container/isula-build\351\231\204\345\275\225.md" @@ -0,0 +1,91 @@ +# 附录 + +## 命令行参数说明 + +**表1** ctr-img build 命令参数列表 + +| **命令** | **参数** | **说明** | +| ------------- | -------------- | ------------------------------------------------------------ | +| ctr-img build | --build-arg | string列表,构建过程中需要用到的变量 | +| | --build-static | KV值,构建二进制一致性。目前包含如下K值:- build-time:string,使用固定时间戳来构建容器镜像;时间戳格式为“YYYY-MM-DD HH-MM-SS” | +| | -f, --filename | string,Dockerfile的路径,不指定则是使用当前路径的Dockerfile文件 | +| | --format | string,设置构建镜像的镜像格式:oci|docker(需开启实验特性选项)| +| | --iidfile | string,输出 image ID 到本地文件 | +| | -o, --output | string,镜像导出的方式和路径 | +| | --proxy | 布尔值,继承主机侧环境的proxy环境变量(默认为true) | +| | --tag | string,给构建的镜像添加tag | +| | --cap-add | string列表,构建过程中RUN指令所需要的权限 | + +**表2** ctr-img load 命令参数列表 + +| **命令** | **参数** | **说明** | +| ------------ | ----------- | --------------------------------- | +| ctr-img load | -i, --input | string,需要导入的本地tar包的路径 | + +**表3** ctr-img push 命令参数列表 + +| **命令** | **参数** | **说明** | +| ------------ | ----------- | --------------------------------- | +| ctr-img push | -f, --format | string,推送的镜像格式:oci|docker(需开启实验特性选项)| + +**表4** ctr-img rm 命令参数列表 + +| **命令** | **参数** | **说明** | +| ---------- | ----------- | --------------------------------------------- | +| ctr-img rm | -a, --all | 布尔值,删除所有本地持久化存储的镜像 | +| | -p, --prune | 布尔值,删除所有没有tag的本地持久化存储的镜像 | + +**表5** ctr-img save 命令参数列表 + +| **命令** | **参数** | **说明** | +| ------------ | ------------ | ---------------------------------- | +| ctr-img save | -o, --output | string,镜像导出后在本地的存储路径 | +| | -f, --format | string,导出层叠镜像的镜像格式:oci|docker(需开启实验特性选项)| + +**表6** login 命令参数列表 + +| **命令** | **参数** | **说明** | +| -------- | -------------------- | ------------------------------------------------------- | +| login | -p, --password-stdin | 布尔值,是否通过stdin读入密码;或采用交互式界面输入密码 | +| | -u, --username | string,登录镜像仓库所使用的用户名 | + +**表7** logout 命令参数列表 + +| **命令** | **参数** | **说明** | +| -------- | --------- | ------------------------------------ | +| logout | -a, --all | 布尔值,是否登出所有已登录的镜像仓库 | + +**表8** manifest annotate命令参数列表 + +| **命令** | **说明** | **参数** | +| ----------------- | ------------- | ------------------------------------------ | +| manifest annotate | --arch | string,重写镜像适用架构 | +| | --os | string,重写镜像适用系统 | +| | --os-features | string列表,指定镜像需要的OS特性,很少使用 | +| | --variant | string,指定列表中记录镜像的变量 | + +## 通信矩阵 + +isula-build两个组件进程之间通过unix socket套接字文件进行通信,无端口通信。 + +## 文件与权限 + +* isula-build 所有的操作均需要使用 root 权限。如需使用非特权用户操作,则需要配置--group参数 + +* isula-build 运行涉及文件权限如下表所示: + +| **文件路径** | **文件/文件夹权限** | **说明** | +| ------------------------------------------- | ------------------- | ------------------------------------------------------------ | +| /usr/bin/isula-build | 550 | 命令行工具二进制文件。 | +| /usr/bin/isula-builder | 550 | 服务端isula-builder进程二进制文件。 | +| /usr/lib/systemd/system/isula-build.service | 640 | systemd配置文件,用于管理isula-build服务。 | +| /etc/isula-build | 650 | isula-builder 配置文件根目录 | +| /etc/isula-build/configuration.toml | 600 | isula-builder 总配置文件,包含设置 isula-builder 日志级别、持久化目录和运行时目录、OCI runtime等。 | +| /etc/isula-build/policy.json | 600 | 签名验证策略文件的语法文件。 | +| /etc/isula-build/registries.toml | 600 | 针对各个镜像仓库的配置文件,含可用的镜像仓库列表、镜像仓库黑名单。 | +| /etc/isula-build/storage.toml | 600 | 本地持久化存储的配置文件,包含所使用的存储驱动的配置。 | +| /etc/isula-build/isula-build.pub | 400 | 非对称加密公钥文件 | +| /var/run/isula_build.sock | 660 | 服务端isula-builder的本地套接字。 | +| /var/lib/isula-build | 700 | 本地持久化目录。 | +| /var/run/isula-build | 700 | 本地运行时目录。 | +| /var/lib/isula-build/tmp/[buildid]/isula-build-tmp-*.tar | 644 | 镜像导出至iSulad时的本地暂存目录。 | diff --git "a/docs/zh/docs/Container/isula\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" "b/docs/zh/docs/Container/isula\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..b41f205b7a5dc5bb145da44a387ec15742a39480 --- /dev/null +++ "b/docs/zh/docs/Container/isula\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" @@ -0,0 +1,22 @@ +# 常见问题与解决方法 + +## **问题1:修改`iSulad`默认运行时为`lxc`,启动容器报错:Failed to initialize engine or runtime** + +原因:`iSulad`默认运行时为`runc`,设置默认运行时为`lxc`时缺少依赖。 + +解决方法:若需修改`iSulad`默认运行时为`lxc`,需要安装`lcr`、`lxc`软件包依赖,且配置`iSulad`配置文件中`runtime`为`lcr` +或者启动容器时指定`--runtime lcr`。启动容器后不应该随意卸载`lcr`、`lxc`软件包,否则可能会导致删除容器时的资源残留。 + +## **问题2:使用`iSulad` `CRI V1`接口,报错:rpc error: code = Unimplemented desc =** + +原因:`iSulad`同时支持`CRI V1alpha2`和`CRI V1`接口,默认使用`CRI V1alpha2`,若使用`CRI V1`,需要开启相应的配置。 + +解决方法:在`iSulad`配置文件`/etc/isulad/daemon.json`中开启`CRI V1`的配置。 + +```json +{ + "enable-cri-v1": true, +} +``` + +若使用源码编译`iSulad`,还需在编译时增加`cmake`编译选项`-D ENABLE_CRI_API_V1=ON`。 diff --git "a/docs/zh/docs/Embedded/UniProton/UniProton\345\212\237\350\203\275\350\256\276\350\256\241.md" "b/docs/zh/docs/Embedded/UniProton/UniProton\345\212\237\350\203\275\350\256\276\350\256\241.md" index aec2ada3f282c56901a85bc86bb5e2296655a240..f1f9eb88a762dfab96986edca0c74390705f075f 100644 --- "a/docs/zh/docs/Embedded/UniProton/UniProton\345\212\237\350\203\275\350\256\276\350\256\241.md" +++ "b/docs/zh/docs/Embedded/UniProton/UniProton\345\212\237\350\203\275\350\256\276\350\256\241.md" @@ -98,17 +98,17 @@ UniProton创建队列时,根据用户传入队列长度和消息单元大小 为避免for循环逐级判断空闲链表是否为空,定义一个32位的BitMap全局变量。若索引n的空闲链表非空,则BitMap的下标为n的位置1,否则清0。BitMap的下标为31的位在初始化时直接置1。于是查找从n+1开始的第一个非空闲链表,可以首先将BitMap复本的0到n位清零,然后获取复本的最左边的1的下标,若不等于31,即为第一个空闲链表非空的数组索引。 -所有的空闲块都以双向链表形式,串接在空闲链表中。若从链表中获取的第一个空闲块比较大,即分割出一个usSize的内存块后,剩下的空间至少可做一次最小分配。则将剩余的空闲块调整到对应的空闲链表中。 +所有的空闲块都以双向链表的形式,串接在空闲链表中。若从链表中获取的第一个空闲块比较大,即分割出一个uwSize的内存块后,剩下的空间至少可做一次最小分配,则将剩余的空闲块调整到对应的空闲链表中。 ![](./figures/MemoryApplication.png) -内存控制头中记录有空闲内存块的大小(包括控制头本身)。内存控制头中有一个复用成员,位于最首部时。当内存块空闲时,作为指向后一个空闲内存块的指针;当内存块占用时,存放魔术字,表示该内存块非空闲。为避免魔术字与指针冲突(与地址值相同),高低4位均为0xf。因为已分配的内存块起始地址需按4字节对齐,所以不存在冲突。 +内存控制头中记录空闲内存块的大小(包括控制头本身)。内存控制头中有一个复用成员,位于最首部。当内存块空闲时,作为指向后一个空闲内存块的指针;当内存块占用时,存放魔术字,表示该内存块非空闲。为避免魔术字与指针冲突(与地址值相同),高低4位均为0xf。因为已分配的内存块起始地址需按4字节对齐,所以不存在冲突。 #### 内存释放 当释放内存时,需要将前后相邻的空闲块进行合并。首先,通过判断控制头中的魔术字,确认地址参数(pAddr)的合法性。通过首地址加偏移值的方式,得到后邻的内存块控制头的起始地址。若后邻内存块是空闲的,则将后邻内存块从所属空闲链表中删除,调整当前内存块的大小。 -为了使内存释放时能迅速找到前邻的内存块控制头,及判断前邻的内存块是否空闲。内存控制头中增加一个成员,标记前邻的内存块是否空闲。可在内存申请的时,将后邻的该标记设置为占用态(若空闲内存块被分割成两块,前一块为空闲,将当前内存块的该标记设置为空闲态);在内存释放时,将后邻的该标记设置为空闲态。释放当前内存时,若前邻的内存块标记为使用,则不需要合并前邻的内存块;若前邻的内存块标记为空闲,则需要进行合并。若某个内存块为空闲时,则将其后邻控制块的标记设为到本控制块的距离值。 +为了使内存释放时能迅速找到前邻的内存块控制头,及判断前邻的内存块是否空闲。内存控制头中增加一个成员,标记前邻的内存块是否空闲。可在内存申请时,将后邻的该标记设置为占用态(若空闲内存块被分割成两块,前一块为空闲,将当前内存块的该标记设置为空闲态);在内存释放时,将后邻的该标记设置为空闲态。释放当前内存时,若前邻的内存块标记为使用,则不需要合并前邻的内存块;若前邻的内存块标记为空闲,则需要进行合并。若某个内存块为空闲时,则将其后邻控制块的标记设为到本控制块的距离值。 ![](./figures/MemoryRelease.png) @@ -196,4 +196,4 @@ UniProton提供shell命令行,它能够以命令行交互的方式访问操作 | SHELLCMD_ENTRY | 静态注册命令 | | osCmdReg | 动态注册命令 | -通常静态注册命令方式一般用于注册系统常用命令,动态注册命令方式一般用于注册用户命令。静态注册命令有5个入参,动态注册命令有4个入参。下面除去第一个入参是静态注册独有的,剩余的四个入参两个注册命令是一致的。接口详细信息可以查看[UniProton接口说明](./UniProton接口说明.md) \ No newline at end of file +通常静态注册命令方式一般用于注册系统常用命令,动态注册命令方式一般用于注册用户命令。静态注册命令有5个入参,动态注册命令有4个入参。下面除去第一个入参是静态注册独有的,剩余的四个入参两个注册命令是一致的。接口详细信息可以查看[UniProton接口说明](./UniProton接口说明.md) diff --git "a/docs/zh/docs/GCC/GCC14\345\211\257\347\211\210\346\234\254\347\274\226\350\257\221\345\267\245\345\205\267\351\223\276\347\224\250\346\210\267\346\214\207\345\215\227.md" "b/docs/zh/docs/GCC/GCC14\345\211\257\347\211\210\346\234\254\347\274\226\350\257\221\345\267\245\345\205\267\351\223\276\347\224\250\346\210\267\346\214\207\345\215\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..dd81563b57ab4baa26a071012e378438eab6f0b4 --- /dev/null +++ "b/docs/zh/docs/GCC/GCC14\345\211\257\347\211\210\346\234\254\347\274\226\350\257\221\345\267\245\345\205\267\351\223\276\347\224\250\346\210\267\346\214\207\345\215\227.md" @@ -0,0 +1,133 @@ +# 背景介绍 + +## 简介 + +为确保操作系统的稳健性,基础软件的选型策略通常倾向于采用经过时间验证、相对稳定的版本,而非最新发布版本。这一策略旨在避免版本更迭带来的潜在不稳定因素,确保在整个长期支持(LTS)周期内,系统版本保持相对稳定。因此,当前 openEuler 在 24.03 LTS 版本整个生命周期都是选择使用 GCC 12.3.1 作为基线进行开发。 + +这样的选择会带来如下问题。首先,许多的硬件特性需要基础 GCC 工具链的支持,选择非最新版本的 GCC 会导致新特性无法及时在新发布的操作系统上使能。另外,某些用户倾向使用最新版本的编译器使能最新特性,这些特性相较于低版本编译器会带来部分性能提升。 + +因此,为了使能多样算例新特性,满足不同用户对不同硬件特性支持的需求,在 openEuler 24.09 版本推出 openEuler GCC Toolset 工具链,这是一个专为 openEuler 系统设计的 GCC 多版本编译工具链,该工具链提供一个高于系统主 GCC 版本的副版本 GCC 编译工具链,为用户提供了更加灵活且高效的编译环境选择。通过使用 openEuler GCC Toolset 14 多版本编译工具链,用户可以轻松地在不同版本的 GCC 之间进行切换,以便充分利用新硬件特性,同时享受到 GCC 最新优化所带来的性能提升。 + + +## 方案设计 + +### 编译工具链功能介绍 + +GCC 编译工具链是一套由 GNU 开发和维护的开源编译器集合,它是用于将高级语言代码转换为机器语言的工具集,GCC 编译工具链不仅包括GCC编译器本身,还包含一系列辅助工具和库,这些组件共同构成了一个完整的编译环境。 + +1. GCC 编译器(gcc/g++/gfrotran 等): +* 作用:GCC 编译器是工具链的核心,负责完成预处理和编译过程,将源代码转换成汇编代码或中间表示。对于 C++ 代码,g++ 是 GCC 的 C++ 编译器前端,除了完成编译工作外,还会自动链接 C++ 标准库。 + +2. Binutils 工具集: +* 包含工具:链接器(ld)、汇编器(as)、目标文件格式查看器(readelf)、符号查看器(nm)、目标文件格式转换工具(objcopy)、反汇编工具(objdump)、尺寸查看工具(size)等。 +* 作用:这些工具在编译过程中起辅助作用,如将汇编代码转换成机器码(汇编器)、将多个目标文件链接成可执行文件(链接器)、查看目标文件或可执行文件的信息(readelf、nm、objdump)等。 + +3. glibc 库: +* 作用: glibc 是 GNU C Library 的缩写,是 GNU 组织为 GNU 系统以及 Linux 系统编写的 C 语言标准库。它包含了 C 语言中常用的标准函数,如 printf、malloc 等,是编译 C 语言程序时必不可少的部分。 + +4. 其他辅助工具: + +* 调试器(gdb):用于调试可执行文件,帮助开发者定位和解决程序中的错误。 +* 性能分析工具(gprof):用于分析程序的性能,帮助开发者优化代码。 + +### 工具链选型 +在编译过程中,工具链中的软件组件对编译结果具有直接影响。具体而言,GCC、binutils 以及 glibc是其核心要素。glibc 作为 C 语言标准库,其选型通常与操作系统内核版本紧密绑定,不轻易进行更改。本工具链仅包含 GCC 和 binutils 两款软件来满足副版本编译需求。 + +当前最新的 GCC release 版本为 gcc-14.2.0,因此 openEuler GCC Toolset 工具链选型 的 GCC 的版本为gcc-14.2.0 。 + +至于 binutils,openEuler 24.09 的默认 binutils 为 2.41 版本,而最新的 GCC-14 官方推荐搭配 binutils-2.42 使用,因此本工具链的 binutils 的版本选择 binutils-2.42 。 + +基于此考量,openEuler GCC Toolset 副版本工具链引入 gcc-14.2.0 和 binutils-2.42,此举旨在确保编译环境的稳定性和效率,同时避免不必要的复杂性,力求在保障编译结果质量的同时,优化用户的使用体验。后期待 gcc-14.3.0 在上游社区 release 后,同步更新此工具链 GCC 版本。 + +### 架构设计 + +为区分于默认工具链安装,并防止 openEuler GCC Toolset 副版本编译工具链安装与默认编译工具链安装之间的依赖库冲突,将此工具链命名为 gcc-toolset-14 ,其软件包名均以前缀`gcc-toolset-14-`开头,后接原有工具链软件包名。同时,考虑到默认编译工具链安装路径为`/usr`,为避免路径重叠,特将 gcc-toolset-14 安装路径设定为`/opt/openEuler/gcc-toolset-14/`。为了与开源 GCC 做出区分,也便于后期合入更多 openEuler 社区特性,gcc-toolset-14-gcc 的版本设置为 14.2.1 。 + +副版本编译工具链 gcc-toolset-14 提供的应用程序和库不会取代系统默认GCC版本,其包含的应用程序和库旨在与系统默认编译工具链版本并存,而非取代或覆盖它们,亦不会自动设为默认或首选选项。此外,为了实现低成本切换编译工具链版本,便于版本切换与管理,本方案引入 scl-utils 版本切换工具,具体使用和切换方式见下文。 + +## 安装与部署 + +### 软件要求 +- 操作系统:openEuler 24.09 + +### 硬件要求 +- Aarch64 / X86_64 + +### 安装方式 + +默认 GCC 编译器 gcc-12.3.1,安装路径为 /usr : +```shell +yum install -y gcc gcc-c++ +``` + +副版本编译工具链 gcc-toolset-14 安装路径为 /opt/openEuler/gcc-toolset-14/root/usr/ : +```shell +yum install -y gcc-toolset-14-gcc* +yum install -y gcc-toolset-14-binutils* +``` + +## 使用方式 + +本方案引入 SCL(Software Collections)工具进行不同版本编译工具链的管理。 + +## scl工具 + +SCL(Software Collections)是 Linux 系统中一个非常重要的工具,它为用户提供了一种方便、安全的安装和使用应用程序及运行时环境多个版本的方式,同时避免了系统混乱。 + +SCL 的主要用途包括: + +1. 多版本共存:允许用户在同一系统上安装和使用多个版本的软件库、工具和语言运行环境,从而满足不同应用和开发需求。 +2. 避免系统冲突:通过隔离不同版本的软件,避免了新版本软件与系统原有版本之间的冲突。 +3. 提升开发效率:对于开发人员来说,SCL 提供了最新的开发工具链和运行时环境,从而提升了开发效率。 + +### 版本切换方式 + +**安装 SCL:** + +```shell +yum install scl-utils scl-utils-build +``` + +**注册 gcc-toolset-14:** + +```shell +## 注册 gcc-toolset-14 +scl register /opt/openEuler/gcc-toolset-14/ + +## 取消注册 gcc-toolset-14 +scl deregister gcc-toolset-14 +``` + +使用 `scl list-collections` 显示 gcc-toolset-14 已经在 scl 中注册成功; + +**切换 gcc-toolset-14:** + +``` +scl enable gcc-toolset-14 bash +``` + +此命令会启动一个新的 bash shell 会话,使用 gcc-toolset-14 内的工具版本,而不是系统默认版本。在新的 bash shell 会话中,无需再显式切换编译器版本和路径。 +如果需要退出 gcc-toolset-14 的编译环境,输入 `exit` 退出 bash shell 会话,此时编译工具链的版本切换成系统默认版本。 + +SCL工具的本质就是自动设置不同工具版本的环境变量,具体可以参考 `/opt/openEuler/gcc-toolset-14/enable` 文档,gcc-toolset-14 的环境变量均在该文件中设置。若用户系统没有 SCL 工具,则可以使用以下方式进行工具链版本切换: + +``` +## 方案一:无 SCL 工具,使用脚本切换编译工具链 +source /opt/openEuler/gcc-toolset-14/enable + +## 方案二:有 SCL 工具,使用 SCL 工具切换编译工具链并激活运行环境 +scl enable gcc-toolset-14 bash +``` + +## 使用约束 +### 编译场景 +主版本场景:正常编译使用系统默认的 gcc-12.3.1 进行构建; + +副版本场景:需要使用 GCC-14 高版本特性构建相关应用,使用 SCL 工具将 bash 环境切换为 gcc-toolset-14 编译工具链的编译环境。 + +### 副版本GCC-14使用说明 +1. openEuler GCC Toolset 14 副版本编译工具链提供如下两种使用方式: +1)动态链接:默认场景下会自动添加选项 -lstdc++ 进行动态链接,此时会链接系统库动态库 /usr/lib64/libstdc++.so.6 和 GCC-14 副版本提供的 libstdc++_nonshared.a 静态库,此静态库是 GCC-14 相比于 GCC-12 新增的稳定 C++ 特性; +2)静态链接:用户使用选项 -static 进行静态链接,此时会链接 GCC-14 副版本提供的 libstdc++.a 全量特性静态库,该静态库路径为 `/opt/openEuler/gcc-toolset-14/root/usr/lib/gcc/aarch64-openEuler-linux/14/libstdc++.a` ; + +2. 用户默认构建使用动态链接,会链接新增的 libstdc++_nonshared.a 静态库,该库为了保持和系统兼容性,仅对 C++ 中正式标准特性进行封装。对于 -fmodules-ts , -fmodule-header 等选项,属于 C++20 的模块特性,而该特性在 C++20 中仍属于实验性质,并未封装在 libstdc++_nonshared.a 中,若用户需要使用此类新增特性,建议直接使用静态链接的方式全量链接 GCC-14 副版本的静态库。 \ No newline at end of file diff --git a/docs/zh/docs/Installation/FAQ.md "b/docs/zh/docs/Installation/\345\256\211\350\243\205\345\234\250\346\234\215\345\212\241\345\231\250\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" similarity index 94% rename from docs/zh/docs/Installation/FAQ.md rename to "docs/zh/docs/Installation/\345\256\211\350\243\205\345\234\250\346\234\215\345\212\241\345\231\250\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" index d39fc49f12f8fedbadf92d3fc8db458e0c2b4cbe..fb12fa4216d28be62a58b0f809ce8c220b733986 100644 --- a/docs/zh/docs/Installation/FAQ.md +++ "b/docs/zh/docs/Installation/\345\256\211\350\243\205\345\234\250\346\234\215\345\212\241\345\231\250\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" @@ -1,6 +1,6 @@ -# FAQ +# 常见问题与解决方法 -## 安装openEuler时选择第二盘位为安装目标,操作系统无法启动 +## **问题1:安装openEuler时选择第二盘位为安装目标,操作系统无法启动** ### 问题现象 @@ -22,7 +22,7 @@ - 当系统处于安装过程中,在选择磁盘(选择第一块或者两块都选择)后,指定引导程序安装到第一块盘sda中。 - 当系统已经安装完成,若BIOS支持选择从哪个磁盘启动,则可以通过修改BIOS中磁盘启动顺序,尝试重新启动系统。 -## openEuler开机后进入emergency模式 +## **问题2:openEuler开机后进入emergency模式** ### 问题现象 @@ -59,7 +59,7 @@ UUID=afcc811f-4b20-42fc-9d31-7307a8cfe0df /boot ext4 defaults,x-systemd.device-t /dev/mapper/openEuler-swap swap swap defaults 0 0 ``` -## 系统中存在无法激活的逻辑卷组时,重装系统失败 +## **问题3:系统中存在无法激活的逻辑卷组时,重装系统失败** ### 问题现象 @@ -105,7 +105,7 @@ UUID=afcc811f-4b20-42fc-9d31-7307a8cfe0df /boot ext4 defaults,x-systemd.device-t # vgremove -y testvg32947 ``` -## 选择安装源出现异常 +## **问题4:选择安装源出现异常** ### 问题现象 @@ -119,7 +119,7 @@ UUID=afcc811f-4b20-42fc-9d31-7307a8cfe0df /boot ext4 defaults,x-systemd.device-t 检查安装源是否存在异常。使用新的安装源。 -## 如何手动开启kdump服务 +## **问题5:如何手动开启kdump服务** ### 问题现象 @@ -204,7 +204,7 @@ kdump内核预留内存参数说明如下: -## 多块磁盘组成逻辑卷安装系统后,再次安装不能只选其中一块磁盘 +## **问题6:多块磁盘组成逻辑卷安装系统后,再次安装不能只选其中一块磁盘** ### 问题现象 @@ -244,7 +244,7 @@ kdump内核预留内存参数说明如下: > ![](./public_sys-resources/icon-note.gif) **说明:** > 图形模式下也可以按“Ctrl+Alt+F6”回到图形界面,点击[图1](#fig115949762617)右下角的“Refresh”刷新存储配置生效。 -## x86物理机UEFI模式由于security boot安全选项问题无法安装 +## **问题7:x86物理机UEFI模式由于security boot安全选项问题无法安装** ### 问题现象 @@ -276,7 +276,7 @@ x86物理机安装系统时,由于设置了BIOS选项security boot 为enable > ![](./public_sys-resources/icon-note.gif) **说明:** > 设置security boot为disable之后,保存退出,重新安装即可。 -## 安装openEuler时,软件选择页面选择“服务器-性能工具”,安装后messages日志有pmie_check报错信息 +## **问题8:安装openEuler时,软件选择页面选择“服务器-性能工具”,安装后messages日志有pmie_check报错信息** ### 问题现象 @@ -302,7 +302,7 @@ anaconda不支持在chroot环境中安装selinux策略模块,当安装pcp-seli # sudo dnf reinstall pcp-selinux ``` -## 在两块已经安装了系统的磁盘上进行重复选择,并自定义分区时,安装失败 +## **问题9:在两块已经安装了系统的磁盘上进行重复选择,并自定义分区时,安装失败** ### 问题现象 @@ -323,7 +323,7 @@ anaconda不支持在chroot环境中安装selinux策略模块,当安装pcp-seli -## 安装LSI MegaRAID卡的物理机kdump无法生成vmcore +## **问题10:安装LSI MegaRAID卡的物理机kdump无法生成vmcore** ### 问题现象 diff --git a/docs/zh/docs/Installation/FAQ-1.md "b/docs/zh/docs/Installation/\345\256\211\350\243\205\345\234\250\346\240\221\350\216\223\346\264\276\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" similarity index 95% rename from docs/zh/docs/Installation/FAQ-1.md rename to "docs/zh/docs/Installation/\345\256\211\350\243\205\345\234\250\346\240\221\350\216\223\346\264\276\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" index ec8c058b9f698d436e14ac96e5a7a93d68da76f0..4952db34cbfaf732d4c79a1d7ece2aee17673000 100644 --- a/docs/zh/docs/Installation/FAQ-1.md +++ "b/docs/zh/docs/Installation/\345\256\211\350\243\205\345\234\250\346\240\221\350\216\223\346\264\276\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" @@ -1,6 +1,6 @@ -# FAQ +# 常见问题与解决方法 -## 树莓派启动失败 +## **问题1:树莓派启动失败** ### 问题现象 @@ -17,7 +17,7 @@ 将完整的镜像重新刷写入 SD 卡。 -## nmcli 命令连接 WIFI 失败 +## **问题2:nmcli 命令连接 WIFI 失败** ### 问题现象 @@ -46,7 +46,7 @@ 7. 查看添加的 WIFI 连接是否已激活(已激活的连接名称前有 `*` 标记)。如果未激活,选择该 WIFI 连接,然后按下键盘右方向键选择 `Activate`,按 `Enter` 激活该连接。待激活完成后,选择 `Back`,按 `Enter` 退出该激活界面,回退到最初的 nmtui 字符界面。 8. 选择 `Quit`,然后按下键盘右方向键选择 `OK`,按 `Enter` 退出 nmtui 字符界面。 -## tensorflow包及相关包安装失败 +## **问题3:tensorflow包及相关包安装失败** ### 问题现象 diff --git "a/docs/zh/docs/Installation/\345\256\211\350\243\205\346\214\207\345\257\274.md" "b/docs/zh/docs/Installation/\345\256\211\350\243\205\346\214\207\345\257\274.md" index c8998afae14b4e84017fc8384ce63c4c08757505..e16b25aa12ce1bb5fe764762f2ae38c09da80956 100644 --- "a/docs/zh/docs/Installation/\345\256\211\350\243\205\346\214\207\345\257\274.md" +++ "b/docs/zh/docs/Installation/\345\256\211\350\243\205\346\214\207\345\257\274.md" @@ -163,7 +163,7 @@ nfs服务器需要用户自己搭建,将iso镜像进行挂载,挂载出的文件拷贝到nfs的共享目录中。其中x86_64为CPU 架构,可根据实际情况使用镜像。 -安装过程中,如果“设置安装源”有疑问,可参考“[选择安装源出现异常](./FAQ.html#选择安装源出现异常)”。 +安装过程中,如果“设置安装源”有疑问,可参考“[选择安装源出现异常](./安装在服务器常见问题与解决方法.md#问题4选择安装源出现异常)”。 设置完成后,请单击左上角“完成”返回“安装概览”页面。 diff --git "a/docs/zh/docs/Kernel/\345\206\205\345\255\230\345\217\257\351\235\240\346\200\247\345\210\206\347\272\247\347\211\271\346\200\247\344\275\277\347\224\250\346\214\207\345\215\227.md" "b/docs/zh/docs/Kernel/\345\206\205\345\255\230\345\217\257\351\235\240\346\200\247\345\210\206\347\272\247\347\211\271\346\200\247\344\275\277\347\224\250\346\214\207\345\215\227.md" index 58a6d97e562129ed78f867039258097061ebaa1b..4296a5c3fd05bfba4a99d2fc10db055f50732317 100644 --- "a/docs/zh/docs/Kernel/\345\206\205\345\255\230\345\217\257\351\235\240\346\200\247\345\210\206\347\272\247\347\211\271\346\200\247\344\275\277\347\224\250\346\214\207\345\215\227.md" +++ "b/docs/zh/docs/Kernel/\345\206\205\345\255\230\345\217\257\351\235\240\346\200\247\345\210\206\347\272\247\347\211\271\346\200\247\344\275\277\347\224\250\346\214\207\345\215\227.md" @@ -140,7 +140,7 @@ #### 使用方法 -本子特性提供较多接口,使能特性并校验只需要步骤1-6即可。 +本特性提供较多接口,使能特性并校验只需要步骤1-6即可。 1. 配置启动参数“kernelcore=reliable”,代表打开内存分级管理开关,CONFIG_MEMORY_RELIABLE是必要的配置,否则整个系统的内存可靠性分级管理不使能。 @@ -161,7 +161,7 @@ [ 0.000000] efi: mem07: [Conventional Memory| | | | | | | | |WB| | | ] range=[0x0000000140000000-0x000000083eb6cfff] (28651MB) ``` -6. 内核态开发时,对于一个页面struct page,可以通过其所处的 zone来判断,ZONE_MOVABLE为低可靠内存区,zone编号小于ZONE_MOVABLE的均为高可靠内存区,判断方式举例如下。 +6. 内核态开发时,对于一个页面struct page,可以通过其所处的zone来判断,ZONE_MOVABLE为低可靠内存区,zone编号小于ZONE_MOVABLE的均为高可靠内存区,判断方式举例如下。 ```c bool page_reliable(struct page *page) @@ -174,7 +174,7 @@ 此外提供的若干接口按照功能点分类列举如下: - 1. **代码层面判断可靠性是否使能:**在内核模块中通过如下接口来判断,返回 true 表示内存分级功能真正使能,返回false则未使能。 + 1. **代码层面判断可靠性是否使能:**在内核模块中通过如下接口来判断,返回true表示内存分级功能真正使能,返回false则未使能。 ```c #include @@ -234,7 +234,7 @@ echo 500 > /sys/module/clear_freelist_page/parameters/cfp_timeout_ms # 设置超时为500ms ``` - 6. **查看更改当前进程高低可靠属性:**可以通过/proc//reliable来查看该进程是否是高可靠进程;运行写入,该标识会继承,如果子进程不需要,则手动修改子进程属性;systemd和内核线程不支持该属性的读写;可以写0或 者1,默认为0,代表低可靠进程(权限为0644)。 + 6. **查看更改当前进程高低可靠属性:**可以通过/proc//reliable来查看该进程是否是高可靠进程;运行写入,该标识会继承,如果子进程不需要,则手动修改子进程属性;systemd和内核线程不支持该属性的读写;可以写0或者1,默认为0,代表低可靠进程(权限为0644)。 ```Shell # 更改pid=1024的进程为高可靠进程,从更改之后开始进程缺页申请的内存是从高可靠内存区域申请,申请不到有可能fallback到低可靠 @@ -255,7 +255,7 @@ Page cache 也叫页缓冲或文件缓冲,在linux读写文件时,它用于 #### 约束限制 -1. page cache超过限制后,page cache会进行定期回收,如果page cache的产生的速度大于page cache回收的速度则无法保证page cache的数量在指定的限制之下。 +1. page cache超过限制后,page cache会进行定期回收,如果page cache产生的速度大于page cache回收的速度则无法保证page cache的数量在指定的限制之下。 2. /proc/sys/vm/reliable_pagecache_max_bytes的使用有一定限制,有部分场景的page cache会强制使用可靠内存,如读文件系统的元数据(inode, dentry等),会导致page cache使用的可靠内存超过接口的限制,可以通过 echo 2 \> /proc/sys/vm/drop_caches 来释放inode和dentry。 3. page cache使用的高可靠内存超过reliable_pagecache_max_bytes限制时,会默认申请低可靠内存,若低可靠内存申请不到,则遵循原生流程处理。 4. FileCache的统计会先统计到per cpu的缓存中,当缓存中的值超过阈值时才会加到整个系统中,之后才能在/proc/meminfo中体现,ReliableFileCache在/proc/meminfo中没有上述的阈值,会导致有时ReliableFileCache比FileCache的统计值稍大。 diff --git "a/docs/zh/docs/KernelLiveUpgrade/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" "b/docs/zh/docs/KernelLiveUpgrade/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" index 5a72eb79bf9f1231a431377143f9f52beb9e2126..301fb92e25899c090dfdb7fee8fe9d08b6dbc214 100644 --- "a/docs/zh/docs/KernelLiveUpgrade/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" +++ "b/docs/zh/docs/KernelLiveUpgrade/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" @@ -1,28 +1,30 @@ # 常见问题与解决方法 -1. 执行nvwa update后未升级 +## **问题1:执行nvwa update后未升级** 原因:保留现场或者内核替换过程中出现错误。 解决方法:查看日志,找出错误原因。 -2. 开启加速特性后,nvwa执行命令失败 +## **问题2:开启加速特性后,nvwa执行命令失败** - 原因:nvwa提供了诸多加速特性,包括quick kexec,pin memory,cpu park等等。这些特性都涉及到cmdline的配置和内存的分配,在选取内存时,通过cat /proc/iomemory确保选取的内存没有与其他程序冲突。必要时,通过dmesg查看使能特性后是否存在错误日志。 + 原因:nvwa提供了诸多加速特性,包括quick kexec,pin memory,cpu park等等。这些特性都涉及到cmdline的配置和内存的分配,在选取内存时,通过cat /proc/iomemory确保选取的内存没有与其他程序冲突。 + + 解决方法:必要时,通过dmesg查看使能特性后是否存在错误日志。 -3. 热升级后,相关现场未被恢复 +## **问题3:热升级后,相关现场未被恢复** 原因:首先检查nvwa服务是否运行,运行情况下,可能存在两种情况:一种是服务恢复失败,一种是进程恢复失败。 解决方法:通过service nvwa status查看nvwa的日志,如果是服务启动失败,首先确认是否使能了该服务,再通过systemd查看对应服务的日志。进一步的日志,去criu_dir指定的路径对应命名的进程/服务文件夹中。其中dump.log为保存现场产生的日志,restore.log为恢复现场产生的。 -4. 恢复失败,日志显示Can't fork for 948: File exists +## **问题4:恢复失败,日志显示Can't fork for 948: File exists** 原因:内核热升级工具在恢复程序过程中,发现程序的pid已经被占用。 解决方法:当前内核没有提供保留pid的机制,相关策略正在开发,预计会在将来的内核版本中解决这一限制,当前仅能手动重启相关进程。 -5. 使用nvwa去保存和恢复简单程序(hello world),显示失败或者程序未在执行 +## **问题5:使用nvwa去保存和恢复简单程序(hello world),显示失败或者程序未在执行** 原因: criu使用存在诸多限制。 diff --git "a/docs/zh/docs/Kmesh/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\345\212\236\346\263\225.md" "b/docs/zh/docs/Kmesh/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" similarity index 69% rename from "docs/zh/docs/Kmesh/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\345\212\236\346\263\225.md" rename to "docs/zh/docs/Kmesh/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" index 66afb72547ad9c416a4227aabd84f5332b5f3957..f8a6490bbdc0f4cf32edd71e25677a0a3a5bffca 100644 --- "a/docs/zh/docs/Kmesh/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\345\212\236\346\263\225.md" +++ "b/docs/zh/docs/Kmesh/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" @@ -1,20 +1,20 @@ -# 常见问题及解决办法 +# 常见问题与解决方法 -## 问题1:在使用集群启动模式时,若没有配置控制面程序ip信息,Kmesh服务启动后会报错退出 +## **问题1:在使用集群启动模式时,若没有配置控制面程序ip信息,Kmesh服务启动后会报错退出** ![](./figures/not_set_cluster_ip.png) 原因:集群启动模式下,Kmesh服务需要跟控制面程序通信,然后从控制面获取配置信息,因此需要设置正确的控制面程序ip信息。 -解决办法:参考[安装与部署](./安装与部署.md)章节中集群启动模式,设置正确的控制面程序ip信息。 +解决方法:参考[安装与部署](./安装与部署.md)章节中集群启动模式,设置正确的控制面程序ip信息。 -## 问题2:Kmesh服务在启动时,提示"get kube config error!" +## **问题2:Kmesh服务在启动时,提示"get kube config error!"** ![](./figures/get_kubeconfig_error.png) 原因:集群启动模式下,Kmesh服务会根据k8s的配置,自动获取控制面程序ip信息,若环境中没有配置k8s的kubeconfig路径,会导致获取kubeconfig失败,然后提示上述信息。(若已经手动修改Kmesh的配置文件,正确配置控制面程序ip信息,该问题可忽略) -解决办法:按如下方式配置kubeconfig: +解决方法:按如下方式配置kubeconfig: ```shell mkdir -p $HOME/.kube diff --git "a/docs/zh/docs/Kubernetes/Kubernetes\351\233\206\347\276\244\351\203\250\347\275\262\346\214\207\345\215\227 - containerd.md" "b/docs/zh/docs/Kubernetes/Kubernetes\351\233\206\347\276\244\351\203\250\347\275\262\346\214\207\345\215\227 - containerd.md" index a98c2cd6a1d86d32ba85db3ef307853fb3b67cb2..18f89355956c264ca8e54eecd9c1f6232e2fee53 100644 --- "a/docs/zh/docs/Kubernetes/Kubernetes\351\233\206\347\276\244\351\203\250\347\275\262\346\214\207\345\215\227 - containerd.md" +++ "b/docs/zh/docs/Kubernetes/Kubernetes\351\233\206\347\276\244\351\203\250\347\275\262\346\214\207\345\215\227 - containerd.md" @@ -209,7 +209,7 @@ $ kubectl apply -f kube-flannel.yml ``` > ![](./public_sys-resources/icon-note.gif)**说明** > -> 控制平面可能会有污点的问题,导致kubeamd get nodes中节点状态无法变成ready,请查阅[官方文档](https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/taint-and-toleration/)去除污点。 +> 控制平面可能会有污点的问题,导致kubectl get nodes中节点状态无法变成ready,请查阅[官方文档](https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/taint-and-toleration/)去除污点。 ## 加入集群(仅工作节点需要) **关闭代理(如有):** ``` diff --git "a/docs/zh/docs/Kubernetes/kubernetes\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" "b/docs/zh/docs/Kubernetes/kubernetes\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..b4ab2cf2b721f1cc28da28ed74f9d21fe1bd2d7d --- /dev/null +++ "b/docs/zh/docs/Kubernetes/kubernetes\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" @@ -0,0 +1,13 @@ +# 常见问题与解决方法 + +## **问题1:Kubernetes + docker为什么无法部署** + +原因:Kubernetes自1.21版本开始不再支持Kubernetes + docker部署Kubernetes集群。 + +解决方法:改为使用cri-dockerd+docker部署集群,也可以使用containerd或者iSulad部署集群。 + +## **问题2:openEuler无法通过yum直接安装Kubernetes相关的rpm包** + +原因:Kubernetes相关的rpm包需要配置yum的repo源有关EPOL的部分。 + +解决方法:[参考链接](https://forum.openeuler.org/t/topic/768)中repo源,重新配置环境中的EPOL源。 diff --git "a/docs/zh/docs/ROS/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" "b/docs/zh/docs/ROS/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" index f43a30740d3910758e0b705a6772c2707a943801..a7a4901b6ede1390eb2eb734b9817422b2e99cd6 100644 --- "a/docs/zh/docs/ROS/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" +++ "b/docs/zh/docs/ROS/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" @@ -1,10 +1,12 @@ -# 常见问题及解决方法 +# 常见问题与解决方法 -## 问题1: +## **问题1** ![](./figures/problem.png) -原因:出现该警告的原因在于环境变量中同时存在ROS1、ROS2,解决办法:修改环境变量,避免两个版本冲突。 +原因:出现该警告的原因在于环境变量中同时存在ROS1、ROS2。 + +解决方法:修改环境变量,避免两个版本冲突。 ```shell [root@openEuler ~]# vim /opt/ros/humble/share/ros_environment/environment/1.ros_distro.sh diff --git "a/docs/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" "b/docs/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" index 81332a77054170827d26c1fb5485ada03321009a..a15293c789e26c7004d64c70e23d5a42c29214f2 100644 --- "a/docs/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" +++ "b/docs/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" @@ -22,93 +22,27 @@ llama.cpp 和 chatglm-cpp 是基于 C/C++ 实现的模型推理框架,通过 openEuler 24.09 基于 Linux Kernel 6.6 内核构建,在此基础上,同时吸收了社区高版本的有益特性及社区创新特性。 -**上游继承特性**: +- **内存管理folio特性**:Linux内存管理基于page(页)转换到由folio(拉丁语 foliō,对开本)进行管理,相比page,folio可以由一个或多个page组成,采用struct folio参数的函数声明它将对整个(1个或者多个)页面进行操作,而不仅仅是PAGE_SIZE字节,从而移除不必要复合页转换,降低误用tail page问题;从内存管理效率上采用folio减少LRU链表数量,提升内存回收效率,另一方,一次分配更多连续内存减少page fault次数,一定程度降低内存碎片化;而在IO方面,可以加速大IO的读写效率,提升吞吐。全量支持匿名页、文件页的large folio,提供系统级别的开关控制,业务可以按需使用。对于ARM64架构,基于硬件contiguous bit技术(16个连续PTE只占一个 TLB entry),可以进一步降低系统TLB miss,从而提升整体系统性能。24.09新增支持anonymous shmem分配mTHP与支持mTHP的lazyfree,进一步增加内存子系统对于large folio的支持;新增page cache分配mTHP的sysfs控制接口,提供系统级别的开关控制,业务可以按需使用。 -- **内存管理 folio 特性**:Linux 内存管理基于 page(页)转换到由 folio(拉丁语 foliō,对开本)进行管理,相比 page,folio 可以由一个或多个 page 组成,采用 struct folio 参数的函数声明它将对整个(1个或者多个)页面进行操作,而不仅仅是 PAGE_SIZE 字节,从而移除不必要复合页转换,降低误用 tail page 问题;从内存管理效率上采用 folio 减少 LRU 链表数量,提升内存回收效率,另一方,一次分配更多连续内存减少 page fault 次数,一定程度降低内存碎片化;而在 IO 方面,可以加速大 IO 的读写效率,提升吞吐。全量支持匿名页、文件页的 large folio,提供系统级别的开关控制,业务可以按需使用。对于 Arm64 架构,基于硬件 contiguous bit 技术(16个连续 PTE 只占一个 TLB entry),可以进一步降低系统 TLB miss,从而提升整体系统性能。 +- **MPTCP特性支持**:MPTCP协议诞生旨在突破传统 TCP 协议的单一路径传输瓶颈,允许应用程序使用多个网络路径进行并行数据传输。这一设计优化了网络硬件资源的利用效率,通过智能地将流量分配至不同传输路径,显著缓解了网络拥塞问题,从而提高数据传输的可靠性和吞吐量。 -- **EEVDF 调度**:EEVDF 全称“Earliest Eligible Virtual Deadline First”。EEVDF 调度器将调度时延作为任务调度的考虑因素之一,在保障任务运行时间分配公平的同时,优先在没有满足应得运行时间的任务中,选择任务 deadline 最近的任务,从而保障任务的调度时延,解决了原有的 CFS 调度器只能公平分配任务运行时间,不能满足任务时延要求的问题。 + 目前,MPTCP 在下述网络场景中已经展现出了其优秀的性能: -- **cgroup v2 特性**:cgroup v2 相比 v1,具有统一的层级结构、更完善的线程模式管理、更安全的子树委派以及更丰富的特性支持。具体包含: + - 网络通路的选择:在现有的网络通路中,根据延迟、带宽等指标评估,选择最优的通路。 + - 无缝切网:在不同类型网络之间切换时,数据传输不中断。 + - 数据分流:同时使用多个通道传输,对数据包进行分发实现并发传输,增加网络带宽。 - 1. 统一层级结构:简化 cgroup 的层级管理,用户不需要为不同的资源管理配置多个独立的 cgroup 树,降低多个控制器协同工作控制难度。提供了更一致和简化的接口,使得配置更简单易懂。更高的安全性,避免父子 cgroup 资源竞争:cgroup v2 新增只有父 cgroup 内部无进程时才能启用子 cgroup 控制器的限制。 + 在实验环境中,采用MPTCP v1技术的RSYNC文件传输工具展现出了令人满意的效率提升。具体而言,传输1.3GB大小的文件时,传输时间由原来的114.83 s缩短至仅14.35s,平均传输速度由原来的11.08 MB/s提升至88.25 MB/s,可以极大程度的缩减文件传输时间。同时,实验模拟了传输过程中一条或多条路径突发故障而断开的场景,MPTCP在此种场景下可以将数据无缝切换至其他可用的数据通道,确保数据传输的连续性与完整性。 - 2. 更完善的线程模式管理:cgroup v2 引入线程模式(threaded),对可线程化管理的子系统进行限制。线程可以被独立于进程其他线程分配到不同的 cgroup 中,对单个线程的资源使用进行更精细的控制。 + 在openEuler 24.09中,已经完成了对linux主线内核6.9中MPTCP相关特性的全面移植与功能优化。 - 3. 更安全的子树委派:通过委派机制允许非特权用户创建和管理自己的 cgroup 层次结构。通过合理利用委派,系统管理员可以提供给用户或应用程序必要的控制权限,提供更细粒度的资源管理,同时保持系统的稳定性和安全性。 +- **ext4文件系统支持Large folio**:iozone性能总分可以提升80%。 - 4. 更丰富的特性支持:基于统一的文件树管理,支持 psi、页面缓存回写、跨多个资源的增强资源分配管理和隔离、统一核算不同类型的内存分配,MemoryQoS 等特性。 + iomap框架回写流程支持批量映射block。支持ext4默认模式下批量申请block,大幅优化各类benchmark下ext4性能表现。ext4 buffer io读写流程以及pagecache回写流程弃用老旧的buffer_head框架,切换至iomap框架,并通过iomap框架实现ext4支持large folio。24.09新增对于block size < folio size场景的小buffered IO(<=4KB)的性能优化,性能提升20%。 -- **Maple Tree 和 Per VMA Lock 特性**:使用 Maple Tree 替代红黑树管理进程的地址空间,并使用 RCU 友好的设计以及 Per VMA Lock 等机制,可以减少锁争用问题,提升 page fault 的扩展性,可以加速应用启动等并发场景的性能。 +- **按需加载支持failover特性**:cachefiles在按需模式下,如果守护进程崩溃或被关闭,按需加载相关的读取和挂载将返回-EIO。所有挂载点必须要在重新拉起 daemon 后重新挂载后方可继续使用。这在公共云服务生产环境中发生时是无法接受的,这样的I/O错误将传播给云服务用户,可能会影响他们作业的执行,并危及系统的整体稳定性。cachefiles failover 特性避免了守护进程崩溃后重新挂载所有挂载点,只需快速重新拉起守护进程即可,用户和服务是不感知守护进程崩溃的。 -- **PCP high 自适应调节**:对于不同工作负载,页面分配/释放的性能要求通常也是不同的。通过 PCP high 自适应的调节,可以自动调整每个 CPU 的页面集的大小以优化页面分配/释放性能,可以优化内核多并发构建等并发场景的性能。 - -- **MGLRU 特性**:多层级的 LRU 机制,更精确地识别页面的冷热信息,提升高内存压力场景下的系统性能,降低 OOM 的概率。 - -- **DAMON 特性**:轻量级内存访问监控框架,可在用户态实现虚拟地址或物理地址的访问监控,实现轻量精确的在线监控,助力性能提升。 - -- **Memory-tiering 特性**:内存分层特性,目标以最高效和成本效益的方式满足内存的使用需求,降低内存的使用成本。 - -- **hugetlb vmemmap 特性**:新增适配支持 Arm64 架构上的 hugetlb vmemmap 特性,节省内存管理结构的开销,降低内存底噪。 - -- **huge vmalloc 特性**:对于超过了 huge-page 的最小 size 的空间的 vmalloc/vmap 分配,将会尝试使用 huge page 而不是 base page,减少 tlb miss,显著提高了 vmalloc 使用场景的性能。 - -- **支持 memfd_secret 系统调用**:Linux 上创建“秘密内存区域”的新接口,允许用户空间进程创建其他任何人(包括内核)都无法访问的内存范围,可以用于存储私钥等用途,减少在系统内存中暴露的可能性。 - -- **BIG TCP 特性**:允许协议栈发送更大的 TSO/GRO 数据包,实现更好的网络吞吐量性能和更低的延迟。 - -- **XDP multi-buffer 支持**:允许 Jumbo frame 场景下使用 XDP 提升性能。 - -- **Thread-based NAPI polling 支持**:允许网卡 NAPI polling 移到内核线程处理,使 CPU 调度器可以合理调度提升性能。 - -- **bpf 新增 kfunc 特性**:允许 bpf 通过符号方式直接调用内核和 ko 提供的函数,ko 可以通过注册 kfunc 的方式来动态提供 bpf 接口。 - -- **bpf 新增 dynamic pointer 特性**:在 bpf 中引用动态分配的内存,此前 bpf 使用的内存必须在 verifier 检查时已静态指定。 - -- **perf 新增特性支持**:新增支持 ARM SPE 事件的获取;支持用户态直接读取 pmu counter;显示锁的竞争情况;减少生成的 pmu 数据,提升平均处理时间。 - -**openEuler 关键贡献**: - -- **ext4 文件系统支持 Large folio**: - - 1. iomap 框架回写流程支持批量映射 block。 - - 2. 支持 ext4 默认模式下批量申请 block,大幅优化各类 benchmark 下 ext4 性能表现。 - - 3. ext4 buffer io 读写流程以及 pagecache 回写流程弃用老旧的 buffer_head 框架,切换至 iomap 框架,并通过 iomap 框架实现ext4支持large folio。 - -- **潮汐 affinity 调度特性**:提供高效内存回收和加载机制,支持 per-memcg 的 swap 设备隔离,在业务负载低时回收冷数据,在业务负载升高时快速加载数据,实现内存可用空间和业务性能的提升,从而达到同等内存成本下更高的服务质量效果。感知业务负载动态调整业务 CPU 亲和性: - - 1. 当业务负载低时使用 prefered cpus 处理,增强资源的局部性。 - - 2. 当业务负载高时,突破 preferred cpus 范围限制,通过增加CPU核的供给提高业务的 QoS。 - -- **MPAM 特性**:MPAM(内存系统组件隔离监控)是用于解决服务器系统中,混部不同类型业务时,由于共享资源的竞争而带来的关键应用性能下降或者系统整体性能下降的问题。另外,对于业务共享资源的使用,以 CPU 或者 PID 为粒度,进行实时跟踪监控。OLK 6.6 下 MPAM 重构的版本提供若干新特性: - - 1. 完整支持 L2 cache 分区隔离和监控功能,其中关于监控功能,支持统计缓存占用量,同时监控缓存带宽流量。 - - 2. 支持任务之间根据优先级的差异,动态调整共享资源配置。 - - 3. 支持任务共享资源的保底设置。 - -- **CPU QoS 优先级负载均衡特性**:在离线混部 CPU QoS 隔离增强, 支持多核 CPU QoS 负载均衡,进一步降低离线业务 QoS 干扰。 - -- **SMT 驱离优先级反转特性**:解决混部 SMT 驱离特性的优先级反转问题,减少离线任务对在线任务 QoS 的影响。 - -- **混部多优先级**:允许 cgroup 配置 -2~2 的 cpu.qos_level,即多个优先级,使用 qos_level_weight 设置不同优先级权重,按照 CPU 的使用比例进行资源的划分,并提供唤醒抢占能力。 - -- **可编程调度**:基于 eBPF 的可编程调度框架,支持内核调度器动态扩展调度策略,以满足不同负载的性能需求。 - -- **支持 arm64 vcpu hotplug**:在线热插拔虚拟机 CPU 而不影响虚拟机正常运行,动态调整虚拟机的计算能力,提供安全可靠的虚拟机动态扩容。 - -- **负载算力协同**:在多核服务器中运行用户体验敏感应用(如云桌面系统)时,通过负载算力协同技术能够保障算力供给的及时性和有效性。负载算力协同技术具有以下特性:高负载场景下,支持轻量级的任务搜索算法,提高空闲 CPU 拉取 runnable 任务的效率,实现多核间快速负载均衡,最大化 CPU 资源利用率;算力竞争场景下,支持按优先级对业务进行分级管控,有效避免优先级翻转的问题,实现高优先级的前台任务绝对压制低优级的后台任务,保障关键任务的算力供给。 - -- **已挂载文件系统设备写访问控制**:支持块设备(分区设备)挂载文件系统后的写访问控制,为高危写访问操作提供告警信息,防止文件系统损坏。 - -- **riscv bpf 新特性支持**:支持 trampoline 特性、Zbb 扩展特性、kfunc 支持特性、cpu-v4 指令特性和原子操作指令特性等,扩展了 bpf 的能力。 - -- **arm64 bpf 新特性支持**:新增 bpf 栈变量 ldr/str 优化、pac 支持、trampoline 支持与 cpuv4 指令支持等特性,扩展了 bpf 的能力。 - -- **内存可靠性分级(继承特性)**:支持使用者按照需求分配在对应可靠性的内存上,并对部分可能的 UCE 或 CE 故障影响进行一定程度的缓解,达到部分 MR 内存(address range mirror)的情况下,支撑业务整体可靠性不下降。 +- **支持CLANG 编译的PGO优化**:PGO(Profile-Guided Optimization)是一种编译器反馈优化技术,通过收集程序运行时的信息,指导编译器的优化决策。根据业界经验,对于数据中心大型应用(如MySQL、Nginx、Redis等)通过反馈优化技术优化应用本身和Linux kernel有较好优化效果。经过测试,LLVM PGO可以在Nginx上有20%+性能提升,其中优化kernel提升10+%。 ## 嵌入式 diff --git "a/docs/zh/docs/ShangMi/\346\226\207\344\273\266\345\256\214\346\225\264\346\200\247\344\277\235\346\212\244.md" "b/docs/zh/docs/ShangMi/\346\226\207\344\273\266\345\256\214\346\225\264\346\200\247\344\277\235\346\212\244.md" index ba5628edfb7c8125d436dee0f2960366979b539c..208e9df00b0c064f5e75c408fef384f18773c4af 100644 --- "a/docs/zh/docs/ShangMi/\346\226\207\344\273\266\345\256\214\346\225\264\346\200\247\344\277\235\346\212\244.md" +++ "b/docs/zh/docs/ShangMi/\346\226\207\344\273\266\345\256\214\346\225\264\346\200\247\344\277\235\346\212\244.md" @@ -24,8 +24,20 @@ IMA全称Integrity Measurement Architecture,是Linux内核提供的强制访 # 生成SM2证书 # openssl x509 -req -days 3650 -extfile ima.cfg -signkey ima.key -in ima.csr -out ima.crt ``` - -4. 将根证书放置到内核源码目录,并修改内核编译选项CONFIG_SYSTEM_TRUSTED_KEYS,将指定证书编译到内核TRUSTED密钥中(仅评估模式涉及): +4. 生成IMA二级证书: + # 创建证书配置文件 + echo 'subjectKeyIdentifier=hash' > ima.cfg + echo 'authorityKeyIdentifier=keyid,issuer' >> ima.cfg + # 生成私钥 + openssl ecparam -genkey -name SM2 -out ima.key + # 生成签名请求 + openssl req -new -sm3 -key ima.key -out ima.csr + # 基于一级证书生成二级证书 + openssl x509 -req -sm3 -CAcreateserial -CA ca.crt -CAkey ca.key -extfile ima.cfg -in ima.csr -out ima.crt + # 转换为DER格式 + openssl x509 -outform DER -in ima.crt -out x509_ima.der0 + +5. 将根证书放置到内核源码目录,并修改内核编译选项CONFIG_SYSTEM_TRUSTED_KEYS,将指定证书编译到内核TRUSTED密钥中(仅评估模式涉及): ```sh # cp /path/to/ima.crt . @@ -34,7 +46,7 @@ IMA全称Integrity Measurement Architecture,是Linux内核提供的强制访 CONFIG_SYSTEM_TRUSTED_KEYS="ima.crt" ``` -5. 编译并安装内核(仅评估模式涉及): +6. 编译并安装内核(仅评估模式涉及): ```sh make -j64 diff --git "a/docs/zh/docs/StratoVirt/\345\207\206\345\244\207\344\275\277\347\224\250\347\216\257\345\242\203.md" "b/docs/zh/docs/StratoVirt/\345\207\206\345\244\207\344\275\277\347\224\250\347\216\257\345\242\203.md" index 5c17d7213dd925c78d18a73921501ad26119b99f..81ebbfbb6128bb6eae3ff5ea06d4081644d6b956 100644 --- "a/docs/zh/docs/StratoVirt/\345\207\206\345\244\207\344\275\277\347\224\250\347\216\257\345\242\203.md" +++ "b/docs/zh/docs/StratoVirt/\345\207\206\345\244\207\344\275\277\347\224\250\347\216\257\345\242\203.md" @@ -72,7 +72,7 @@ $ make -j vmlinux && objcopy -O binary vmlinux vmlinux.bin ``` -5. 如果想在x86平台使用bzImzge格式的kernel,可以使用如下命令进行编译。 +5. 如果想在x86平台使用bzImage格式的kernel,可以使用如下命令进行编译。 ``` $ make -j bzImage diff --git "a/docs/zh/docs/SysCare/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" "b/docs/zh/docs/SysCare/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" index 34e0b960bf44536028429ff31017bada06b6d729..3c57b6671bd87b0bac6abdc2f197761cbc8b944e 100644 --- "a/docs/zh/docs/SysCare/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" +++ "b/docs/zh/docs/SysCare/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" @@ -1,13 +1,16 @@ # 常见问题与解决方法 -## 问题1:报错:“alloc upatch module memory failed” - - 原因:触发selinux约束。 - - 解决方法:按照报错建议命令操作,手动添加策略,由于不同情况添加策略不同,无法穷尽枚举,参考该issue: 。 +## **问题1:报错:“alloc upatch module memory failed”** -## 问题2:报错: “patch file error 2” - - 原因:补丁检测失败。 - - 解决方法:补丁无法正常打入,更换补丁。 + 原因:触发selinux约束。 + 解决方法:按照报错建议命令操作,手动添加策略,由于不同情况添加策略不同,无法穷尽枚举,参考该issue: 。 -## 问题3:报错: “build project error 11” - - 原因:源码包编译失败。 - - 解决方法:尝试使用```rpmbuild -ra *.src.rpm```命令测试源码包是否可正常编译并满足其编译依赖。 +## **问题2:报错: “patch file error 2”** + + 原因:补丁检测失败。 + 解决方法:补丁无法正常打入,更换补丁。 + +## **问题3:报错: “build project error 11”** + + 原因:源码包编译失败。 + 解决方法:尝试使用```rpmbuild -ra *.src.rpm```命令测试源码包是否可正常编译并满足其编译依赖。 diff --git "a/docs/zh/docs/TailorCustom/isocut\344\275\277\347\224\250\346\214\207\345\215\227.md" "b/docs/zh/docs/TailorCustom/isocut\344\275\277\347\224\250\346\214\207\345\215\227.md" index 79d839523105d0e9415064c965a7f5b294ae2463..ad6f1008301f394621ca38e387fc0c8bd267eae8 100644 --- "a/docs/zh/docs/TailorCustom/isocut\344\275\277\347\224\250\346\214\207\345\215\227.md" +++ "b/docs/zh/docs/TailorCustom/isocut\344\275\277\347\224\250\346\214\207\345\215\227.md" @@ -7,9 +7,6 @@ - [命令介绍](#命令介绍) - [软件包来源](#软件包来源) - [操作指导](#操作指导) -- [FAQ](#FAQ) - - [默认 rpm 包列表安装系统失败](#默认-rpm-包列表安装系统失败) - ## 简介 openEuler 光盘镜像较大,下载、传输镜像很耗时。另外,使用 openEuler 光盘镜像安装操作系统时,会安装镜像所包含的全量 RPM 软件包,用户无法只安装部分所需的软件包。 @@ -336,49 +333,3 @@ kernel.aarch64 ``` -## FAQ - -### 默认 rpm 包列表安装系统失败 - -#### 背景描述 - -用户使用 isocut 裁剪镜像时通过配置文件 /etc/isocut/rpmlist 指定需要安装的软件包。 - -由于不同版本会有软件包减少,可能导致裁剪镜像时出现缺包等问题。 -因此 /etc/isocut/rpmlist 中默认只包含 kernel 软件包。 -保证默认配置裁剪镜像必定成功。 - -#### 问题描述 - -使用默认配置裁剪出来的 iso 镜像,能够裁剪成功,但是安装可能失败。 - -安装报错缺包,报错截图如下: - -![](./figures/lack_pack.png) - -#### 原因分析 - -使用默认配置的 RPM 软件包列表,裁剪的 iso 镜像在安装时缺少必要的 RPM 包。 -缺少的包如报错的图示,并且在不同版本中,缺少的 RPM 包也可能是不同的,以安装时实际报错为准。 - -#### 解决方案 - -1. 增加缺少的包 - - 1. 根据报错的提示整理缺少的 RPM 包列表 - 2. 将上述 RPM 包列表添加到配置文件 /etc/isocut/rpmlist 中。 - 3. 再次裁剪安装 iso 镜像 - - 以问题描述中的缺包情况为例,修改 rpmlist 配置文件如下: - ```shell - $ cat /etc/isocut/rpmlist - kernel.aarch64 - lvm2.aarch64 - chrony.aarch64 - authselect.aarch64 - shim.aarch64 - efibootmgr.aarch64 - grub2-efi-aa64.aarch64 - dosfstools.aarch64 - ``` - diff --git "a/docs/zh/docs/TailorCustom/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" "b/docs/zh/docs/TailorCustom/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..cc5eb8395cb5cb6fc8c6ebd76b64128c8525055f --- /dev/null +++ "b/docs/zh/docs/TailorCustom/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" @@ -0,0 +1,45 @@ +# 常见问题与解决方法 + +## **问题1:默认 rpm 包列表安装系统失败** + +### 背景描述 + +用户使用 isocut 裁剪镜像时通过配置文件 /etc/isocut/rpmlist 指定需要安装的软件包。 + +由于不同版本会有软件包减少,可能导致裁剪镜像时出现缺包等问题。 +因此 /etc/isocut/rpmlist 中默认只包含 kernel 软件包。 +保证默认配置裁剪镜像必定成功。 + +### 问题描述 + +使用默认配置裁剪出来的 iso 镜像,能够裁剪成功,但是安装可能失败。 + +安装报错缺包,报错截图如下: + +![](./figures/lack_pack.png) + +### 原因分析 + +使用默认配置的 RPM 软件包列表,裁剪的 iso 镜像在安装时缺少必要的 RPM 包。 +缺少的包如报错的图示,并且在不同版本中,缺少的 RPM 包也可能是不同的,以安装时实际报错为准。 + +### 解决方案 + +1. 增加缺少的包 + + 1. 根据报错的提示整理缺少的 RPM 包列表 + 2. 将上述 RPM 包列表添加到配置文件 /etc/isocut/rpmlist 中。 + 3. 再次裁剪安装 iso 镜像 + + 以问题描述中的缺包情况为例,修改 rpmlist 配置文件如下: + ```shell + $ cat /etc/isocut/rpmlist + kernel.aarch64 + lvm2.aarch64 + chrony.aarch64 + authselect.aarch64 + shim.aarch64 + efibootmgr.aarch64 + grub2-efi-aa64.aarch64 + dosfstools.aarch64 + ``` diff --git a/docs/zh/docs/Virtualization/LibcarePlus.md b/docs/zh/docs/Virtualization/LibcarePlus.md index 52f5fef43ad2e035748ac5ce8bd91f69cb7fac49..ce7cd7d736ef7cffba4a45508322d3192d136e92 100644 --- a/docs/zh/docs/Virtualization/LibcarePlus.md +++ b/docs/zh/docs/Virtualization/LibcarePlus.md @@ -6,6 +6,7 @@ - [安装 LibcarePlus](#安装-libcareplus) - [制作 LibcarePlus 热补丁](#制作-libcareplus-热补丁) - [应用 LibcarePlus 热补丁](#应用-libcareplus-热补丁) +- [使用 LibcarePlus 工具制作 qemu 热补丁](#使用-libcareplus-工具制作-qemu-热补丁) ## 概述 @@ -395,3 +396,98 @@ LibcarePlus 支持如下方式制作热补丁: Hello world! Hello world! ``` + +## 使用 LibcarePlus 工具制作 qemu 热补丁 + +制作方法如下: + +### 1.下载qemu制品仓代码,保持代码版本与openEuler环境中qemu版本一致 + ```shell +# 下载qemu源码并解压 +yum download --source qemu +rpm2cpio qemu-8.2.0-13.oe2403.src.rpm | cpio -id + ``` + +### 2.编译qemu制品仓代码 + +- 将解压后的qemu源码挪至/root/rpmbuild/SOURCES(由多个patch、一个qemu.spec、一个qemu-8.2.0.tar.xz组成) + +- 编译qemu.spec + + ```shell + rpmbuild -ba qemu.spec + ``` + +有两份成果物: +- /root/rpmbuild/BUILD/qemu-8.2.0中生成中间代码,为编译qemu对应代码。将代码拷贝到/home/abuild/rpmbuild/BUILD/qemu-8.2.0,编译环境的路径也会影响补丁地址的偏移。 +- /root/rpmbuild/RPMS/中生成qemu相关的rpm包。 + +### 3.制作热补丁所需的patch文件 + + 使用git format-patch指令制作patch即可。 + + ```shell + # cat 0001-hack-hmp-qtree-info.patch + From bb2f4e6fe43ca7b3d73026966ac3411b2d8342b9 Mon Sep 17 00:00:00 2001 + From: zhangsan + Date: Mon, 7 Mar 2022 20:53:41 +0800 + Subject: [PATCH 1/3] hack hmp qtree info + + --- + softmmu/qdev-monitor.c | 1 + + 1 file changed, 1 insertion(+) + + diff --git a/softmmu/qdev-monitor.c b/softmmu/qdev-monitor.c + index 05e1d88d99..96fd596c2e 100644 + --- a/softmmu/qdev-monitor.c + +++ b/softmmu/qdev-monitor.c + @@ -833,6 +833,7 @@ static void qbus_print(Monitor *mon, BusState *bus, int indent) + + void hmp_info_qtree(Monitor *mon, const QDict *qdict) + { + + fprintf(stderr, "---------------you hack me---------------------"); + if (sysbus_get_default()) + qbus_print(mon, sysbus_get_default(), 0); + } + -- + 2.33.0 + + ``` + +### 3.配置/etc/libcare.conf + /etc/libcare.conf填上patch文件修改的函数,用于后续制作补丁时,过滤掉不相关的函数; + 当前修改内容如下: + + ```shell + # cat /etc/libcare.conf + hmp_info_qtree + ``` + +### 4.查看qemu buildID + + ```shell + # whereis qemu-kvm + qemu-kvm: /usr/bin/qemu-kvm /usr/libexec/qemu-kvm + # file /usr/libexec/qemu-kvm + /usr/libexec/qemu-kvm: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=68f4ec13e140d3a688f3e0fb93442b8c7a86be8b, for GNU/Linux 3.7.0, stripped + ``` +注:需保持制作热补丁的环境和制作qemu包环境一致,buildID可作为二者是否一致的判定标准。因用户无qemu版本的制作环境,故可以自行编包并安装,使用自编包中的/usr/libexec/qemu-kvm的buildID。 + +### 5.制作热补丁 + +在/home/abuild/rpmbuild/BUILD/qemu-8.2.0/build中执行热补丁制作指令,**注意是build目录!!!** + +```shell +# libcare-patch-make --clean -s ../ 0002-patch-hello-qdm.patch -i 0001 --buildid=68f4ec13e140d3a688f3e0fb93442b8c7a86be8b -j 64 +``` +参数说明: + +--clean 类似make clean + +-s ../ 指定源文件夹,这里是上层目录 + +-i 0001 热补丁id + +buildid=xxx 保持和系统中qemu-kvm buildid一致 + +-j 64 多线程编译 \ No newline at end of file diff --git "a/docs/zh/docs/Virtualization/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\345\212\236\346\263\225.md" "b/docs/zh/docs/Virtualization/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\345\212\236\346\263\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..c7d5734b46bc05a15ef22f17a3cb317962a653a8 --- /dev/null +++ "b/docs/zh/docs/Virtualization/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\345\212\236\346\263\225.md" @@ -0,0 +1,17 @@ +# 常见问题与解决办法 + +## **问题1:使用libcareplus工具制作的qemu热补丁无法加载** + +原因:qemu版本和热补丁版本不一致。 + +解决方法:下载qemu对应版本的源码,同时需保持制作热补丁的环境和制作qemu包环境一致,buildID可作为二者是否一致的判定标准。因用户无qemu版本的制作环境,故可以 **自行编包并安装** ,使用自编包中的/usr/libexec/qemu-kvm的buildID。 + +## **问题2:使用libcareplus工具制作的热补丁已加载但未生效** + +原因:不支持死循环、不退出、递归的函数,不支持对初始化函数、inline 函数以及小于5字节的短函数。 + +解决方法:查看补丁所在函数是否在约束限制中。 + +## **问题3:使用kvmtop工具第一次显示的结果为间隔0.05秒的两次采样计算得到的结果,波动较大** + +此为开源top框架缺陷导致,暂无解决方案。 \ No newline at end of file diff --git a/docs/zh/docs/X-diagnosis/X-diagnosis.md b/docs/zh/docs/X-diagnosis/X-diagnosis.md index 1d630e907036e5b333aa235f62476d2092a94680..298451b5c3e9801f3617199ef4994d06a8b73d42 100644 --- a/docs/zh/docs/X-diagnosis/X-diagnosis.md +++ b/docs/zh/docs/X-diagnosis/X-diagnosis.md @@ -374,12 +374,12 @@ EXAMPLES: -C, --clear Clear the screen -i, --interval=INTERVAL Refreash interval(secs), default 5s. -m, --mnt=MNTPOINT the special mount point - -o, --opcode=OPCODE Trace file r/w, defalut both. + -o, --opcode=OPCODE Trace file r/w, default both. -p, --pid=PID Trace the pid only -s, --sort=SORT Sort r/w/wb, default read -t, --times=TIMES Trace times -T, --top=TOP show the topN (1~8192) - -v, --view=VIEW p:pids view, f: files view, defaut file view + -v, --view=VIEW p:pids view, f: files view, default file view -?, --help Give this help list --usage Give a short usage message ``` diff --git a/docs/zh/docs/desktop/.DS_Store b/docs/zh/docs/desktop/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/docs/zh/docs/desktop/.DS_Store differ diff --git a/docs/zh/docs/desktop/Install_XFCE.md b/docs/zh/docs/desktop/Install_XFCE.md index f0cd8dca28d72786925e26cbafb158e6e457029c..97811968818c388076a94705ee50ea5c14f6d1d8 100644 --- a/docs/zh/docs/desktop/Install_XFCE.md +++ b/docs/zh/docs/desktop/Install_XFCE.md @@ -70,10 +70,4 @@ XFCE支持x86_64和aarch64两种架构。 ```sh # sudo reboot ``` - -9. FAQ - -Q:为什么lightdm登录界面背景是黑色的? -A:登录界面是黑色的是因为lightdm-gtk默认配置文件/etc/lightdm/lightdm-gtk-greeter.conf中没有设置background。 -可以在该配置文件最后的[greeter]段中设置 background=/usr/share/backgrounds/xfce/xfce-blue.jpg -然后使用“systemctl restart lightdm”命令就可以看到背景了。 + \ No newline at end of file diff --git a/docs/zh/docs/desktop/dde.md b/docs/zh/docs/desktop/dde.md index cf094d5fcb0ac4b863f34946f09464ec94906d67..777fb3ca65862c214acc0a9703113a4554679e5c 100644 --- a/docs/zh/docs/desktop/dde.md +++ b/docs/zh/docs/desktop/dde.md @@ -1,23 +1,3 @@ # DDE 用户指南 -本节主要描述 DDE 桌面环境的安装和使用。 - -## FAQ 常见问题及解答 - -### 1.安装DDE后,root帐户登录桌面无计算机和回收站图标? - -* 问题表现 - - 安装DDE后,root帐户登录桌面无计算机和回收站图标 - -![img](./figures/dde-1.png) - -* 问题原因 - - 由于root用户在安装DDE前已创建,而DDE在安装时不会对已经创建的用户进行新增桌面图标操作。DDE安装后新建用户无此问题。 - -* 解决方案 - - 用户可通过启动器中右键对应图标发送到桌面即可,无任何功能差异。 - - ![img](./figures/dde-2.png) +本章主要描述 DDE 桌面环境的安装和使用。 diff --git "a/docs/zh/docs/desktop/dde\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" "b/docs/zh/docs/desktop/dde\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..d4f912d2c0cc7fb4b6bbe33641a7788f601e6caa --- /dev/null +++ "b/docs/zh/docs/desktop/dde\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" @@ -0,0 +1,19 @@ +# 常见问题与解决方法 + +## **问题1:安装DDE后,root帐户登录桌面无计算机和回收站图标** + +### 问题描述 + + 安装DDE后,root帐户登录桌面无计算机和回收站图标 + +![img](./figures/dde-1.png) + +### 问题原因 + + 由于root用户在安装DDE前已创建,而DDE在安装时不会对已经创建的用户进行新增桌面图标操作。DDE安装后新建用户无此问题。 + +### 解决方法 + + 用户可通过启动器中右键对应图标发送到桌面即可,无任何功能差异。 + + ![img](./figures/dde-2.png) diff --git "a/docs/zh/docs/desktop/xfce\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" "b/docs/zh/docs/desktop/xfce\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..8cfb01ed0b26518a2b040f81ab77dc03f7a50b97 --- /dev/null +++ "b/docs/zh/docs/desktop/xfce\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" @@ -0,0 +1,8 @@ +# 常见问题与解决方法 + +## **问题1:lightdm登录界面背景是黑色的** + +原因: 登录界面是黑色的是因为lightdm-gtk默认配置文件/etc/lightdm/lightdm-gtk-greeter.conf中没有设置background。 + +解决方法:可以在该配置文件最后的[greeter]段中设置 background=/usr/share/backgrounds/xfce/xfce-blue.jpg +然后使用“systemctl restart lightdm”命令就可以看到背景了。 diff --git a/caselibrary/.keep b/docs/zh/docs/epkg/.keep similarity index 100% rename from caselibrary/.keep rename to docs/zh/docs/epkg/.keep diff --git "a/docs/zh/docs/epkg/epkg\344\275\277\347\224\250\346\214\207\345\215\227.md" "b/docs/zh/docs/epkg/epkg\344\275\277\347\224\250\346\214\207\345\215\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..8be9c0de6f05cd74a07c347c80bbdbb7a73d7dc0 --- /dev/null +++ "b/docs/zh/docs/epkg/epkg\344\275\277\347\224\250\346\214\207\345\215\227.md" @@ -0,0 +1,286 @@ +# epkg 使用指南 + +## 介绍 +本文介绍EPKG包管理器工作环境如何初始化,以及基本功能如何使用。本文涉及操作结果示例均以非root用户为例。 +注意:目前epkg的软件包只适配了aarch64架构,后续会不断扩展其他架构 + +## 快速上手 + +下面的实例介绍了安装不同软件包版本的方式 + +```bash +# 下载epkg + wget https://repo.oepkgs.net/openeuler/epkg/epkg-0.1.0-1.aarch64.rpm && sudo yum -y install epkg-0.1.0-1.aarch64.rpm // 待放到repo后可以直接执行 yum install epkg + +# 初始化epkg +epkg init +bash // 重新执行.bashrc, 获得新的PATH + +# 创建环境1 +epkg create t1 +epkg install tree +tree --version +which tree + +# 查看repo +[root@vm-4p64g ~]# epkg repo list +------------------------------------------------------------------------------------------------------------------------------------------------------ +channel | repo | url +------------------------------------------------------------------------------------------------------------------------------------------------------ +openEuler-22.03-LTS-SP3 | OS | https://repo.oepkgs.net/openeuler/epkg/channel/openEuler-22.03-LTS-SP3/OS/aarch64/ +openEuler-24.09 | everything | https://repo.oepkgs.net/openeuler/epkg/channel/openEuler-24.09/everything/aarch64/ +openEuler-24.09 | OS | https://repo.oepkgs.net/openeuler/epkg/channel/openEuler-24.09/OS/aarch64/ +------------------------------------------------------------------------------------------------------------------------------------------------------ + +# 创建环境2, 指定repo +epkg create t2 --repo openEuler-22.03-LTS-SP3 +epkg install tree +tree --version +which tree + +# 切换回环境1 +epkg activate t1 +``` + + + +## 安装教程 +```bash +# 下载epkg +wget https://repo.oepkgs.net/openeuler/epkg/epkg-0.1.0-1.aarch64.rpm +sudo yum install epkg-0.1.0-1.aarch64.rpm // 待放到repo后可以直接执行 yum install epkg +# 或执行 +curl -sSL https://repo.oepkgs.net/openeuler/epkg/rootfs/downloader.sh -o /tmp/ +bash /tmp/downloader.sh + +# 初始化epkg +epkg init +bash // 重新执行.bashrc, 获得新的PATH + +# 创建环境 +epkg creat $env +epkg install $package +``` + +## EPKG包管理器使用说明 + +Usage: + + epkg install PACKAGE + epkg install [--env ENV] PACKAGE (开发中...) + epkg remove [--env ENV] PACKAGE (开发中...) + epkg upgrade [PACKAGE] (开发中...) + + epkg search PACKAGE (开发中...) + epkg list (开发中...) + + epkg env list + epkg create|remove ENV + epkg activate ENV + epkg deactivate ENV + epkg enable|disable ENV (开发中...) + epkg env history ENV (开发中...) + epkg env rollback ENV (开发中...) + +软件包安装: + + epkg create $env // 创建环境 + epkg install $package // 在环境中安装软件包 + + epkg create $env2 --repo $repo // 创建环境2,指定repo + epkg install $package // 在环境2中安装软件包 + + +### 安装软件 +功能描述: + + 在当前所在环境安装软件(建议操作前确认当前所在环境) + +命令: + + epkg install ${package_name} + +返回示例: +``` +[root@2d785c36ee2e /]# epkg activate t1 +Add common to path +Add t1 to path +Environment 't1' activated. +Environment 't1' activated. +[root@2d785c36ee2e /]# epkg install tree +EPKG_ENV_NAME: t1 +Caching repodata for: "OS" +Cache for "OS" already exists. Skipping... +Caching repodata for: "OS" +Cache for "OS" already exists. Skipping... +Caching repodata for: "everything" +Cache for "everything" already exists. Skipping... +start download https://repo.oepkgs.net/openeuler/epkg/channel/openEuler-24.09/everything/aarch64//store/FF/FFCRTKRFGFQ6S2YVLOSUF6PHSMRP7A2N__ncurses-libs__6.4__8.oe2409.epkg +############################################################################################################################################################################################################### 100.0% +start download https://repo.oepkgs.net/openeuler/epkg/channel/openEuler-24.09/everything/aarch64//store/D5/D5BOEFTRBNV3E4EXBVXDSRNTIGLGWVB7__glibc-all-langpacks__2.38__34.oe2409.epkg +############################################################################################################################################################################################################### 100.0% +start download https://repo.oepkgs.net/openeuler/epkg/channel/openEuler-24.09/everything/aarch64//store/VX/VX6SUOPGEVDWF6E5M2XBV53VS7IXSFM5__openEuler-repos__1.0__3.3.oe2409.epkg +############################################################################################################################################################################################################### 100.0% +start download https://repo.oepkgs.net/openeuler/epkg/channel/openEuler-24.09/everything/aarch64//store/LO/LO6RYZTBB2Q7ZLG6SWSICKGTEHUTBWUA__libselinux__3.5__3.oe2409.epkg +############################################################################################################################################################################################################### 100.0% +start download https://repo.oepkgs.net/openeuler/epkg/channel/openEuler-24.09/everything/aarch64//store/EP/EPIEEK2P5IUPO4PIOJ2BXM3QPEFTZUCT__basesystem__12__3.oe2409.epkg +############################################################################################################################################################################################################### 100.0% +start download https://repo.oepkgs.net/openeuler/epkg/channel/openEuler-24.09/everything/aarch64//store/2G/2GYDDYVWYYIDGOLGTVUACSBHYVRCRJH3__setup__2.14.5__2.oe2409.epkg +############################################################################################################################################################################################################### 100.0% +start download https://repo.oepkgs.net/openeuler/epkg/channel/openEuler-24.09/everything/aarch64//store/HC/HCOKXTWQQUPCFPNI7DMDC6FGSDOWNACC__glibc__2.38__34.oe2409.epkg +############################################################################################################################################################################################################### 100.0% +start download https://repo.oepkgs.net/openeuler/epkg/channel/openEuler-24.09/everything/aarch64//store/OJ/OJQAHJTY3Y7MZAXETYMTYRYSFRVVLPDC__glibc-common__2.38__34.oe2409.epkg +############################################################################################################################################################################################################### 100.0% +start download https://repo.oepkgs.net/openeuler/epkg/channel/openEuler-24.09/everything/aarch64//store/FJ/FJXG3K2TSUYXNU4SES2K3YSTA3AHHUMB__tree__2.1.1__1.oe2409.epkg +############################################################################################################################################################################################################### 100.0% +start download https://repo.oepkgs.net/openeuler/epkg/channel/openEuler-24.09/everything/aarch64//store/KD/KDYRBN74LHKSZISTLMYOMTTFVLV4GPYX__readline__8.2__2.oe2409.epkg +############################################################################################################################################################################################################### 100.0% +start download https://repo.oepkgs.net/openeuler/epkg/channel/openEuler-24.09/everything/aarch64//store/MN/MNJPSSBS4OZJL5EB6YKVFLMV4TGVBUBA__tzdata__2024a__2.oe2409.epkg +############################################################################################################################################################################################################### 100.0% +start download https://repo.oepkgs.net/openeuler/epkg/channel/openEuler-24.09/everything/aarch64//store/S4/S4FBO2SOMG3GKP5OMDWP4XN5V4FY7OY5__bash__5.2.21__1.oe2409.epkg +############################################################################################################################################################################################################### 100.0% +start download https://repo.oepkgs.net/openeuler/epkg/channel/openEuler-24.09/everything/aarch64//store/EJ/EJGRNRY5I6XIDBWL7H5BNYJKJLKANVF6__libsepol__3.5__3.oe2409.epkg +############################################################################################################################################################################################################### 100.0% +start download https://repo.oepkgs.net/openeuler/epkg/channel/openEuler-24.09/everything/aarch64//store/TZ/TZRQZRU2PNXQXHRE32VCADWGLQG6UL36__bc__1.07.1__12.oe2409.epkg +############################################################################################################################################################################################################### 100.0% +start download https://repo.oepkgs.net/openeuler/epkg/channel/openEuler-24.09/everything/aarch64//store/WY/WYMBYMCARHXD62ZNUMN3GQ34DIWMIQ4P__filesystem__3.16__6.oe2409.epkg +############################################################################################################################################################################################################### 100.0% +start download https://repo.oepkgs.net/openeuler/epkg/channel/openEuler-24.09/everything/aarch64//store/KQ/KQ2UE3U5VFVAQORZS4ZTYCUM4QNHBYZ7__openEuler-release__24.09__55.oe2409.epkg +############################################################################################################################################################################################################### 100.0% +start download https://repo.oepkgs.net/openeuler/epkg/channel/openEuler-24.09/everything/aarch64//store/HD/HDTOK5OTTFFKSTZBBH6AIAGV4BTLC7VT__openEuler-gpg-keys__1.0__3.3.oe2409.epkg +############################################################################################################################################################################################################### 100.0% +start download https://repo.oepkgs.net/openeuler/epkg/channel/openEuler-24.09/everything/aarch64//store/EB/EBLBURHOKKIUEEFHZHMS2WYF5OOKB4L3__pcre2__10.42__8.oe2409.epkg +############################################################################################################################################################################################################### 100.0% +start download https://repo.oepkgs.net/openeuler/epkg/channel/openEuler-24.09/everything/aarch64//store/YW/YW5WTOMKY2E5DLYYMTIDIWY3XIGHNILT__info__7.0.3__3.oe2409.epkg +############################################################################################################################################################################################################### 100.0% +start download https://repo.oepkgs.net/openeuler/epkg/channel/openEuler-24.09/everything/aarch64//store/E4/E4KCO6VAAQV5AJGNPW4HIXDHFXMR4EJV__ncurses-base__6.4__8.oe2409.epkg +############################################################################################################################################################################################################### 100.0% +start install FFCRTKRFGFQ6S2YVLOSUF6PHSMRP7A2N__ncurses-libs__6.4__8.oe2409 +start install D5BOEFTRBNV3E4EXBVXDSRNTIGLGWVB7__glibc-all-langpacks__2.38__34.oe2409 +start install VX6SUOPGEVDWF6E5M2XBV53VS7IXSFM5__openEuler-repos__1.0__3.3.oe2409 +start install LO6RYZTBB2Q7ZLG6SWSICKGTEHUTBWUA__libselinux__3.5__3.oe2409 +start install EPIEEK2P5IUPO4PIOJ2BXM3QPEFTZUCT__basesystem__12__3.oe2409 +start install 2GYDDYVWYYIDGOLGTVUACSBHYVRCRJH3__setup__2.14.5__2.oe2409 +start install HCOKXTWQQUPCFPNI7DMDC6FGSDOWNACC__glibc__2.38__34.oe2409 +start install OJQAHJTY3Y7MZAXETYMTYRYSFRVVLPDC__glibc-common__2.38__34.oe2409 +start install FJXG3K2TSUYXNU4SES2K3YSTA3AHHUMB__tree__2.1.1__1.oe2409 +start install KDYRBN74LHKSZISTLMYOMTTFVLV4GPYX__readline__8.2__2.oe2409 +start install MNJPSSBS4OZJL5EB6YKVFLMV4TGVBUBA__tzdata__2024a__2.oe2409 +start install S4FBO2SOMG3GKP5OMDWP4XN5V4FY7OY5__bash__5.2.21__1.oe2409 +start install EJGRNRY5I6XIDBWL7H5BNYJKJLKANVF6__libsepol__3.5__3.oe2409 +start install TZRQZRU2PNXQXHRE32VCADWGLQG6UL36__bc__1.07.1__12.oe2409 +start install WYMBYMCARHXD62ZNUMN3GQ34DIWMIQ4P__filesystem__3.16__6.oe2409 +start install KQ2UE3U5VFVAQORZS4ZTYCUM4QNHBYZ7__openEuler-release__24.09__55.oe2409 +start install HDTOK5OTTFFKSTZBBH6AIAGV4BTLC7VT__openEuler-gpg-keys__1.0__3.3.oe2409 +start install EBLBURHOKKIUEEFHZHMS2WYF5OOKB4L3__pcre2__10.42__8.oe2409 +start install YW5WTOMKY2E5DLYYMTIDIWY3XIGHNILT__info__7.0.3__3.oe2409 +start install E4KCO6VAAQV5AJGNPW4HIXDHFXMR4EJV__ncurses-base__6.4__8.oe2409 +``` + +### 列出环境列表 +功能描述: + + 列出当前epkg所有环境($EPKG_ENVS_ROOT目录下),及当前处于哪个环境 + +命令: + + epkg env list + +返回示例: + + [small_leek@19e784a5bc38 bin]# epkg env list + Available environments(sort by time): + w1 + main + common + You are in [main] now + + + +### 创建环境 +功能描述: + + 创建新环境(创建成功后,默认激活新环境,即切换进新环境;但是不全局使能) + +命令: + + epkg create ${env_name} + +返回示例: + + [small_leek@b0e608264355 bin]# epkg create work1 + YUM --installroot directory structure created successfully in: /root/.epkg/envs/work1/profile-1 + Environment 'work1' added to PATH. + Environment 'work1' activated. + Environment 'work1' created. + re-open shell + +### 激活环境 +功能描述: + + 激活指定环境,刷新EPKG_ENV_NAME和RPMDB_DIR(用于安装软件至指定环境时,指向--dbpath),刷新PATH,包含指定环境及common环境,并将指定环境设为第一优先级 + +命令: + + epkg activate ${env_name} + +返回示例: + + [small_leek@9d991d463f89 bin]# epkg activate main + YUM --installroot directory structure created successfully in: /root/.epkg/envs/main/profile-1 + Environment 'main' activated. + re-open shell + +### 取消激活环境 +功能描述: + + 取消激活指定环境,刷新EPKG_ENV_NAME和RPMDB_DIR,刷新PATH,默认指向main环境 + +命令: + + epkg deactivate ${env_name} + +返回示例: + + [small_leek@398ec57ce780 bin]# epkg deactivate w1 + Environment 'w1' deactivated. + re-open shell + + +### 使能环境 +功能描述: + + 使能指定环境,持久化刷新PATH,包含epkg所有已使能环境,并将指定环境设为第一优先级 + +命令: + + epkg enable ${env_name} + +返回示例: + + [small_leek@5042ae77dd75 bin]# epkg enable lkp + add common to path + add main to path + add xsl to path + add lkp to path + Environment 'lkp' added to PATH. + re-open shell + +### 取消使能环境 +功能描述: + + 去使能指定环境,持久化刷新PATH,包含除指定环境外的epkg所有已使能环境 + +命令: + + epkg disable ${env_name} + +返回示例: + + [small_leek@69393675945d /]# epkg disable w4 + Warning: Don't try to disable current env! + Warning: you are trying to disable current env! + sure to continue? (y: continue, others: exit) + y + Environment 'w4' removed from PATH. + re-open shell \ No newline at end of file diff --git "a/docs/zh/docs/secGear/\344\275\277\347\224\250secGear\345\267\245\345\205\267.md" "b/docs/zh/docs/secGear/\344\275\277\347\224\250secGear\345\267\245\345\205\267.md" index f44d2a751feeb1b08a7162045fd4b3711df56d3d..8c5f2092cf9935bea9360fa966c818a7dcf7a9f1 100644 --- "a/docs/zh/docs/secGear/\344\275\277\347\224\250secGear\345\267\245\345\205\267.md" +++ "b/docs/zh/docs/secGear/\344\275\277\347\224\250secGear\345\267\245\345\205\267.md" @@ -118,7 +118,7 @@ sign_tool 包含 sign 指令(对 enclave 进行签名)和 digest 指令( | -f | OTRP_FLAG,是否支持 OTRP 标准协议,默认为 0 | 可选 | | -i | 待签名的库文件 | 必选 | | -k | 单步签名所需私钥(pem文件) | 仅 SGX 类型必选 | -| -m | 安全配置文件 mainfest.txt,由用户自行配置 | 仅 iTrustee 类型必选 | +| -m | 安全配置文件 manifest.txt,由用户自行配置 | 仅 iTrustee 类型必选 | | -o | 输出文件 | 必选 | | -p | 两步签名所需的签名服务器公钥证书(pem文件) | 必选 | | -s | 两步签名所需的已签名摘要值 | 必选 | diff --git "a/docs/zh/docs/secGear/\350\256\244\350\257\206secGear.md" "b/docs/zh/docs/secGear/\350\256\244\350\257\206secGear.md" index c7bbd241a1c0184e8933891555f2c4719bd47f3a..a02c7d1a1023c5f8a09b04d1b5ad2e5772f265d3 100644 --- "a/docs/zh/docs/secGear/\350\256\244\350\257\206secGear.md" +++ "b/docs/zh/docs/secGear/\350\256\244\350\257\206secGear.md" @@ -2,7 +2,7 @@ ## 概述 -随着云计算的快速发展,越来越多的企业把计算业务部署到云上,面对第三方云基础设施,云上用户数据安全面临着巨大的挑战。机密计算是一种基于硬件可信执行环境的隐私保护技术,旨在依赖最底层硬件,构建最小信任依赖,将操作系统、Hypervisor、基础设施、系统管理员、服务提供商等都从信任实体列表中删除,视为未经授权的实体,从而减少潜在的风险,保护可信执行环境中数据的机密性、完整性。然而随着机密计算技术的兴起,业界机密计算技术种类繁多(如主流的Intel SGX、ARM Trustzone、RSIC-V keystone等),各技术SDK也千差万别,给开发者带来较大的开发维护成本,长远考虑,还造成了机密计算应用生态隔离。为方便开发者快速构建保护云上数据安全的机密计算解决方案,openEuler推出机密计算统一开发框架secGear。 +随着云计算的快速发展,越来越多的企业把计算业务部署到云上,面对第三方云基础设施,云上用户数据安全面临着巨大的挑战。机密计算是一种基于硬件可信执行环境的隐私保护技术,旨在依赖最底层硬件,构建最小信任依赖,将操作系统、Hypervisor、基础设施、系统管理员、服务提供商等都从信任实体列表中删除,视为未经授权的实体,从而减少潜在的风险,保护可信执行环境中数据的机密性、完整性。然而随着机密计算技术的兴起,业界机密计算技术种类繁多(如主流的Intel SGX、ARM Trustzone、RISC-V keystone等),各技术SDK也千差万别,给开发者带来较大的开发维护成本,长远考虑,还造成了机密计算应用生态隔离。为方便开发者快速构建保护云上数据安全的机密计算解决方案,openEuler推出机密计算统一开发框架secGear。 ## 架构介绍 diff --git "a/docs/zh/docs/sysmonitor/sysmonitor-\344\275\277\347\224\250\346\211\213\345\206\214.md" "b/docs/zh/docs/sysmonitor/sysmonitor-\344\275\277\347\224\250\346\211\213\345\206\214.md" index 9494fb2c1a7b4b2f7fe565bbbc893e6a5634fb5b..460e50f8590cb060e913da22d86bafc7e5aa9554 100644 --- "a/docs/zh/docs/sysmonitor/sysmonitor-\344\275\277\347\224\250\346\211\213\345\206\214.md" +++ "b/docs/zh/docs/sysmonitor/sysmonitor-\344\275\277\347\224\250\346\211\213\345\206\214.md" @@ -428,7 +428,7 @@ REPORT_COMMAND="" ``` info|sysmonitor[127]: CPU usage alarm: 91.3% -info|sysmonitor[127]: cpu monitor: execute REPORT_COMMAND[sysmoniotrcpu] sucessfully +info|sysmonitor[127]: cpu monitor: execute REPORT_COMMAND[sysmoniotrcpu] successfully info|sysmonitor[127]: CPU usage resume 70.1% ``` @@ -436,7 +436,7 @@ info|sysmonitor[127]: CPU usage resume 70.1% ``` info|sysmonitor[127]: CPU 1,2,3 usage alarm: 91.3% -info|sysmonitor[127]: cpu monitor: execute REPORT_COMMAND[sysmoniotrcpu] sucessfully +info|sysmonitor[127]: cpu monitor: execute REPORT_COMMAND[sysmoniotrcpu] successfully info|sysmonitor[127]: CPU 1,2,3 usage resume 70.1% ``` diff --git a/docs/zh/docs/userguide/patch-tracking.md b/docs/zh/docs/userguide/patch-tracking.md index 7bc864e6e1e03f58afc88bd9305cd54ab563b0cc..86a34288196f4287841c24eeaddf07e98f41e301 100644 --- a/docs/zh/docs/userguide/patch-tracking.md +++ b/docs/zh/docs/userguide/patch-tracking.md @@ -288,19 +288,3 @@ rpm 包获取地址:[https://repo.openeuler.org/](https://repo.openeuler.org/) ### 码云查看 issue 及 PR 登录Gitee上进行跟踪的软件项目,在该项目的Issues和Pull Requests页签下,可以查看到名为`[patch tracking] TIME`,例如`[patch tracking] 20200713101548`的条目,该条目即是刚生成的补丁文件的issue和对应PR。 - -## FAQ - -### 访问 api.github.com Connection refused 异常 - -#### 问题描述 - -patch-tracking 运行过程中,可能会出现如下报错: - -``` - 9月 21 22:00:10 localhost.localdomain patch-tracking[36358]: 2020-09-21 22:00:10,812 - patch_tracking.util.github_api - WARNING - HTTPSConnectionPool(host='api.github.com', port=443): Max retries exceeded with url: /user (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -``` - -#### 原因分析 - -以上问题是 patch-tracking 与 GitHub API 服务之间网络访问不稳定导致,请确保在与 GitHub API 服务之间网络稳定的环境中(如使用[华为云ECS弹性云服务器](https://console.huaweicloud.com/))运行 patch-tracking。 diff --git "a/docs/zh/docs/userguide/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" "b/docs/zh/docs/userguide/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..23521f0158a7faadfb226fef5756c11e75679f3d --- /dev/null +++ "b/docs/zh/docs/userguide/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" @@ -0,0 +1,19 @@ +# 常见问题与解决方法 + +## **问题1:访问 api.github.com Connection refused 异常** + +## 问题描述 + +patch-tracking 运行过程中,可能会出现如下报错: + +``` + 9月 21 22:00:10 localhost.localdomain patch-tracking[36358]: 2020-09-21 22:00:10,812 - patch_tracking.util.github_api - WARNING - HTTPSConnectionPool(host='api.github.com', port=443): Max retries exceeded with url: /user (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +``` + +## 原因分析 + +以上问题是 patch-tracking 与 GitHub API 服务之间网络访问不稳定导致。 + +## 解决方法 + +请确保在与 GitHub API 服务之间网络稳定的环境中(如使用[华为云ECS弹性云服务器](https://console.huaweicloud.com/))运行 patch-tracking。 diff --git a/docs/zh/menu/index.md b/docs/zh/menu/index.md index d7e7bd3624098a92e866a6dfebd9c1400f5adf67..087a14cb4bd498d6238a00fa5f177cf4e86d2432 100644 --- a/docs/zh/menu/index.md +++ b/docs/zh/menu/index.md @@ -23,12 +23,12 @@ headless: true - [安装方式介绍]({{< relref "./docs/Installation/安装方式介绍.md" >}}) - [安装指导]({{< relref "./docs/Installation/安装指导.md" >}}) - [使用kickstart自动化安装]({{< relref "./docs/Installation/使用kickstart自动化安装.md" >}}) - - [FAQ]({{< relref "./docs/Installation/FAQ.md" >}}) + - [常见问题与解决方法]({{< relref "./docs/Installation/安装在服务器常见问题与解决方法.md" >}}) - [安装在树莓派]({{< relref "./docs/Installation/安装在树莓派.md" >}}) - [安装准备]({{< relref "./docs/Installation/安装准备-1.md" >}}) - [安装方式介绍]({{< relref "./docs/Installation/安装方式介绍-1.md" >}}) - [安装指导]({{< relref "./docs/Installation/安装指导-1" >}}) - - [FAQ]({{< relref "./docs/Installation/FAQ-1.md" >}}) + - [常见问题与解决方法]({{< relref "./docs/Installation/安装在树莓派常见问题与解决方法.md" >}}) - [更多资源]({{< relref "./docs/Installation/更多资源.md" >}}) - [RISC-V安装指南]({{< relref "./docs/Installation/riscv.md" >}}) - [虚拟机安装]({{< relref "./docs/Installation/riscv_qemu.md" >}}) @@ -60,7 +60,8 @@ headless: true - [动态完整性度量(DIM)]({{< relref "./docs/Administration/动态完整性度量(DIM).md" >}}) - [远程证明(鲲鹏安全库)]({{< relref "./docs/Administration/远程证明(鲲鹏安全库).md" >}}) - [可信平台控制模块(TPCM)]({{< relref "./docs/Administration/可信平台控制模块(TPCM).md" >}}) - - [FAQ]({{< relref "./docs/Administration/FAQ-54.md" >}}) + - [常见问题与解决方法]({{< relref "./docs/Administration/可信计算常见问题与解决方法.md" >}}) + - [常见问题与解决方法]({{< relref "./docs/Administration/系统管理常见问题与解决方法.md" >}}) - [运维指南]({{< relref "./docs/ops_guide/overview.md" >}}) - [运维概述]({{< relref "./docs/ops_guide/运维概述.md" >}}) - [系统资源与性能]({{< relref "./docs/ops_guide/系统资源与性能.md" >}}) @@ -149,9 +150,11 @@ headless: true - [DDE]({{< relref "./docs/desktop/dde.md" >}}) - [安装 DDE]({{< relref "./docs/desktop/安装DDE.md" >}}) - [DDE 用户指南]({{< relref "./docs/desktop/DDE-User-Manual.md" >}}) + - [常见问题与解决方法]({{< relref "./docs/desktop/dde常见问题与解决方法.md" >}}) - [XFCE]({{< relref "./docs/desktop/xfce.md" >}}) - [安装 Xfce]({{< relref "./docs/desktop/Install_XFCE.md" >}}) - [Xfce 用户指南]({{< relref "./docs/desktop/Xfce_userguide.md" >}}) + - [常见问题与解决方法]({{< relref "./docs/desktop/xfce常见问题与解决方法.md" >}}) - [Gnome]({{< relref "./docs/desktop/gnome.md" >}}) - [安装 GNOME]({{< relref "./docs/desktop/Install_GNOME.md" >}}) - [Gnome 用户指南]({{< relref "./docs/desktop/Gnome_userguide.md" >}}) @@ -179,6 +182,7 @@ headless: true - [vmtop]({{< relref "./docs/Virtualization/vmtop.md" >}}) - [LibcarePlus]({{< relref "./docs/Virtualization/LibcarePlus.md" >}}) - [Skylark虚拟机混部]({{< relref "./docs/Virtualization/Skylark.md" >}}) + - [常见问题与解决办法]({{< relref "./docs/Virtualization/常见问题与解决办法.md" >}}) - [附录]({{< relref "./docs/Virtualization/附录.md" >}}) - [StratoVirt用户指南]({{< relref "./docs/StratoVirt/StratoVirtGuide.md" >}}) - [StratoVirt介绍]({{< relref "./docs/StratoVirt/StratoVirt介绍.md" >}}) @@ -219,6 +223,7 @@ headless: true - [iSulad支持cgroup v2]({{< relref "./docs/Container/iSulad支持cgroup v2.md" >}}) - [iSulad支持CDI]({{< relref "./docs/Container/iSulad支持CDI.md" >}}) - [iSulad支持NRI]({{< relref "./docs/Container/iSulad支持NRI.md" >}}) + - [常见问题与解决方法]({{< relref "./docs/Container/isula常见问题与解决方法.md" >}}) - [附录]({{< relref "./docs/Container/附录.md" >}}) - [系统容器]({{< relref "./docs/Container/系统容器.md" >}}) - [安装指导]({{< relref "./docs/Container/安装指导.md" >}}) @@ -252,6 +257,9 @@ headless: true - [镜像管理]({{< relref "./docs/Container/镜像管理-4.md" >}}) - [统计信息]({{< relref "./docs/Container/统计信息-4.md" >}}) - [容器镜像构建]({{< relref "./docs/Container/isula-build构建工具.md" >}}) + - [使用指南]({{< relref "./docs/Container/isula-build使用指南.md" >}}) + - [常见问题与解决方法]({{< relref "./docs/Container/isula-build常见问题与解决方法.md" >}}) + - [附录]({{< relref "./docs/Container/isula-build附录.md" >}}) - [Kuasar多沙箱容器运行时]({{< relref "./docs/Container/kuasar多沙箱运行时.md" >}}) - [安装与配置]({{< relref "./docs/Container/kuasar安装与配置.md" >}}) - [使用指南]({{< relref "./docs/Container/kuasar使用指南.md" >}}) @@ -275,6 +283,7 @@ headless: true - [拆除集群]({{< relref "./docs/Kubernetes/eggo拆除集群.md" >}}) - [运行测试pod]({{< relref "./docs/Kubernetes/运行测试pod.md" >}}) - [基于containerd部署集群]({{< relref "./docs/Kubernetes/Kubernetes集群部署指南 - containerd.md" >}}) + - [常见问题与解决方法]({{< relref "./docs/Kubernetes/kubernates常见问题与解决方法.md" >}}) - [云原生混合部署rubik用户指南]({{< relref "./docs/rubik/overview.md" >}}) - [安装与部署]({{< relref "./docs/rubik/安装与部署.md" >}}) - [http接口文档]({{< relref "./docs/rubik/http接口文档.md" >}}) @@ -295,7 +304,7 @@ headless: true - [认识Kmesh]({{< relref "./docs/Kmesh/认识Kmesh.md" >}}) - [安装与部署]({{< relref "./docs/Kmesh/安装与部署.md" >}}) - [使用方法]({{< relref "./docs/Kmesh/使用方法.md" >}}) - - [常见问题与解决办法]({{< relref "./docs/Kmesh/常见问题与解决办法.md" >}}) + - [常见问题与解决方法]({{< relref "./docs/Kmesh/常见问题与解决方法.md" >}}) - [附录]({{< relref "./docs/Kmesh/附录.md" >}}) - [Autopkg用户指南]({{< relref "./docs/Autopkg/autopkg.md" >}}) - [边缘计算](#) @@ -307,7 +316,7 @@ headless: true - [认识ROS]({{< relref "./docs/ROS/认识ROS.md" >}}) - [安装与部署]({{< relref "./docs/ROS/安装与部署.md" >}}) - [使用方法]({{< relref "./docs/ROS/使用方法.md" >}}) - - [常见问题与解决办法]({{< relref "./docs/ROS/常见问题与解决方法.md" >}}) + - [常见问题与解决方法]({{< relref "./docs/ROS/常见问题与解决方法.md" >}}) - [附录]({{< relref "./docs/ROS/附录.md" >}}) - [openEuler DevKit](#) - [isocut 使用指南]({{< relref "./docs/TailorCustom/isocut使用指南.md" >}}) @@ -317,9 +326,11 @@ headless: true - [EulerLauncher 用户指南]({{< relref "./docs/EulerLauncher/overall.md" >}}) - [在Windows下安装与运行EulerLauncher]({{< relref "./docs/EulerLauncher/win-user-manual.md" >}}) - [在MacOS下安装与运行EulerLauncher]({{< relref "./docs/EulerLauncher/mac-user-manual.md" >}}) + - [常见问题与解决方法]({{< relref "./docs/TailorCustom/常见问题与解决方法.md" >}}) - [openEuler DevOps](#) - [patch-tracking]({{< relref "./docs/userguide/patch-tracking.md" >}}) - [pkgship]({{< relref "./docs/userguide/pkgship.md" >}}) + - [常见问题与解决方法]({{< relref "./docs/userguide/常见问题与解决方法.md" >}}) - [应用开发](#) - [应用开发指南]({{< relref "./docs/ApplicationDev/application-development.md" >}}) - [开发环境准备]({{< relref "./docs/ApplicationDev/开发环境准备.md" >}}) @@ -328,7 +339,7 @@ headless: true - [使用make编译]({{< relref "./docs/ApplicationDev/使用make编译.md" >}}) - [使用JDK编译]({{< relref "./docs/ApplicationDev/使用JDK编译.md" >}}) - [构建RPM包]({{< relref "./docs/ApplicationDev/构建RPM包.md" >}}) - - [FAQ]({{< relref "./docs/ApplicationDev/FAQ.md" >}}) + - [常见问题与解决方法]({{< relref "./docs/ApplicationDev/常见问题与解决方法.md" >}}) - [GCC用户指南]({{< relref "./docs/GCC/overview.md" >}}) - [内核反馈优化特性用户指南]({{< relref "./docs/GCC/内核反馈优化特性用户指南.md" >}}) - [链接时优化特性用户指南]({{< relref "./docs/GCC/链接时优化特性用户指南.md" >}})