cloud-init 几点笔记及 centos 莫名改 hostname 问题。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
atuocn
V2EX    Linux

cloud-init 几点笔记及 centos 莫名改 hostname 问题。

  •  
  •   atuocn 2020-04-29 10:57:37 +08:00 3300 次点击
    这是一个创建于 1989 天前的主题,其中的信息可能已经有所发展或是发生改变。

    忽然惊喜的发现,自己原来写在 oschina 上的文章,找到入口了。自从它要求绑定手机后,因不想提供手机号,我再也没找到原来的文章。既然失而复得,转几个还有点价值的文章到这里,以免再次丢失。

    原文写于 2017/07/18 16:29


    一个奇怪的问题

    前几天在 hyper-v 上搭一个 centos 虚拟机。不想一步步地安装,就用 centos 官方的 generic cloud-init enabled image 搭建了。把网络配置为 static ip 地址,然后发生一个奇怪的现象,不论怎么改 hostname,过一段时间都会自动在 hostname 后附加一个 .localdomain

    改 /etc/hostname , 改 /etc/network , 改 /etc/hosts , 改 /etc/resolv.cfg ,hostnamectl 都无效。查看日志终于发现是 cloud-init 服务在修改 hostname 。只要阻止 cloud-init 服务改 hostname 就好了,可在 /etc/cloud/cloud.cfg.d 的目录下增加一个配置文件。执行:

    sudo echo "preserve_hostname: 1" > /etc/cloud/cloud.cfg.d/00_preserve_hostname.cfg 

    或者另一个办法,把 /etc/cloud/cloud.cfg 配置文件中把一下 2 行删掉:

    - set_hostname - update_hostname 

    注:cloud-init 的 0.7.9 版的 changelog 中提到一条:

     set_hostname: avoid erroneously appending domain to fqdn 。 可能作为 bug 修复掉了吧[centos 7 目前(2017/7/18)使用的是 0.7.5 版] 

    cloud-init 文档阅读笔记

    对 cloud-init 一直都比较模糊,只知道和 openstack 之类的云服务平台有关。以前下载来的虚拟机云映像文件,不知道登入密码,搜索的时候总有高手神秘的说一句 #cloud-cofig 啥啥啥的,然而具体怎么搞,一头雾水。偶只想搭个服务器,不想搞云平台,偶的笨办法就是挂载映像文件,然后操作映像里的文件-_-!!!

    好吧,解决这次问题,还是阅读了一下 cloud-init 的文档,同时记点笔记。

    1. cloud-init 是个服务,装在 guest os 里,guest os 在启动的时候,对虚拟机进行必要的初始化,例如修改密码,修改配置等等。
    2. cloud-init 初始化虚拟机一个必要的事项就是如何拿到初始化的配置数据。提供配置数据的服务方叫 datasource 。根据不同的云服务平台,openstack, amz, azure 等,cloud-init 实现了不同的数据源。例如 config driver 数据源,就是生成一个磁盘映像,虚拟机启动时 cloud-init 寻找特定的文件系统,找到后获取配置数据,进行初始化。
    3. 数据源里的配置数据分为 meta-data 和 user-data 。meta-data 主要是云服务平台要用的配置,例如 server name, instance id ; user-data 则是由用户定义的虚拟机相关的配置,脚本等。
    4. 对于非云平台的情况,cloud-init 提供一种 datasource,叫 NoCloud 。借助 NoCloud,cloud-init 可也初始化虚拟机。NoCloud 有点像 config driver,然而更简单。配置文件放在一个 vfat 或 iso9660 文件系统上,文件系统的 lable 必须是 cidata 。
    5. cloud-init 服务,在 systemd 里有一个 generator,会自动的判断是否启动 cloud-init 服务。所以普通的 systemctl disable 是不能停止 cloud-init 服务。0.7.7 以上版本提供一个简单办法,放一个文件 /etc/cloud/cloud-init.disabled,就可阻止 cloud-init 。

    centos 虚拟机云映像怎么改登入密码的方法来了:D

    1. 创建 2 个文件,user-data 和 meta-data 。
    /user-data /meta-data 
    1. user-data 文件内容:
     #cloud-config password: passw0rd chpasswd: { expire: False } ssh_pwauth: True 
    1. meta-data 文件内容。虚拟机实例 id 为 iid-local01,hostname 设为 cloudimg. 虚拟机根据 instance-id 判断该实例是否是第一次启动。大部分的配置数据只在第一次启动时初始化。
    instance-id: iid-local01 local-hostname: cloudimg 
    1. 制作一个 iso 光盘映像,在 windows 下,我使用 mkisofs.exe ,ultraiso 之类的也应该可以。seed.iso 为创建的 iso 光盘映像文件名。
    mkisofs.exe -r -R -J -l -L -V cidata -o seed.iso meta-data user-data 
    1. 把 seed.iso 挂载到虚拟机光盘里。启动虚拟机,cloud-init 就会自动修改密码了。
    3 条回复    2023-04-14 14:09:43 +08:00
    defunct9
        1
    defunct9  
       2020-04-29 20:08:21 +08:00 via iPhone
    赞之
    garibellee
        2
    garibellee  
       2023-04-13 15:46:19 +08:00
    23 年了 pve7 下 centos cloud-init hostname 还是有问题创建时候 hostname 一直 localhost 但是 /etc/hosts 里面能取到 {{hostname}} {{fqdn}} ,试了 ubuntu 和 debain 都正常,还有就是( centos-cloud-init ) ipv6 不能用 dhcp ,尽量用自动,不然开机回卡在网络配置上
    garibellee
        3
    garibellee  
       2023-04-14 14:09:43 +08:00
    已解决 摸鱼时间看了看 cloud-init.log 然后顺藤摸瓜改了 /usr/lib/python2.7/site-packages/cloudinit/config/cc_set_hostname.py 的代码搞定了,还是 centos 里面 cloud-init 版本低了,其他发行版 /usr/lib/python3/dist-packages/cloudinit/config/cc_set_hostname.py 这个代码跑起来没啥问题
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1053 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 23:07 PVG 07:07 LAX 16:07 JFK 19:07
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86