我从 Linux 开始,因为我的研究需要它。由于我时间不多,也没有本地专家支持,所以这是一次基于需求的自学体验。我必须安装一个工具,我得到了这个安装脚本,下载了一些库并创建了依赖项。但我发现它包含一些在 RED-HAT 上运行但在 Ubuntu 中不起作用的命令(如 yum)。由于我缺乏知识,我想知道代码中是否还有其他部分需要修改才能使其工作。你能帮帮我吗?
提前致谢。
脚本:
#!/bin/sh
set -e -x
#######################################################################
# cpanm
# version 1.6908
# DEPENDENCIES
yum install -y make gcc tar curl perl perl-Module-Build
# go to bin
cd /usr/bin
# download script, make it exec
curl -LO https://raw.github.com/miyagawa/cpanminus/1.6908/cpanm
chmod +x cpanm
#######################################################################
# prinseq
# version 20.4
# create your base folder
mkdir -p /opt/prinseq
cd /opt/prinseq
BASE_FOLDER=/opt/prinseq
# prinseq native deps: cairo libs
yum install -y cairo cairo-devel
# random prereqs
cpanm Test::[email protected]
cpanm Pod::[email protected]
# for some reason, this is [email protected]
cpanm [email protected]
cpanm common::[email protected]
cpanm JSON::[email protected]
cpanm [email protected]
cpanm Getopt::[email protected]
cpanm Pod::[email protected]
cpanm Digest::[email protected]
cpanm [email protected]
cpanm MIME::[email protected]
# update module::build
cpanm Module::[email protected]
cpanm JSON::[email protected]
cpanm CPAN::Meta::[email protected]
cpanm Parse::CPAN::[email protected]
cpanm CPAN::Meta::[email protected]
cpanm CPAN::[email protected]
cpanm Perl::[email protected]
cpanm Module::[email protected]
# cairo bindings
cpanm ExtUtils::[email protected]
cpanm ExtUtils::[email protected]
cpanm [email protected]
# stats related
cpanm Math::[email protected]
cpanm Math::Cephes::[email protected]
cpanm Text::[email protected]
cpanm [email protected]
# need old version of contextual::return
cpanm http://search.cpan.org/CPAN/authors/id/D/DC/DCONWAY/Contextual-Return-v0.2.1.tar.gz
cpanm Statistics::[email protected]
# download prinseq, install
wget http://resources.ohnosequences.com/prinseq/prinseq-lite-0.20.3.tar.gz
tar -xzf prinseq-lite-0.20.4.tar.gz
rm prinseq-lite-0.20.4.tar.gz
chmod +x prinseq-lite-0.20.4/*.pl
# links
ln -sf $BASE_FOLDER/prinseq-lite-0.20.3/*.pl /usr/bin/
答案1
你问的是代码是否有部分除了yum
通话之外应当修改。
有时很难确切地知道这一点,因为脚本自动下载和使用的软件(cpanm
)可能存在错误或其他问题,导致其在不同发行版上的运行方式不同。我怀疑这是不是确实如此,但我不能确定。
还可能存在其他问题。例如,您的脚本下载cpanm
到/usr/bin
,这没有问题,但是:
- 如果脚本将其下载到
PATH
RHEL/Fedora 系统中通常会列出的目录(而不是 Ubuntu 中列出的目录),则可能会导致脚本失败。但这里的情况并非如此。 cpanm
在 Ubuntu 官方软件源中提供。您可以使用 来安装它,然后sudo apt-get update
按sudo apt-get install cpanminus
。如果已安装,则您不应运行此脚本(按编写方式),因为它可能会覆盖现有的cpanm
,从而导致安装的文件与本地软件包数据库认为已安装的文件不同。因此,我建议在使用此脚本之前检查以确保软件包cpanminus
未安装。- 如果
cpanminus
软件包已安装,您可以将其删除,或者您可以修改脚本以不下载cpanm
其本身。(这种方法是否可行取决于您对所cpanm
下载特定版本的需求有多具体,但很有可能会起作用。)或者您可以修改脚本以将软件包下载cpanm
到另一个目录,例如/usr/local/bin
或/opt/bin
。要确保下载的脚本cpanm
是正在运行的脚本,请确保下载到的目录出现在您的PATH
之前中/usr/bin
。 - 可能还存在其他类似的细微差别。
话虽如此,我们可以看看是否还有其他明显的变化(除了改为后面跟着yum install -y ...
,和apt-get update
apt-get install -y ...
按照 kraxor 的解释更改包名称) 是必需的,通过列举您正在使用的所有命令 - 除了yum
- 并查看其中是否有任何命令缺失或在 Ubuntu 上的工作方式与在 RHEL/Fedora 上的工作方式有很大不同。
您有(按首次出现的顺序):
set
:这是 shell 的内置命令,在大多数 Bourne 风格的 shell 中其工作方式相同;无需进行更改。cd
:这是一个 shell 内置函数,在基本上每个 Unix shell 中其工作方式都相同。curl
:虽然wget
在 Ubuntu 系统上更常用并且curl
默认情况下未安装,但如果未安装,您可以简单地使用 进行安装sudo apt-get update && sudo apt-get install curl
。我不建议将其添加到您的脚本中;只需在第一次使用脚本之前自己运行它即可。您的脚本同时使用和有点奇怪——wget
大多数curl
脚本编写者选择其中一个——但只要安装了两者,同时使用两者也没有问题。chmod
:这是一个标准命令,在所有类 Unix 系统上的工作原理几乎完全相同。cpanm
cpanm
:这是脚本在使用前下载并安装的命令。除非它具有使其在 Ubuntu 上工作方式不同的特性,否则它应该工作方式相同。请参阅上文关于使用 Ubuntu 官方提供的版本的可能性。tar
:这是一个标准命令,虽然有些标志是 GNU/Linux 特有的,但它在所有最近的 GNU/Linux 系统(包括过去十年左右的任何版本的 Ubuntu、RHEL 或 Fedora)上的工作方式基本相同。此外,所使用的标志(x
、z
和f
)基本上得到了所有实现的支持tar
。rm
:就像chmod
,这是一个标准命令,在所有类 Unix 系统上其工作方式几乎完全相同。ln
:与chmod
和一样rm
,这是一个标准命令,在所有类 Unix 系统上其工作方式几乎完全相同。
答案2
主要的区别应该是Ubuntu使用apt
而不是yum
,并且一些软件包有不同的名称。
相当于。yum install -y
apt-get install -y
cairo
和cairo-devel
应改为libcairo2
和libcairo2-dev
。
通常我们不会单独安装make
、gcc
等,而是使用build-essential
元包。
除此之外,其他命令看起来与发行版无关。尝试yum
使用这些指南“翻译”命令并在 Ubuntu 系统上测试运行它们。如果它们成功运行,那么你应该没问题。