Skip to content

Instantly share code, notes, and snippets.

@ergoz
Forked from longtian/alpine-cloud-init.md
Last active September 30, 2024 01:29
Show Gist options
  • Save ergoz/5e083d37367d618d955156245f6fac42 to your computer and use it in GitHub Desktop.
Save ergoz/5e083d37367d618d955156245f6fac42 to your computer and use it in GitHub Desktop.
cloud-init for alpine on proxmox

Enable cloud-init for a Alpine VM on proxmox

alpine version 3.20.3 cloud-init version 22.4

Install

Download alpine-virt-3.20.3-x86_64.iso Uploda to PVE Create a VM Boot From ISO

fast mirror

0.01 http://mirror.yandex.ru/mirrors/alpine/
0.02 http://mirror.hyperdedic.ru/alpinelinux/

http://mirror.yandex.ru/mirrors/alpine/v3.20/main
http://mirror.yandex.ru/mirrors/alpine/v3.20/community

Script

SWAP_SIZE=0 setup-alpine

keyboard: us
variant: us
hostname: alpine
interface: eth0
ip: dhcp
timezone: Asia/Shanghai
proxy: none
mirrors: 51
network: DHCP

reboot

Configure

  • add cloud-init device
  • enable qemu guest agent
  • remove iso device

Start

apk add vim 

vim /etc/apk/repositories

apk add --no-cache cloud-init docker docker-cli-compose qemu-guest-agent e2fsprogs-extra ca-certificates curl wget net-tools sudo htop iotop iftop mc nano git
echo iso9660 > /etc/modules-load.d/iso9660.conf
wget 'https://gist.githubusercontent.com/ergoz/5e083d37367d618d955156245f6fac42/raw/cloud.cfg' -O /etc/cloud/cloud.cfg

mv /etc/profile.d/color_prompt.sh.disabled /etc/profile.d/color_prompt.sh

rc-update add qemu-guest-agent boot
setup-cloud-init

## Tweak

cloud-init status -l
cloud-init clean --logs 
cloud-init query userdata
poweroff

## Enable docker daemon

rc-update add docker default
service docker start

# The top level settings are used as module
# and base configuration.
# A set of users which may be applied and/or used by various modules
# when a 'default' entry is found it will reference the 'default_user'
# from the distro configuration specified below
users:
- default
# If this is set, 'root' will not be able to ssh in and they
# will get a message to login instead as the default $user
disable_root: true
ssh_pwauth: false
mount_default_fields: [~, ~, 'auto', 'defaults,nofail', '0', '2']
resize_rootfs_tmp: /dev
# This will cause the set+update hostname module to not operate (if true)
preserve_hostname: false
apk_repos:
alpine_repo:
base_url: http://mirror.yandex.ru/mirrors/alpine
community_enabled: true
# If you use datasource_list array, keep array items in a single line.
# If you use multi line array, ds-identify script won't read array items.
# Example datasource config
# datasource:
# Ec2:
# metadata_urls: [ 'blah.com' ]
# timeout: 5 # (defaults to 50 seconds)
# max_wait: 10 # (defaults to 120 seconds)
datasource_list: ['NoCloud']
runcmd:
- hostname | figlet > /etc/motd
# The modules that run in the 'init' stage
cloud_init_modules:
- migrator
- seed_random
- bootcmd
- write-files
- growpart
- resizefs
- disk_setup
- mounts
- set_hostname
- update_hostname
- update_etc_hosts
- resolv_conf
- ca-certs
- rsyslog
- users-groups
- ssh
# The modules that run in the 'config' stage
cloud_config_modules:
- ssh-import-id
- keyboard
- locale
- set-passwords
- apk-configure
- ntp
- timezone
- disable-ec2-metadata
- runcmd
# The modules that run in the 'final' stage
cloud_final_modules:
- package-update-upgrade-install
- fan
- write-files-deferred
- puppet
- chef
- ansible
- mcollective
- salt-minion
- reset_rmc
- refresh_rmc_and_interface
- rightscale_userdata
- scripts-vendor
- scripts-per-once
- scripts-per-boot
- scripts-per-instance
- scripts-user
- ssh-authkey-fingerprints
- keys-to-console
- install-hotplug
- phone-home
- final-message
- power-state-change
# System and/or distro specific settings
# (not accessible to handlers/transforms)
system_info:
# This will affect which distro class gets used
distro: alpine
# Default user name + that default users groups (if added/used)
default_user:
name: alpine
lock_passwd: True
gecos: Alpine
groups: [adm, audio, bin, cdrom, daemon, dialout, disk, floppy, netdev, sudo, sys, tape, video, wheel]
sudo: ["ALL=(ALL) NOPASSWD:ALL"]
shell: /bin/ash
# Other config here will be given to the distro class and/or path classes
paths:
cloud_dir: /var/lib/cloud/
templates_dir: /etc/cloud/templates/
ssh_svcname: sshd
# The top level settings are used as module
# and system configuration.
# A set of users which may be applied and/or used by various modules
# when a 'default' entry is found it will reference the 'default_user'
# from the distro configuration specified below
users:
- default
# If this is set, 'root' will not be able to ssh in and they
# will get a message to login instead as the default $user
disable_root: true
# This will cause the set+update hostname module to not operate (if true)
preserve_hostname: false
apt:
# This prevents cloud-init from rewriting apt's sources.list file,
# which has been a source of surprise.
preserve_sources_list: true
# If you use datasource_list array, keep array items in a single line.
# If you use multi line array, ds-identify script won't read array items.
# Example datasource config
# datasource:
# Ec2:
# metadata_urls: [ 'blah.com' ]
# timeout: 5 # (defaults to 50 seconds)
# max_wait: 10 # (defaults to 120 seconds)
# The modules that run in the 'init' stage
cloud_init_modules:
- migrator
- seed_random
- bootcmd
- write-files
- growpart
- resizefs
- disk_setup
- mounts
- set_hostname
- update_hostname
- update_etc_hosts
- ca-certs
- rsyslog
- users-groups
- ssh
# The modules that run in the 'config' stage
cloud_config_modules:
- snap
- ssh-import-id
- keyboard
- locale
- set-passwords
- grub-dpkg
- apt-pipelining
- apt-configure
- ntp
- timezone
- disable-ec2-metadata
- runcmd
- byobu
# The modules that run in the 'final' stage
cloud_final_modules:
- package-update-upgrade-install
- fan
- landscape
- lxd
- write-files-deferred
- puppet
- chef
- mcollective
- salt-minion
- reset_rmc
- refresh_rmc_and_interface
- rightscale_userdata
- scripts-vendor
- scripts-per-once
- scripts-per-boot
- scripts-per-instance
- scripts-user
- ssh-authkey-fingerprints
- keys-to-console
- install-hotplug
- phone-home
- final-message
- power-state-change
# System and/or distro specific settings
# (not accessible to handlers/transforms)
system_info:
# This will affect which distro class gets used
distro: debian
# Default user name + that default users groups (if added/used)
default_user:
name: debian
lock_passwd: True
gecos: Debian
groups: [adm, audio, cdrom, dialout, dip, floppy, netdev, plugdev, sudo, video]
sudo: ["ALL=(ALL) NOPASSWD:ALL"]
shell: /bin/bash
# Other config here will be given to the distro class and/or path classes
paths:
cloud_dir: /var/lib/cloud/
templates_dir: /etc/cloud/templates/
package_mirrors:
- arches: [default]
failsafe:
primary: https://deb.debian.org/debian
security: https://deb.debian.org/debian-security
ssh_svcname: ssh
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment