从MAAS内调试curtin

☆樱花仙子☆ 提交于 2020-01-22 09:29:54

使用MAAS cli 部署节点

你可以使用maas cli 部署节点,通常比在Web UI 上点击按钮更便捷
首先需要登录,登录方法可参考:https://blog.csdn.net/jingmi_yu/article/details/103891608

默认操作系统deploy

maas  $MAASNAME  machine deploy $SYSTEM_ID

指定操作系统deploy

$maas  $MAASNAME  machine deploy $SYSTEM_ID  distro_series=$release # $release 指定安装的操作系统版本

ubuntu 操作系统还可以指定内核

$maas  $MAASNAME  machine deploy $SYSTEM_ID  distro_series=$release  hwe_kernel=hwe-x   #指定内核

在deploying 过程中登录系统

在machine deploying 过程中你可以使用ubuntu用户 ssh登录到临时系统

先通过Web UI 或者cli 命令获取 $HOST_IP

cli 命令获取 $HOST_IP

#maas admin machine read tpagrh  |grep ip_address

登录临时系统

$ ssh ubuntu@$HOST_IP

在输出log 开启debug

如果想在输出log中开启debug,需要具备maas region controller 的管理员权限,修改/etc/maas/preseds/curtin_userdata (应该需要重启maas server才能生效) 文件如下:

showtrace: true
verbosity: 3

禁止在deploy完成后重启

正常deploy完成后不管是成功还是失败,默认都会进行reboot。这样会导致在一些debug场景或者install failed情况下,无法复现问题,进行调试。需要设置deploy完成后不进行重启

下面有2种方法禁止deploy 后进行重启

  1. 修改maas region controller 的/etc/maas/preseeds/curtin_userdata 文件
    这种方法作用是全局的,所有的machine deploy 都不会重启,注意调试完成后回滚,以免影响其他machine deploy
    在如下位置进行修改
      early_commands:
      {{if third_party_drivers and driver}}
         {{py: key_string = ''.join(['\\x%x' % x for x in driver['key_binary']])}}
         {{if driver['key_binary'] and driver['repository'] and driver['package']}}
         ...
         {{endif}}
      {{endif}}
    
    你需要在early_commands 后面添加一条不允许reboot的规则,如下:
     early_commands:
       disable_reboot: touch /run/block-curtin-poweroff /tmp/block-poweroff /tmp/block-reboot
       {{if third_party_drivers and driver}}
        ...
       {{endif}}
    
  2. 阻止单个节点reboot
     $ ssh ubuntu@$HOST_IP sudo touch /run/block-curtin-poweroff /tmp/block-poweroff /tmp/block-reboot
    
    必须尽快操作,在节点还没有重启前使其生效

日志

单节点下的安装日志
a. /tmp/install.log : crutin 相关的log会存放在这个位置

b. /var/log/cloud-init.log:cloud-init 的日志,但是不包含curtin的

c. /var/log/cloud-init-output.log:标准的输入和输出详细log,包含curtin

手动运行curtin

maas 通过将curtin作为用户数据发送到cloud-init来运行curtin。cloud-init 讲用户数据放入/var/lib/cloud/instance/scripts/part-001来执行。part-001是一个自解压的shell归档文件,会将自身解压缩/curtin执行。
可以先ssh ubuntu@$HOST_IP ,sudo 到root用户,重新使用/curtin 再次运行

ubuntu$ sudo su -
$ cd /curtin
$ ls
bin  configs  curtin  helpers

$ /var/lib/cloud/instance/scripts/part-001 info
LABEL='curtin'
PREFIX='curtin'
COMMAND=( 'curtin' '--install-deps' 'install'
   '--config=configs/config-000.cfg' '--config=configs/config-001.cfg'
   '--config=configs/config-002.cfg' '--config=configs/config-003.cfg'
   '--config=configs/config-004.cfg'
   'http://10.7.10.1:5248/images/ubuntu/amd64/generic/xenial/daily/root-tgz' )
CREATE_TIME='Wed, 25 May 2016 15:21:05 +0000'

在“ info”中显示的命令是执行安装的命令。引用的配置在configs /目录中可见。
然后,您可以重新运行相同的命令,或者编辑配置并再次运行。

$ ./bin/curtin --install-deps install \
  --config=configs/config-000.cfg --config=configs/config-001.cfg \
  --config=configs/config-002.cfg --config=configs/config-003.cfg \
  --config=configs/config-004.cfg \
  http://10.7.10.1:5248/images/ubuntu/amd64/generic/xenial/daily/root-tgz

为了帮助调试,可以在命令中加入一下标志:

-vvv: 更详细的log
--showtrace:失败时,允许显示python堆栈跟踪

其他技巧

开启 -proposed 升级系统
如果你想在安装系统使用-proposed 升级系统软件,你可以编辑/etc/maas/preseeds/curtin_userdata ,如下:

system_upgrade: {enabled: True}
apt:
  sources:
    proposed.list:
      source: deb $MIRROR $RELEASE-proposed main universe

附录

block-reboot 脚本

#!/bin/sh

host=$1
shell=${2:-"true"}
user="ubuntu"
ssh-keygen -f ~/.ssh/known_hosts -R "$host"
cmd='set -x;
sudo touch /run/block-curtin-poweroff /tmp/block-poweroff /tmp/block-reboot;
r=$(lsb_release -sc)
if [ "$r" = "precise" -o "$r" = "trusty" ]; then
   sudo mv /sbin/shutdown /sbin/shutdown.real
   sudo ln -s /bin/true /sbin/shutdown
fi
'

while :; do
    ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 $user@$host "$cmd" &&
        break
    sleep .5 || exit
done
if [ "$shell" = "true" ]; then
   ssh -o StrictHostKeyChecking=no $user@$host
fi

[参考文档]https://gist.github.com/smoser/2610e9b78b8d7b54319675d9e3986a1b

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!