首页 文章

将软件包更新到早期版本后, Cloud VM实例已破坏软件包

提问于
浏览
1

我做了apt-get升级,因为我们的 生产环境 服务器的加载时间大约是40秒 . 我没有't have a snapshot before nor after the upgrade.(Although there is a snapshot of six months old) Load times improved to 15-ish seconds but our erizo service stopped working. Erizo was also running on that instance. Restarting the services didn' t帮助,所以我尝试将软件包升级到以前的版本(https://askubuntu.com/questions/138284/how-to-downgrade-a-package-via-apt-get),就像它一样,但几乎每个软件包都有一个错误:以前的软件包版本没有激发 . (这很奇怪,因为我复制了输出dpkg -l)

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

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

  • 连接到Google Cloud 平台中的实例:正在连接...无法连接,正在重试(1/3) .

  • google cloud shell无法gcloud计算ssh:权限被拒绝(publickey) .

  • 在本地使用gcloud也说Permission denied(publickey) .

我检查了以下内容:

  • 定义了项目公钥;没有定义任何实例公钥或任何其他元数据(Google Cloud SSH Keys

  • 在谷歌 Cloud 平台>>计算引擎>>虚拟机实例>>权限>>我看到'compute'被禁用

  • 通过导航到串行控制台输出页面并查找以accounts-from-metadata:字符串为前缀的输出行来验证守护程序是否正在运行 . 如果您使用的是标准映像但在串行控制台输出中没有看到这些输出前缀,则守护程序可能会停止 - >我没有't see this so I expect it'未运行 .

  • 检查防火墙规则:(gcloud compute firewall-rules list)default-allow-ssh default 0.0.0.0/0 tcp:22 //规则存在

以下包升级:

  • apt

  • apt-transport-https

  • apt-utils

  • binutils

  • cloud-init

  • cloud-initramfs-growroot

  • cloud-initramfs-rescuevol

  • comerr-dev

  • dosfstools

  • e2fslibs

  • e2fsprogs

  • gce-cloud-config

  • gce-daemon

  • gce-imagebundle

  • gce-startup-scripts

  • google-cloud-sdk

  • landscape-client

  • landscape-common l

  • ibapt-inst1.4 libapt-pkg4.12

  • libcomerr2

  • libss2

  • libudev0 mountall

  • nginx

  • nginx-common

  • nginx-full

  • ntp

  • ntpdate

  • procps

  • python-apt

  • python-apt-common

  • python-lazr.restfulclient

  • udev

  • 无人值守升级

  • update-manager-core

  • 暴发户

  • whoopsie

  • x11-utils

这是从串行输出:: - mountall:事件失败 - 没有配置landscape-client,请运行landscape-config .

接下来做什么?

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

  • 尝试在谷歌 Cloud 外壳中再次创建一个新的公钥来访问该实例?

  • 在google cloud shell中输入gcloud compute后第一次生成此文件--project "enduring-palace-762" ssh --zone "europe-west1-c" "tta-media-test-2"警告:Google Compute Engine的私有SSH密钥文件不存在 . 警告:您没有SSH密钥对于Google Compute Engine.WARNING:将执行[/ usr / bin / ssh-keygen]以生成密钥 . 该工具需要创建目录/home/developer/.ssh

  • 生成的公钥存储在/home/developer/.ssh /google_compute_engine.pub中我制作了该副本,添加了用户名,并将公钥的内容添加到计算引擎>> metadata >> ssh密钥 . *密钥被接受,但用户名不会显示与所有其他用户名 - 密钥对我得到权限被拒绝(公钥)错误虽然使用gcloud compute ssh tta-media-test-2 --zone europe-west1- C

  • 当我提供像这样的ssh密钥文件gcloud compute ssh tta-media-test-2 --zone europe-west1-c --ssh-key-file = my-ssh-keys_copy.pub(pwd在文件夹里面密钥文件是)警告:Google Compute Engine的公共SSH密钥文件不存在 . 警告:您没有Google Compute Engine的SSH密钥 . 警告:将执行[/ usr / bin / ssh-keygen]以生成密钥 .

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

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

[更新]我能够使用ssh user @ externalIpOfInstance从本地ssh'破坏'实例我的计划是将它带到升级稳定状态,创建快照并从那里看到..

  • sudo apt-get -f install 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 with 1. dpkg:error processing initramfs- tools( - configure):安装后的子进程安装后脚本返回错误退出状态1处理时遇到错误:initramfs-tools E:子进程/ usr / bin / dpkg返回错误代码(1)

  • sudo apt-get upgrade阅读包列表...完成构建依赖关系树
    读取状态信息...完成以下软件包已被保留:google-chrome-stable将升级以下软件包:comerr-dev libcomerr2 libss2无人值守升级4升级,0新安装,0移除,1未升级 . 1未完全安装或删除 . 需要获得0 B / 188 kB的档案 . 完成此操作后,将使用4,096 B的额外磁盘空间 . 你想继续[Y / n]吗? y预配置包...(读取当前安装的数据库... 178509文件和目录 . )准备替换comerr-dev 2.1-1.42-1ubuntu2.2(使用... / comerr-dev_2.1-1.42-1ubuntu2.3_amd64 .deb)...解包更换comerr-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(使用... /无人值守 - upgrades_0.76ubuntu1.2_all.deb)...解压替换无人值守升级...处理install-info的触发器...处理man-db的触发器... ureadahead的处理触发器...设置initramfs-tools( 0.99ubuntu13.5)... update-initramfs:延迟更新(触发激活)设置libcomerr2(1.42-1ubuntu2.3)...设置comerr-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 with 1. dpkg:error processing initramfs- tools( - configure):安装后的子进程安装后脚本返回错误退出状态1没有写入apport报告,因为已经到达MaxReports处理libc-bin的触发器... ldconfig现在正在进行延迟处理处理时遇到错误:initramfs-工具E:子进程/ usr / bin / dpkg返回错误代码(1)

  • sudo apt-get remove initramfs-tools-bin读取包列表...完成构建依赖关系树
    读取状态信息...完成某些包无法安装 . 这可能意味着您已经请求了一种不可能的情况,或者如果您正在使用不稳定的分发,那么某些必需的包尚未创建或已被移出Incoming . 以下信息可能有助于解决此问题:

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

  • cron:取决于:adduser,但不会安装

  • procps:取决于:initscripts

  • upstart:取决于:initscripts取决于:mountall取决于:ifupdown(> = 0.6.10ubuntu5)

E:错误,pkgProblemResolver ::解决生成的中断,这可能是由持有的包引起的 .

what to do here?

1 回答

  • 0

    如果您以前使用给定的SSH密钥能够SSH到实例,那么它最有可能停止工作的原因是,如果您以某种方式删除了该SSH密钥,或者SSH守护程序未运行/否则会被破坏 . 似乎在降级时你打破了这台机器 .

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

    如果它运行一个服务,你应该切换到一个新的机器:即使你能够进入实例,也不知道什么仍然有效,什么没有 .

相关问题