我正在尝试从 solaris 迁移到 linux。
在迁移文件系统、脚本和文件时我可能会遇到哪些障碍? sh 和 ksh 脚本是否需要进行任何更改?
我想知道从最终用户的角度来看 solaris 和 linux 之间有什么区别?
答案1
这些年来我经历过的一些事情:
如今,redhat 提供的 ksh 非常好。pdksh 不太好。ksh 有打印语句,而 bash 没有。
如果您有打印要求,那么 lp/lpr/cups 需要彻底检查。
Solaris grep/awk 命令可能是一个问题。
即使您决定使用 ksh,redhat 提供的 bash 也有一个鲜为人知的功能标志 --rpm-requires,您可以使用它来分析脚本:
$ bash --rpm-requires conman
executable(/etc/rc.d/init.d/functions)
executable(/etc/sysconfig/network)
executable(/etc/sysconfig/conman)
executable(echo_failure)
executable(echo_failure)
executable(daemon)
executable(touch)
executable(echo_failure)
executable(killproc)
executable(rm)
executable(status)
executable(killproc)
现在我们知道了此脚本需要执行哪些命令。如果您针对脚本目录运行它,您可以快速找出有多少使用 awk/sed 等。
确保检查 solaris 中的所有 ulimit 设置,检查 solaris /etc/system 文件中的信号量/共享内存设置,并检查是否可以在 linux sysctl 中进行适当的设置。
/var/adm (Solaris) 和 /var/log (Linux)
字节序 - 如果您在系统之间迁移数据/二进制文件,那么您需要确保已经处理好任何字节序转换,Sparc 是大端序,Intel 是小端序。
答案2
我们目前正在做同样的事情。我们发现的问题:
- 不贾斯等效。相反,我不得不编写由 Kickstart 中的 %post 调用的自定义 shell 脚本来实施安全策略,但 Linux 中的安全控制似乎不如 Solaris。(我们还在考虑使用 Puppet 来管理配置。)
- 没有真正的RBAC实现。人们似乎更依赖它
sudo
,它有其优点和缺点。我非常喜欢 Solaris 中的功能,我可以将某些权限委托给非 root 用户,例如控制特定的 SMF 服务。 - 没有 SMF。服务依赖性和自动重启服务内置于,
init
无需额外的产品,如monit
。 - 常规 BSD 与 SysV 语法 - 例如
ps -ef
vsps aux
。(在这种情况下,我实际上通常发现后者更有用,但我们拥有的许多脚本都是硬编码为使用 Solaris 样式的。) bonding
似乎不像 IP 多路径 (IPMP) 那样灵活。ifconfig e1000g0 group test
非常简单!- 类似地,存储多路径在 Solaris 上似乎更直接一些,但这并不是说它
multipathd
在 Linux 上不好;实际上它似乎确实有效,但我不喜欢它的配置格式 :-) - 区域!我使用区域很多。它们对于启动快速测试环境非常有用。启动整个虚拟机并不那么快速或轻松。
在大多数情况下,您的 shell 脚本应该可以在 Linux 上正常运行。像bash
和 这样的 shell dash
(在 Linux 系统上通常符号链接为/bin/sh
)sh
在调用时通常会使用模拟/bin/sh
。
除了缺少一些更“企业”的功能(例如好的由于安全控制的原因,Linux 迁移应该相当简单。如果您正在迁移数据库或其他二进制数据格式,请注意字节序差异(SPARC 是大端,x86 是小端)。
答案3
Solaris 10 及更早版本(我不知道 11 版)也有不同版本的 cron,其行为可能与 Linux 版本不同。*/5
快捷方式不起作用,其他快捷方式(例如 @daily)可能不起作用。这些不应该导致从 Solaris 转到 Linux 出现问题,但可能会导致其他问题。
我隐约记得 Solaris 上星期几字段从星期一开始,但在快速的 Google 搜索中我没有找到任何关于它的提及。
显然,任何完整的文件路径都需要检查,因为 Solaris 提供了很多工具/opt
,而/usr/ucb
Linux 也提供/usr
如果您的脚本中包含守护进程的用户名和 UID,则它们可能会导致问题,并且在传输某些文件时可能需要更改它们的所有权。仅仅因为它们www-data
在 Solaris 上属于所有者并不意味着在将它们传输到 Linux 后它们仍属于所有者,并且根据您的发行版和版本,可能需要httpd
或apache
。