今天公司的产品要适配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所安装的包都是默认的路径,如何制定路径安装啊。。在线等答案。。
发表评论