SDB:VPS issues

跳转至: 导航, 搜索
本页面介绍了对 openSUSE VPS 主机进行远程管理时常犯的一些错误和防范方法。

64 位和 32 位的选择

只有 4GB 内存以上才一定需要 64 位系统。说到底依然是钱的问题,买不起那么多钱的 VPS 何必消耗寸土寸金的内存资源呢。

自己安装还是模板安装

除非模板里的版本特别旧,比如 openSUSE 12.1 及以下(已经过了支持期了),或者你要安装的是 openSUSE 的某个主机商未提供模板的衍生版,否则没什么必要自己安装,因为没有经验或者没有看过本文的很容易发生第四个问题。另外 VPS 用的是 openSUSE 的 minimal 环境,没有桌面的,从 12.2(不算 evergreen 最老的支持版本)升级到最新的 12.3 也才 400 MB,对于 VPS 来说这点流量杯水车薪的。

把自己关在防火墙外面

拿到 VPS 的第一件事就是开启防火墙端口或者关掉防火墙(不建议)。不然你直接开启防火墙,下次登入你就被关在外面了只能用 VNC 或者 VPS 管理界面了。

zypper 升级系统时把 ssh 卡死

原因

这是由于用户不仔细阅读版本资讯或者之前使用桌面环境所以跳过了服务器环境的注意事项造成的。

实际上 openSUSE 12.2 版本资讯中已经进行了说明:

当从 openSUSE 12.1(或更老版本)升级时,在升级新的 openssh 软件包时 ssh 连接将被关闭。若您打算通过 ssh 执行 “zypper dup”,请在一个可重连的终端复用器(例如 GNU screen 或 tmux)中执行 “zypper dup”,以便自动重连; 或者使用 nohup 方法来对连接丢失进行免疫。

openSUSE 12.3 版本资讯中也有说明:

在 ssh 安装的第二个阶段,YaST 会僵死。它被 SuSEFirewall 服务屏蔽了,因为 SYSTEMCTL_OPTIONS 环境变量设置不正确。

权宜之计:当第二次登入准备开始 ssh 安装的第二阶段时,使用 --ignore-dependencies 参数调用 yast.ssh,如下:

SYSTEMCTL_OPTIONS=--ignore-dependencies yast.ssh

背景知识:SDB:远程安装方式

解决方法

我们不奢望每个用户都能够掌握 screen 或者 tmux(我就不会),因此在这里教给大家在远程升级系统时不卡 zypper 的方法。注意,并不是只要通过 ssh 执行 zypper 就会卡,因为上述原因都不是因为 zypper 本身不适合远程执行,而是 ssh 连接本身或者防火墙的原因,所以下面方法只在执行 zypper dup 时才需要。

因为防火墙

升级前先把防火墙禁用:

sudo systemctl stop SuSEfirewall2.service
sudo systemctl disable SuSEfirewall2.service

升级完再启用:

sudo systemctl enable SuSEfirewall2.service
sudo systemctl start SuSEfirewall2.service

因为 openssh 软件包更新的原因

一共有三种方法:

  • 学 screen 或 tmux
  • 用 vnc 软件如 KRDC 等登入系统执行 zypper dup。即不用 ssh。(理论可以,未测试)
  • nohup 方法。

运行 zypper 后,它会一直在 tty 上打印输出,从而占用了 tty,当出于上述原因,你在本地 ssh 收不到这些打印输出时,zypper 就被 ssh 卡死了(但实际上服务器上 zypper 仍在运行,所以你也不可以按 Ctrl + C 终结,因为你不知道该指令会不会被发送到服务器去)。所以我们需要一种方法,不打印这些输出的同时运行 zypper dup,这个方法就是 nohup。

但是 nohup 的缺点同样明显,你无法和 tty 进行交互了,所以你无法解决 zypper dup 时提示的冲突,也无法接受闭源软件如 flash 的许可协议(当然服务器也没有 flash)。所以我们要先进行冲突测试(我假设你是 root 登入的):

zypper dup --dry-run #测试升级,并不真正升级

这样能够看到所有的冲突。minimal 环境都是基础的系统软件包,冲突很少。所以你可以把冲突的软件包先通过 YaST 强行卸载掉,并做记录,升级好后再试图重新装上,如果找不到包名,那基本就是新版已经淘汰它了; 而有时候,仔细阅读这些包的摘要和描述,你会发现卸载掉的包其实并不需要。比如我的服务器升级 12.2 到 12.3 时,发现要卸载 openssh-askpass,但仔细阅读了描述后,发现它是用于 X 窗口系统的,可是 minimal 环境连 X 窗口系统都不需要(它是 KDE/GNOME 等桌面环境的基础依赖)。

然后再运行:

nohup zypper --non-interactive dup --auto-agree-with-licenses #使用默认回答,自动接受许可

或者

nohup zypper -n dup -l

即可。

然后 ssh 就不会卡了,即使万一卡了也对你没影响了,zypper dup 是肯定可以成功的。哪怕 ssh 连接被关闭,保险起见最多等半小时左右就可以使用 VPS 管理界面重启了。要是没卡的话:

可以随时使用:

ps -A | grep zypper

关注,如果没有 zypper 进程了,那么升级就完成了,可以通过:

shutdown -r now

重启。这时 ssh 连接是一定会掉的,算好时间再连接就好了。

/home 的问题

你直接拿到的就是 root 特权账户,有了 /root 可用,何必划分一个 /home 分区并建立普通用户账户呢?实际上在 VPS 环境里,无论是 /root 还是 /home 你都很少能够用到。软件包可以用源里的,自己编译可以在 /tmp 里面做。

挂载 SWAP 的问题

这是有些 VPS 商的模板的问题。解决方法是: