suse吃瓜指南

今天公司的产品要适配suse环境,产品是Python写的用的django

开搞!

第一步,Vcenter自己划虚拟机、装suse系统

第二部,<body>开搞<body>

本身产品使用的有:

python3.7.3、mariadb15.1、nginx、redis等等

原本的产品安装包是rpm封装的centos的正常运行的环境。

开始适配的我。。直接解压了原来的rpm包。

果不其然撒。。

ImportError: /usr/lib64/libssl.so.10: version `libssl.so.10 not found (required by /usr/local/python/lib/python3.7/lib-dynload/_ssl.cpython-37m-x86_64-linux-gnu.so)

其实排查了产品本身的日志也发现。找不到libssl.so.10以及对应的包

说白了,suse中对应的包的命名空间和centos是不一样的,按照这个名字是根本找不到的

中间经历过一顿谜一样的操作(编译openssl、编译libssl.so.10)后。。。

还是决定。。不耿直了。。技术不够。直接编译有问题的产品吧。。。

现在通过排查日志文档发现,出问题的有:python、mysql(其实和mariadb基本一样,mysql大家能熟悉点,就直接mysql吧)、nginx这三个(不要问我为啥redis没事、我也想知道)

那就说说卡住我的几个坑:

首先suse的包管理工具是zypper基本哈桑yum命令都可以适配吧:

linux:/ # zypper 用法: zypper [--全局选项] <命令> [--命令选项] [参数] zypper <子命令> [--命令选项] [参数] 全局选项: --help, -h 帮助。 --version, -V 输出版本号。 --promptids 输出 zypper 的用户提示列表。 --config, -c <文件> 使用指定而非默认的配置文件。 --userdata <字符串> 用户自定义的用于历史和插件中的事务 ID。 --quiet, -q 压制正常输出,仅打印错误消息。 --verbose, -v 增加消息的详细程度(调试模式)。 --color --no-color 若 tty 支持是否使用有颜色输出。 --no-abbrev, -A 在表格中不要缩写文本。 --table-style, -s 表格样式(整数)。 --non-interactive, -n 不询问任何选择,自动使用默认回复。 --non-interactive-include-reboot-patches 不把那些设置了"建议重启"旗标 的补丁视为可与用户交互的。 --xmlout, -x 切换到 XML 输出。 --ignore-unknown, -i 忽略未知软件包。 --reposd-dir, -D <文件夹> 使用另一个软件源定义文件文件夹。 --cache-dir, -C <文件夹> 为全部缓存使用另一个文件夹。 --raw-cache-dir <文件夹> 使用另一个原始元数据缓存文件夹。 --solv-cache-dir <文件夹> 使用另一个 solv 文件缓存文件夹。 --pkg-cache-dir <文件夹> 使用另一个软件包缓存文件夹。 软件源选项: --no-gpg-checks 忽略失败的 GPG 检查并继续。 --gpg-auto-import-keys 自动信任并导入新软件源签名密钥。 --plus-repo, -p <URI> 使用一个附加软件源。 --plus-content <标签> 额外使用提供了某个特定关键字的已禁用软件源。 尝试 --plus-content debug 可启用标明其提供了调试软件包的源。 --disable-repositories 不从软件源读取元数据。 --no-refresh 不刷新软件源。 --no-cd 忽略 CD/DVD 软件源。 --no-remote 忽略远程软件源。 --releasever 设置全部 .repo 文件中 $releasever 的值(默认:发行版版本号) 目标选项: --root, -R <目录> 在一个不同的根目录下操作。 --disable-system-resolvables 不读取已安装软件包。 命令: help, ? 打印帮助。 shell, sh 一次性接受多个命令。 软件源管理: repos, lr 列出全部已定义的软件源。 addrepo, ar 添加一个新软件源。 removerepo, rr 移除指定软件源。 renamerepo, nr 重命名指定软件源。 modifyrepo, mr 修改指定软件源。 refresh, ref 刷新全部软件源。 clean 清理本地缓存。 服务管理: services, ls 列出全部已定义服务。 addservice, as 添加一个新服务。 modifyservice, ms 修改指定服务。 removeservice, rs 移除指定服务。 refresh-services, refs 刷新全部服务。 软件管理: install, in 安装软件包。 remove, rm 移除软件包。 verify, ve 校验软件包的依赖关系完整性。 source-install, si 安装源代码包及其编译依赖。 install-new-recommends, inr 安装已安装软件包推荐的新增软件包。 更新管理: update, up 用新版本更新已安装软件包。 list-updates, lu 列出可用更新。 patch 安装所需补丁。 list-patches, lp 列出所需补丁。 dist-upgrade, dup 执行发行版升级。 patch-check, pchk 检查补丁。 查询: search, se 搜索匹配一个模式的软件包。 info, if 显示指定软件包的完整信息。 patch-info 显示指定补丁的完整信息。 pattern-info 显示指定软件集的完整信息。 product-info 显示指定产品的完整信息。 patches, pch 列出全部可用补丁。 packages, pa 列出全部可用软件包。 patterns, pt 列出全部可用软件集。 products, pd 列出全部可用产品。 what-provides, wp 列出能够提供指定功能的软件包。 软件包锁定: addlock, al 添加一个软件包锁定。 removelock, rl 移除一个软件包锁定。 locks, ll 列出当前的软件包锁定。 cleanlocks, cl 移除未使用的锁定。 其它命令: versioncmp, vcmp 比较两个版本字符串。 targetos, tos 打印目标操作系统 ID 字符串。 licenses 打印已安装软件包的许可证和最终用户协议的汇总报告。 download 下载通过命令行指定的 RPM 到本地文件夹。 source-download 下载全部已安装软件包的源代码 RPM 到本地文件夹。 子命令: subcommand 列出可用子命令。

当然,为了保证包的数量和质量,一个好点的源还是很有必要的:

zypper ar -f http://mirrors.163.com/openSUSE/distribution/leap/15.3/repo/oss/ "openSUSE Leap:15.3"

直接贴吧

另外的话。zypper安装的包和centos的包还是有所不同的

比如说你想安装上边报错的libssl:

那我zypper search libssl:

好开心,找到了。install!

然后发现。。emm。。什么都没有改变。。

然后突发奇想。。要不然直接search ssl?

果然机智如我。。

其实这里可以看到好多的包在这里名字都不一样。

我发现在mysql、python甚至nginx,libssl很多都是软链的,最终找到的都是:

而在suse中。。

根本对应不上。。所以就报错

重新编译完成后就好多了。

重点采纳:

1、报错:

ImportError: /usr/lib64/libssl.so.10: version `libssl.so.10 not found (required by /usr/local/python/lib/python3.7/lib-dynload/_ssl.cpython-37m-x86_64-linux-gnu.so)

