我有一个bash 4.2的基础镜像,我想把它升级到5.1
我尝试将其解压缩,然后将path变量设置为该文件夹:
RUN curl -o /tmp/bash-5.1.tar.gz ${BASH_URL}/bash/5.1/bash-5.1.tar.gz \
&& tar -xvf /tmp/bash-5.1.tar.gz -C /usr/local/bin \
&& rm /tmp/bash-5.1.tar.gz
ENV PATH=/usr/local/bin/bash-5.1:$PATH但是,当我构建镜像时,它的所有容器仍然运行bash4.2。我在.tar.gz包中也找不到像grep这样的命令,尽管它不在官方网站上,所以我甚至不能真正确定我应该在哪里设置PATH。这是tarball的第一层
ABOUT-NLS bashline.c conftypes.h findcmd.c lib parse.y shell.c unwind_prot.c
aclocal.m4 bashline.h copy_cmd.c findcmd.h list.c patchlevel.h shell.h unwind_prot.h
alias.c bashtypes.h COPYING flags.c locale.c pathexp.c sig.c variables.c
alias.h bracecomp.c cross-build flags.h m4 pathexp.h sig.h variables.h
array.c braces.c CWRU general.c mailcheck.c pathnames.h.in siglist.c version.c
arrayfunc.c builtins dispose_cmd.c general.h mailcheck.h pcomplete.c siglist.h xmalloc.c
arrayfunc.h builtins.h dispose_cmd.h hashcmd.c make_cmd.c pcomplete.h stringlib.c xmalloc.h
array.h ChangeLog doc hashcmd.h make_cmd.h pcomplib.c subst.c Y2K
assoc.c CHANGES error.c hashlib.c Makefile.in po subst.h y.tab.c
assoc.h command.h error.h hashlib.h MANIFEST POSIX support y.tab.h
AUTHORS COMPAT eval.c include mksyntax.c print_cmd.c syntax.h
bashansi.h config-bot.h examples input.c NEWS quit.h test.c
bashhist.c config.h.in execute_cmd.c input.h nojobs.c RBASH test.h
bashhist.h config-top.h execute_cmd.h INSTALL NOTES README tests
bashintl.h configure expr.c jobs.c parser-built redir.c trap.c
bashjmp.h configure.ac externs.h jobs.h parser.h redir.h trap.h我本以为会看到像grep、echo和chmod之类的东西。
我的目标只是能够构建一个dockerfile并让它运行bash5.1。除了这一节之外,文件中的其他所有内容都可以正常工作。
发布于 2021-05-26 13:19:46
您安装的bash根本不包含bash二进制文件;它包含需要在使用新tarball之前编译和安装的C源代码。
此外,如果二进制文件名为bash,并且您将其安装在/usr/local/bin/bash中,则您的PATH应该包含/usr/local/bin,而不是各个二进制文件的实际名称。(参见Should PATH contain directories or full paths to binaries?) ...但很有可能它已经这样做了。
所以,简而言之,
RUN curl -o /tmp/bash-5.1.tar.gz ${BASH_URL}/bash/5.1/bash-5.1.tar.gz \
&& tar -xvf /tmp/bash-5.1.tar.gz -C /tmp \
&& cd /tmp/bash-5.1 \
&& ./configure --prefix=/usr/local \
&& make \
&& make install
# Probably not actually necessary
ENV PATH=/usr/local/bin:$PATH但是,阅读tarball中的INSTALL文件,可能会研究一下您的发行版的Bash到底是如何构建的,这样您就可以提供相同的配置参数,等等。
在某种程度上,什么才能工作还取决于您的目标平台。
安装的二进制文件名为bash,而不是grep。如果你想安装一个新版本的grep,那是一个单独的包(如果你在Linux上,就是GNU)。外部命令chmod也是如此。echo是shell中的一个内置命令,因此它不会被编译成单独的二进制文件。
对于许多Linux发行版来说,安装更新的Bash的最简单的方法就是找到一个二进制存储库,其中包含一个可安装的、打包的更新版本,您可以直接使用apt install或类似的方式。
https://stackoverflow.com/questions/67698691
复制相似问题