【问题标题】:cloud VM instance broken packages after updating packages to earlier version将软件包更新到早期版本后,云 VM 实例损坏的软件包
【发布时间】:2016-06-28 01:13:21
【问题描述】:

我进行了 apt-get 升级,因为我们的生产服务器的加载时间约为 40 秒。我在升级之前和之后都没有快照。(虽然有六个月大的快照)加载时间提高到 15 秒,但我们的 erizo 服务停止工作。 Erizo 也在该实例上运行。重新启动服务没有帮助,所以我尝试将软件包升级到以前的版本(https://askubuntu.com/questions/138284/how-to-downgrade-a-package-via-apt-get),就像它一样,但几乎每个软件包都有一个错误:以前的软件包版本不存在。(这很奇怪,因为我复制了 dpkg -l) 的输出

其中只有少数成功降级,但在将 e1fslibs 升级到以前的版本时出现严重错误。:以下软件包具有未满足的依赖关系: e2fsprogs: PreDepends: e2fslibs

不知何故搞砸了 initramfs 和/或 initramfs-tools,现在实例正在运行,但我无法进入它。

  • 正在连接谷歌云平台中的实例:正在连接... 无法连接,正在重试 (1/3)。
  • google cloud shell 无法 gcloud 计算 ssh:权限被拒绝(公钥)。
  • 在本地使用 gcloud 也会说 Permission denied (publickey)。

我检查了以下内容:

  • 定义了项目公钥;没有定义任何实例公钥或任何其他元数据 (Google Cloud SSH Keys)
  • 在谷歌云平台>>计算引擎>>虚拟机实例>>权限>>我看到'计算'被禁用了
  • 通过导航到串行控制台输出页面并查找以 accounts-from-metadata: 字符串为前缀的输出行来验证守护程序是否正在运行。如果您使用的是标准映像,但在串行控制台输出中看不到这些输出前缀,则守护程序可能已停止--> 我没有看到这个,所以我预计它没有运行。
  • 检查防火墙规则:(gcloud计算防火墙规则列表) default-allow-ssh default 0.0.0.0/0 tcp:22 //规则存在

以下软件包已升级:

  • 适合
  • apt-transport-https
  • apt-utils
  • binutils
  • 云初始化
  • cloud-initramfs-growroot
  • cloud-initramfs-rescuevol
  • comerr-dev
  • dosfstools
  • e2fslibs
  • e2fsprogs
  • gce-cloud-config
  • gce 守护进程
  • gce-imagebundle
  • gce 启动脚本
  • google-cloud-sdk
  • 横向客户端
  • 风景常见的 l
  • ibapt-inst1.4 libapt-pkg4.12
  • libcomerr2
  • libss2
  • libudev0 mountall
  • nginx
  • nginx-common
  • nginx-full
  • ntp
  • ntpdate
  • 程序
  • python-apt
  • python-apt-common
  • python-lazr.restfulclient
  • udev
  • 无人值守升级
  • 更新管理器核心
  • 暴发户
  • 哎呀
  • x11-utils

这是从串行输出中获取的:: - mountall:事件失败 - 未配置landscape-client,请运行landscape-config。

接下来要做什么?

  • 将启动脚本应用到正在运行的实例(遵循此https://cloud.google.com/compute/docs/startupscript)并尝试执行 Apt-get 升级?

  • 尝试在 google cloud shell 中(再次)创建一个新的公钥来访问实例?

  • 在 google cloud shell 中第一次在键入 gcloud compute --project "enduring-palace-762" ssh --zone "europe-west1-c" "tta-media-test-2" 后生成此文件 警告:Google Compute Engine 的 SSH 私钥文件不存在。警告:您没有 Google Compute Engine 的 SSH 密钥。警告:将执行 [/usr/bin/ssh-keygen] 以生成密钥。这个工具需要创建目录/home/developer/.ssh
  • 生成的公钥存储在 /home/developer/.ssh /google_compute_engine.pub 我复制了一份,添加了用户名并将公钥的内容添加到计算引擎>>元数据>>ssh密钥。 *key 被接受,但用户名不像所有其他用户名那样显示 - 密钥对 使用 gcloud compute ssh tta-media-test-2 --zone europe-west1-c 时出现 Permission denied (publickey) 错误
  • 当我像这样提供 ssh 密钥文件时 gcloud compute ssh tta-media-test-2 --zone europe-west1-c --ssh-key-file=my-ssh-keys_copy.pub (密码在密钥文件所在的文件夹内) 警告:Google Compute Engine 的公共 SSH 密钥文件不存在。 警告:您没有 Google Compute Engine 的 SSH 密钥。 警告:将执行 [/usr/bin/ssh-keygen] 以生成密钥。

  • 使用 ssh-keygen -t rsa -f my-ssh-keys 生成新密钥时得到相同的结果

  • 非常感谢任何其他可能的解决方案。

[update] 我可以使用 ssh user@externalIpOfInstance 从本地 ssh 'broken' 实例我的计划是将其升级到稳定状态,创建一个快照并从那里查看..

  • sudo apt-get -f 安装 0 升级,0 新安装,0 删除,5 未升级。 1 未完全安装或拆除。 此操作后,将使用 0 B 的额外磁盘空间。 设置 initramfs-tools (0.99ubuntu13.5) ... update-initramfs:延迟更新(触发器激活) 处理 initramfs-tools 的触发器 ... update-initramfs:生成 /boot/initrd.img-3.13.0-79-generic E: /usr/share/initramfs-tools/hooks/fixrtc 失败,返回 1。 update-initramfs:/boot/initrd.img-3.13.0-79-generic 失败,为 1。 dpkg: 错误处理 initramfs-tools (--configure): 子进程安装后安装脚本返回错误退出状态 1 处理时遇到错误: initramfs-工具 E:子进程/usr/bin/dpkg返回错误码(1)
  • sudo apt-get 升级 阅读包裹清单...完成 构建依赖树
    读取状态信息...完成 以下包裹已被保留: 谷歌浏览器稳定 将升级以下软件包: comerr-dev libcomerr2 libss2 无人值守升级 4 个已升级,0 个新安装,0 个要移除,1 个未升级。 1 未完全安装或拆除。 需要获得 0 B/188 kB 的档案。 此操作后,将使用 4,096 B 的额外磁盘空间。 您要继续 [Y/n] 吗?是的 预配置包... (正在读取数据库...当前安装的 178509 个文件和目录。) 准备替换comerr-dev 2.1-1.42-1ubuntu2.2(使用.../comerr-dev_2.1-1.42-1ubuntu2.3_amd64.deb)... 拆包替换comrr-dev ... 准备替换 libcomerr2 1.42-1ubuntu2.2(使用 .../libcomerr2_1.42-1ubuntu2.3_amd64.deb)... 解包替换 libcomerr2 ... 准备替换 libss2 1.42-1ubuntu2.2(使用 .../libss2_1.42-1ubuntu2.3_amd64.deb)... 解包替换 libss2 ... 准备替换无人值守升级 0.76ubuntu1.1(使用 .../unattended-upgrades_0.76ubuntu1.2_all.deb)... 拆包更换无人值守升级... 处理安装信息的触发器... 处理 man-db 的触发器 ... 处理 ureadahead 的触发器... 设置 initramfs-tools (0.99ubuntu13.5) ... update-initramfs:延迟更新(触发器激活) 设置 libcomerr2 (1.42-1ubuntu2.3) ... 设置 Comrr-dev (2.1-1.42-1ubuntu2.3) ... 设置 libss2 (1.42-1ubuntu2.3) ... 设置无人值守升级 (0.76ubuntu1.2) ... 处理 initramfs-tools 的触发器 ... update-initramfs:生成 /boot/initrd.img-3.13.0-79-generic E: /usr/share/initramfs-tools/hooks/fixrtc 失败,返回 1。 update-initramfs:/boot/initrd.img-3.13.0-79-generic 失败,为 1。 dpkg: 错误处理 initramfs-tools (--configure): 子进程安装后安装脚本返回错误退出状态 1 由于已达到 MaxReports,因此未编写任何报告报告 处理 libc-bin 的触发器 ... ldconfig 延迟处理现在正在进行 处理时遇到错误: initramfs-工具 E:子进程/usr/bin/dpkg返回错误码(1)
  • sudo apt-get 删除 initramfs-tools-bin 阅读包裹清单...完成 构建依赖树
    读取状态信息...完成 某些软件包无法安装。这可能意味着您有 请求不可能的情况,或者如果您使用的是不稳定的 一些必需的包尚未创建的分发 或被移出 Incoming。 以下信息可能有助于解决这种情况:

以下包具有未满足的依赖关系:

  • cron : 取决于:adduser 但它不会被安装
  • procps:取决于:initscripts
  • 暴发户:取决于:initscripts 取决于:mountall 取决于:ifupdown (>= 0.6.10ubuntu5)

E: 错误,pkgProblemResolver::Resolve 生成​​的中断,这可能是由持有的包引起的。

在这里做什么?

【问题讨论】:

    标签: ssh linux-kernel google-compute-engine apt-get gcloud


    【解决方案1】:

    如果您之前能够使用给定的 SSH 密钥通过 SSH 连接到实例,那么它停止工作的最可能原因是您以某种方式删除了该 SSH 密钥,或者 SSH 守护程序没有运行/以其他方式损坏。看来你在降级时弄坏了这台机器。

    为什么需要这个特定的 VM 实例?它有重要数据吗?如果是这样,您可以将其关闭,使用新的 VM 实例挂载其磁盘,然后复制该数据。

    如果它运行一项服务,您可能应该切换到一台新机器:即使您能够进入该实例,也不知道哪些仍然有效,哪些无效。

    【讨论】:

    • 我们的生产环境正在该实例上运行。我没有完全得到你的答案;所以我想我将把它的磁盘挂载到一个新的实例上。如果它运行服务,切换到新机器,你是什么意思?它是一个功能齐全的 Web 服务器,运行着一些服务,比如 erizo 和 licode,还有 nginx 和其他东西。我只有一个月的经验 - 我真的不知道磁盘上存储的内容以及实例上的内容 - 所以所有帮助都得到了认可;)
    • 毕竟可以ssh;使用 ssh user@remoteIPofInstance 成功了;还编辑了这篇文章的标题。
    • 即使您现在可以连接,但我仍然认为这台机器除了上面的任何重要数据外,一文不值。我会从最新的快照或从头开始构建另一台运行这些服务的机器,然后开始使用它。我认为修理这台机器会浪费时间。无法保证您将其恢复到可用状态。把它作为一个关于频繁备份重要性的教训。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 2015-05-09
    相关资源
    最近更新 更多