linux - 获取 debian-slim 的次要版本
问题描述
我正在设置我的容器创建管道,我需要能够获得我的容器所基于的 debian-slim 构建的主要和次要版本。
我尝试了以下命令:
docker run -it --rm -a stdout --entrypoint lsb_release MyContainer:1.0.0 -a
但这只是返回:
分销商 ID:Debian 描述:Debian GNU/Linux 10(破坏者) 发布:10 代号:克星
未列出次要版本。
我也试过:
docker run -it --rm -a stdout --entrypoint cat MyContainer:1.0.0 "/etc/os-release"
但这仅输出:
PRETTY_NAME="Debian GNU/Linux 10 (buster)" NAME="Debian GNU/Linux" VERSION_ID="10" VERSION="10 (破坏者)" VERSION_CODENAME=破坏者 ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/"
再次,没有次要版本。
有没有办法获得次要版本?容器操作系统甚至知道它的完整版本号吗?
解决方案
事实上,在过去的 Debian9 上,您可以使用lsb_release -a
以下方式获取次要版本:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 9.5 (stretch)
Release: 9.5
Codename: stretch
你可能知道,/usr/bin/lsb_release
最终会调用/usr/lib/python3/dist-packages/lsb_release.py
,这个脚本在 debian9 和 debian10 之间的实现差异造成了差异。
在 debian9 中,它是下一个:
def get_distro_information(): lsbinfo = get_lsb_information() # OS is only used inside guess_debian_release anyway for key in ('ID', 'RELEASE', 'CODENAME', 'DESCRIPTION',): if key not in lsbinfo: distinfo = guess_debian_release() distinfo.update(lsbinfo) return distinfo else: return lsbinfo
get_lsb_release
将获取 的内容/etc/lsb-release
,但在 debian 版本中没有文件,因此它返回 none。然后程序必须回退到guess_debian_release
将从中获取内容的程序/etc/debian_version
,因此您将获得次要版本。在 debian10 中,它是下一个:
def get_distro_information(): lsbinfo = get_os_release() # OS is only used inside guess_debian_release anyway for key in ('ID', 'RELEASE', 'CODENAME', 'DESCRIPTION',): if key not in lsbinfo: distinfo = guess_debian_release() distinfo.update(lsbinfo) return distinfo else: return lsbinfo
get_os_release
将获取 的内容/usr/lib/os-release
,接下来是内容:PRETTY_NAME="Debian GNU/Linux 10 (buster)" NAME="Debian GNU/Linux" VERSION_ID="10" VERSION="10 (buster)" VERSION_CODENAME=buster ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/"
由于它已经得到了版本,所以不再回退到
guess_debian_release
,所以你没有得到次要版本。我猜的好处是如果不使用guess_debian_release
,它会使用更少的IO操作,但在我看来,真的无数(也可能是一些硬编码猜测)。
最后,作为一种解决方法,在 debian10 上,您可以使用 next 来获得与 debian 9 相同的行为:
$ LSB_OS_RELEASE="" lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 10.4 (buster)
Release: 10.4
Codename: buster
推荐阅读
- javascript - 无法在附加的 div 上运行 jquery
- python-3.x - 如何将 AWS Kinesis 视频流的音频流输出馈送到 AWS Transcribe 服务?
- javascript - getElementsByTagName 的错误用例?
- wordpress - 从后端 woocommerce 添加时立即共享产品
- python-3.x - Python - 列表索引必须是整数或切片,而不是 str
- php - 将文件写入新创建的文件夹时访问被拒绝
- ruby-on-rails - 设计令牌身份验证使用密码重置令牌查找用户
- ios - URL 图像不适用于 Swift Playgrounds 中的 UIButton
- swift - 如何在 Cocoa 应用程序中设置自定义标签顺序
- jbpm - 无法访问 jBPM 控制台