2、zypper源:

zypper ar -f http://mirrors.163.com/openSUSE/distribution/leap/15.3/repo/oss/ "openSUSE Leap:15.3"

3、zypper命令参考:

linux:/ # zypper 用法: zypper [--全局选项] <命令> [--命令选项] [参数] zypper <子命令> [--命令选项] [参数] 全局选项: --help, -h 帮助。 --version, -V 输出版本号。 --promptids 输出 zypper 的用户提示列表。 --config, -c <文件> 使用指定而非默认的配置文件。 --userdata <字符串> 用户自定义的用于历史和插件中的事务 ID。 --quiet, -q 压制正常输出,仅打印错误消息。 --verbose, -v 增加消息的详细程度(调试模式)。 --color --no-color 若 tty 支持是否使用有颜色输出。 --no-abbrev, -A 在表格中不要缩写文本。 --table-style, -s 表格样式(整数)。 --non-interactive, -n 不询问任何选择,自动使用默认回复。 --non-interactive-include-reboot-patches 不把那些设置了"建议重启"旗标 的补丁视为可与用户交互的。 --xmlout, -x 切换到 XML 输出。 --ignore-unknown, -i 忽略未知软件包。 --reposd-dir, -D <文件夹> 使用另一个软件源定义文件文件夹。 --cache-dir, -C <文件夹> 为全部缓存使用另一个文件夹。 --raw-cache-dir <文件夹> 使用另一个原始元数据缓存文件夹。 --solv-cache-dir <文件夹> 使用另一个 solv 文件缓存文件夹。 --pkg-cache-dir <文件夹> 使用另一个软件包缓存文件夹。 软件源选项: --no-gpg-checks 忽略失败的 GPG 检查并继续。 --gpg-auto-import-keys 自动信任并导入新软件源签名密钥。 --plus-repo, -p <URI> 使用一个附加软件源。 --plus-content <标签> 额外使用提供了某个特定关键字的已禁用软件源。 尝试 --plus-content debug 可启用标明其提供了调试软件包的源。 --disable-repositories 不从软件源读取元数据。 --no-refresh 不刷新软件源。 --no-cd 忽略 CD/DVD 软件源。 --no-remote 忽略远程软件源。 --releasever 设置全部 .repo 文件中 $releasever 的值(默认:发行版版本号) 目标选项: --root, -R <目录> 在一个不同的根目录下操作。 --disable-system-resolvables 不读取已安装软件包。 命令: help, ? 打印帮助。 shell, sh 一次性接受多个命令。 软件源管理: repos, lr 列出全部已定义的软件源。 addrepo, ar 添加一个新软件源。 removerepo, rr 移除指定软件源。 renamerepo, nr 重命名指定软件源。 modifyrepo, mr 修改指定软件源。 refresh, ref 刷新全部软件源。 clean 清理本地缓存。 服务管理: services, ls 列出全部已定义服务。 addservice, as 添加一个新服务。 modifyservice, ms 修改指定服务。 removeservice, rs 移除指定服务。 refresh-services, refs 刷新全部服务。 软件管理: install, in 安装软件包。 remove, rm 移除软件包。 verify, ve 校验软件包的依赖关系完整性。 source-install, si 安装源代码包及其编译依赖。 install-new-recommends, inr 安装已安装软件包推荐的新增软件包。 更新管理: update, up 用新版本更新已安装软件包。 list-updates, lu 列出可用更新。 patch 安装所需补丁。 list-patches, lp 列出所需补丁。 dist-upgrade, dup 执行发行版升级。 patch-check, pchk 检查补丁。 查询: search, se 搜索匹配一个模式的软件包。 info, if 显示指定软件包的完整信息。 patch-info 显示指定补丁的完整信息。 pattern-info 显示指定软件集的完整信息。 product-info 显示指定产品的完整信息。 patches, pch 列出全部可用补丁。 packages, pa 列出全部可用软件包。 patterns, pt 列出全部可用软件集。 products, pd 列出全部可用产品。 what-provides, wp 列出能够提供指定功能的软件包。 软件包锁定: addlock, al 添加一个软件包锁定。 removelock, rl 移除一个软件包锁定。 locks, ll 列出当前的软件包锁定。 cleanlocks, cl 移除未使用的锁定。 其它命令: versioncmp, vcmp 比较两个版本字符串。 targetos, tos 打印目标操作系统 ID 字符串。 licenses 打印已安装软件包的许可证和最终用户协议的汇总报告。 download 下载通过命令行指定的 RPM 到本地文件夹。 source-download 下载全部已安装软件包的源代码 RPM 到本地文件夹。 子命令: subcommand 列出可用子命令。

4、centos适配suse时,多用search看下真正需要的包叫什么。

另外,各位大佬:

zypper所安装的包都是默认的路径,如何制定路径安装啊。。在线等答案。。