Initial commit
This commit is contained in:
1
cloudinit/99-pve.cfg
Normal file
1
cloudinit/99-pve.cfg
Normal file
@@ -0,0 +1 @@
|
||||
datasource_list: [ NoCloud, ConfigDrive ]
|
||||
123
cloudinit/cloud.cfg
Normal file
123
cloudinit/cloud.cfg
Normal file
@@ -0,0 +1,123 @@
|
||||
# The top level settings are used as module
|
||||
# and system configuration.
|
||||
|
||||
# Update the contents of /etc/hosts. This will use the name you
|
||||
# specified when creating the VM in proxmox
|
||||
manage_etc_hosts: true
|
||||
|
||||
# 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 above $user (debian)
|
||||
disable_root: true
|
||||
|
||||
# Change default root password from the preseed file to a random one
|
||||
chpasswd:
|
||||
list: |
|
||||
root:RANDOM
|
||||
|
||||
# Update apt database on first boot (run 'apt-get update')
|
||||
apt_update: true
|
||||
|
||||
# Upgrade the instance on first boot
|
||||
apt_upgrade: true
|
||||
|
||||
# Reboot after package install/update if necessary
|
||||
apt_reboot_if_required: true
|
||||
|
||||
# Install useful packages
|
||||
packages:
|
||||
- vim
|
||||
|
||||
# Write out new SSH daemon configuration. Standard debian 11 configuration
|
||||
# apart from forbidding root login and disabling password authentication
|
||||
write_files:
|
||||
- path: /etc/ssh/sshd_config
|
||||
content: |
|
||||
PermitRootLogin no
|
||||
PubkeyAuthentication yes
|
||||
PasswordAuthentication no
|
||||
PermitEmptyPasswords no
|
||||
ChallengeResponseAuthentication no
|
||||
UsePAM yes
|
||||
X11Forwarding yes
|
||||
PrintMotd no
|
||||
AcceptEnv LANG LC_*
|
||||
Subsystem sftp /usr/lib/openssh/sftp-server
|
||||
|
||||
# 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:
|
||||
- emit_upstart
|
||||
- ssh-import-id
|
||||
- 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
|
||||
- scripts-vendor
|
||||
- scripts-per-once
|
||||
- scripts-per-boot
|
||||
- scripts-per-instance
|
||||
- scripts-user
|
||||
- ssh-authkey-fingerprints
|
||||
- final-message
|
||||
|
||||
# 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
|
||||
# Don't forget to add your public key here
|
||||
ssh_authorized_keys:
|
||||
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHRYu07KxH1k+RvQ0JjDeLslwEgmWNdU5xtgYXCHoG7L tim@matabi
|
||||
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC6xkvp6hi1jat9640TMk3q3YwrsmwCDTmnMJTCsrCPn45JahGOA+nE8hrb75yd0WQb8Khn/prWfwWDaXzxg70pDuznlXfOnvATB0zPdNJngEM3vmo2U1bCnICCxKWRiGTH10LHb8ZGy0rRNDubryRWsIcxE4Vrp07e+suPkLjd55dKEsxz5G0lK7dMmEHlMy0Cy4tVBQlws0kFLtWLu3xL0TGRvhM0nrKNyHlRlOgWN1FIymukkpXLT71YwMidTr2y7fhmYP6qZB/2tKJT/4GzKsvfyHmzKxZgRXOJCUiu1mb9WIJ4wGDX9KVkAoCmH6yK1XulEib9+OeskolyYsdYGmpSFcFb9/6eHLEA94inHqe5xzLNnZMotzkEGy0xPH61c0TrUV5J8JU6jKtnl+F2VRPeemw7Y3nNDqka2O0U9AQDchjoHl7VvAWcV7XUyS9L/ve8FsHNRXpG9t6AJWd92MOPs2F9jXGbVDwwNrRhDp1emc0yKi4KxsSNlF+gvC4uD+p2IWhWoQSY4BYvxwK063fvTTu3xNUPL8EV8oX4E2+IzKJwwOIRawyjJuEfIGUA27ye7VrCkc/LOgpHU/lM7NzutBMBTKLJb012BncvZ14B6R3LeUuCKqN8qrhv2tbW4UIzhhn1g1+Wov7PFAOC/i6oDqsxOWh2heEX2UMKQQ== tim@matabi
|
||||
# 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/
|
||||
upstart_dir: /etc/init/
|
||||
package_mirrors:
|
||||
- arches: [default]
|
||||
failsafe:
|
||||
primary: http://deb.debian.org/debian
|
||||
security: http://security.debian.org/
|
||||
ssh_svcname: ssh
|
||||
14
debian-bookworm.build.pkr.hcl
Normal file
14
debian-bookworm.build.pkr.hcl
Normal file
@@ -0,0 +1,14 @@
|
||||
# Build Definition to create the VM Template
|
||||
build {
|
||||
sources = ["source.proxmox-iso.debian-12-bookworm-cloudinit-template"]
|
||||
|
||||
provisioner "file" {
|
||||
destination = "/etc/cloud/cloud.cfg"
|
||||
source = "cloudinit/cloud.cfg"
|
||||
}
|
||||
|
||||
provisioner "file" {
|
||||
destination = "/etc/cloud/cloud.cfg.d/99-pve.cfg"
|
||||
source = "cloudinit/99-pve.cfg"
|
||||
}
|
||||
}
|
||||
8
debian-bookworm.config.pkr.hcl
Normal file
8
debian-bookworm.config.pkr.hcl
Normal file
@@ -0,0 +1,8 @@
|
||||
packer {
|
||||
required_plugins {
|
||||
proxmox = {
|
||||
version = ">= 1.1.3"
|
||||
source = "github.com/hashicorp/proxmox"
|
||||
}
|
||||
}
|
||||
}
|
||||
59
debian-bookworm.source.pkr.hcl
Normal file
59
debian-bookworm.source.pkr.hcl
Normal file
@@ -0,0 +1,59 @@
|
||||
# Resource Definiation for the VM Template
|
||||
source "proxmox-iso" "debian-12-bookworm-cloudinit-template" {
|
||||
|
||||
# Proxmox Connection Settings
|
||||
proxmox_url = var.proxmox_api_url
|
||||
username = var.proxmox_api_token_id
|
||||
token = var.proxmox_api_token_secret
|
||||
insecure_skip_tls_verify = true
|
||||
|
||||
# VM General Settings
|
||||
node = "proxmox" # add your proxmox node
|
||||
vm_id = "9999"
|
||||
vm_name = "debian-12-bookworm-cloudinit-template"
|
||||
template_description = "Debian 12 Bookworm cloudinit template"
|
||||
# iso_url = "https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.2.0-amd64-netinst.iso"
|
||||
# iso_checksum = "23ab444503069d9ef681e3028016250289a33cc7bab079259b73100daee0af66"
|
||||
iso_file = "local:iso/debian-12.2.0-amd64-netinst.iso"
|
||||
iso_storage_pool = "local"
|
||||
unmount_iso = true
|
||||
|
||||
# VM Settings
|
||||
machine = "q35"
|
||||
# bios = "ovmf"
|
||||
os = "l26"
|
||||
qemu_agent = true
|
||||
cores = "1"
|
||||
cpu_type = "host"
|
||||
memory = "2048"
|
||||
cloud_init = true
|
||||
cloud_init_storage_pool = "local"
|
||||
|
||||
scsi_controller = "virtio-scsi-pci"
|
||||
disks {
|
||||
disk_size = "8G"
|
||||
format = "qcow2"
|
||||
storage_pool = "local"
|
||||
type = "virtio"
|
||||
}
|
||||
|
||||
network_adapters {
|
||||
model = "virtio"
|
||||
bridge = "vmbr0"
|
||||
firewall = "false"
|
||||
}
|
||||
|
||||
# PACKER Boot Commands
|
||||
# boot_command = ["<wait><esc><wait>auto url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg<enter>"]
|
||||
boot_command = ["<esc><wait>auto url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg<enter>"]
|
||||
boot_wait = "15s"
|
||||
|
||||
# PACKER Autoinstall Settings
|
||||
http_directory = "http"
|
||||
http_port_min = 8802
|
||||
http_port_max = 8802
|
||||
|
||||
ssh_username = "root"
|
||||
ssh_password = "debian"
|
||||
ssh_timeout = "20m"
|
||||
}
|
||||
12
debian-bookworm.variables.pkr.hcl
Normal file
12
debian-bookworm.variables.pkr.hcl
Normal file
@@ -0,0 +1,12 @@
|
||||
variable "proxmox_api_url" {
|
||||
type = string
|
||||
}
|
||||
|
||||
variable "proxmox_api_token_id" {
|
||||
type = string
|
||||
}
|
||||
|
||||
variable "proxmox_api_token_secret" {
|
||||
type = string
|
||||
sensitive = true
|
||||
}
|
||||
183
http/preseed.cfg
Normal file
183
http/preseed.cfg
Normal file
@@ -0,0 +1,183 @@
|
||||
#### Contents of the preconfiguration file (for buster)
|
||||
#
|
||||
# The configuration fragments used in this file are also available as an
|
||||
# example preconfiguration file from:
|
||||
# https://www.debian.org/releases/buster/example-preseed.txt
|
||||
#
|
||||
# Some more preseed files that contain the full list of available preseed
|
||||
# options:
|
||||
# https://preseed.debian.net/debian-preseed/
|
||||
|
||||
# More about preseeding: https://wiki.debian.org/DebianInstaller/Preseed
|
||||
|
||||
### Localization
|
||||
d-i debian-installer/locale string en_DE.UTF-8
|
||||
|
||||
# Keyboard selection
|
||||
d-i keyboard-configuration/xkb-keymap select de
|
||||
|
||||
### Network configuration
|
||||
|
||||
# netcfg will choose an interface that has link if possible. This makes it
|
||||
# skip displaying a list if there is more than one interface.
|
||||
d-i netcfg/choose_interface select auto
|
||||
|
||||
# Any hostname and domain names assigned from dhcp take precedence over
|
||||
# values set here. However, setting the values still prevents the questions
|
||||
# from being shown, even if values come from dhcp.
|
||||
d-i netcfg/get_hostname string unassigned-hostname
|
||||
d-i netcfg/get_domain string unassigned-domain
|
||||
|
||||
# If you want to force a hostname, regardless of what either the DHCP
|
||||
# server returns or what the reverse DNS entry for the IP is, uncomment
|
||||
# and adjust the following line.
|
||||
#d-i netcfg/hostname string somehost
|
||||
|
||||
# Disable that annoying WEP key dialog.
|
||||
d-i netcfg/wireless_wep string
|
||||
|
||||
### Mirror settings
|
||||
|
||||
# If you select ftp, the mirror/country string does not need to be set.
|
||||
#d-i mirror/protocol string ftp
|
||||
d-i mirror/country string Germany
|
||||
d-i mirror/http/hostname string ftp.de.debian.org
|
||||
d-i mirror/http/directory string /debian
|
||||
d-i mirror/http/proxy string
|
||||
|
||||
### Account setup
|
||||
|
||||
# Skip creation of a normal user account.
|
||||
d-i passwd/make-user boolean false
|
||||
|
||||
# Root password
|
||||
d-i passwd/root-password password debian
|
||||
d-i passwd/root-password-again password debian
|
||||
|
||||
### Clock and time zone setup
|
||||
|
||||
# Controls whether or not the hardware clock is set to UTC.
|
||||
d-i clock-setup/utc boolean true
|
||||
|
||||
# You may set this to any valid setting for $TZ; see the contents of
|
||||
# /usr/share/zoneinfo/ for valid values.
|
||||
d-i time/zone string Europe/Berlin
|
||||
|
||||
# Controls whether to use NTP to set the clock during the install
|
||||
d-i clock-setup/ntp boolean true
|
||||
|
||||
### Partitioning
|
||||
|
||||
# If the system has only one disk the installer will default to using that,
|
||||
# but otherwise the device name must be given in traditional, non-devfs
|
||||
# format (so e.g. /dev/sda and not e.g. /dev/discs/disc0/disc).
|
||||
# For example, to use the first SCSI/SATA hard disk:
|
||||
d-i partman-auto/disk string /dev/vda
|
||||
|
||||
# In addition, you'll need to specify the method to use.
|
||||
# The presently available methods are:
|
||||
# - regular: use the usual partition types for your architecture
|
||||
# - lvm: use LVM to partition the disk
|
||||
# - crypto: use LVM within an encrypted partition
|
||||
d-i partman-auto/method string regular
|
||||
|
||||
# You can define the amount of space that will be used for the LVM volume
|
||||
# group. It can either be a size with its unit (eg. 20 GB), a percentage of
|
||||
# free space or the 'max' keyword.
|
||||
d-i partman-auto-lvm/guided_size string max
|
||||
|
||||
# If one of the disks that are going to be automatically partitioned
|
||||
# contains an old LVM configuration, the user will normally receive a
|
||||
# warning. This can be preseeded away...
|
||||
d-i partman-lvm/device_remove_lvm boolean true
|
||||
# The same applies to pre-existing software RAID array:
|
||||
d-i partman-md/device_remove_md boolean true
|
||||
# And the same goes for the confirmation to write the lvm partitions.
|
||||
d-i partman-lvm/confirm boolean true
|
||||
d-i partman-lvm/confirm_nooverwrite boolean true
|
||||
|
||||
# You can choose one of the three predefined partitioning recipes:
|
||||
# - atomic: all files in one partition
|
||||
# - home: separate /home partition
|
||||
# - multi: separate /home, /var, and /tmp partitions
|
||||
d-i partman-auto/choose_recipe select atomic
|
||||
|
||||
# This makes partman automatically partition without confirmation, provided
|
||||
# that you told it what to do using one of the methods above.
|
||||
d-i partman-partitioning/confirm_write_new_label boolean true
|
||||
d-i partman/choose_partition select finish
|
||||
d-i partman/confirm boolean true
|
||||
d-i partman/confirm_nooverwrite boolean true
|
||||
|
||||
### Package selection
|
||||
tasksel tasksel/first multiselect standard, ssh-server
|
||||
|
||||
# Individual additional packages to install (space separated).
|
||||
# qemu-guest-agent must be installed for the packer proxmox builder to
|
||||
# work or else the build will fail.
|
||||
d-i pkgsel/include string qemu-guest-agent cloud-init
|
||||
# Whether to upgrade packages after debootstrap.
|
||||
# Allowed values: none, safe-upgrade, full-upgrade
|
||||
#d-i pkgsel/upgrade select none
|
||||
|
||||
# Some versions of the installer can report back on what software you have
|
||||
# installed, and what software you use. The default is not to report back,
|
||||
# but sending reports helps the project determine what software is most
|
||||
# popular and include it on CDs.
|
||||
popularity-contest popularity-contest/participate boolean false
|
||||
|
||||
### Boot loader installation
|
||||
|
||||
# Grub is the default boot loader (for x86). If you want lilo installed
|
||||
# instead, uncomment this:
|
||||
#d-i grub-installer/skip boolean true
|
||||
# To also skip installing lilo, and install no bootloader, uncomment this
|
||||
# too:
|
||||
#d-i lilo-installer/skip boolean true
|
||||
|
||||
# This is fairly safe to set, it makes grub install automatically to the MBR
|
||||
# if no other operating system is detected on the machine.
|
||||
d-i grub-installer/only_debian boolean true
|
||||
|
||||
# This one makes grub-installer install to the MBR if it also finds some other
|
||||
# OS, which is less safe as it might not be able to boot that other OS.
|
||||
d-i grub-installer/with_other_os boolean true
|
||||
|
||||
# Due notably to potential USB sticks, the location of the MBR can not be
|
||||
# determined safely in general, so this needs to be specified:
|
||||
d-i grub-installer/bootdev string /dev/vda
|
||||
# To install to the first device (assuming it is not a USB stick):
|
||||
#d-i grub-installer/bootdev string default
|
||||
|
||||
### Finishing up the installation
|
||||
|
||||
# Avoid that last message about the install being complete.
|
||||
d-i finish-install/reboot_in_progress note
|
||||
|
||||
#### Advanced options
|
||||
|
||||
### Running custom commands during the installation
|
||||
|
||||
# d-i preseeding is inherently not secure. Nothing in the installer checks
|
||||
# for attempts at buffer overflows or other exploits of the values of a
|
||||
# preconfiguration file like this one. Only use preconfiguration files from
|
||||
# trusted locations! To drive that home, and because it's generally useful,
|
||||
# here's a way to run any shell command you'd like inside the installer,
|
||||
# automatically.
|
||||
|
||||
# This first command is run as early as possible, just after
|
||||
# preseeding is read.
|
||||
#d-i preseed/early_command string anna-install some-udeb
|
||||
|
||||
# This command is run immediately before the partitioner starts. It may be
|
||||
# useful to apply dynamic partitioner preseeding that depends on the state
|
||||
# of the disks (which may not be visible when preseed/early_command runs).
|
||||
#d-i partman/early_command \
|
||||
# string debconf-set partman-auto/disk "$(list-devices disk | head -n1)"
|
||||
|
||||
# This command is run just before the install finishes, but when there is
|
||||
# still a usable /target directory. You can chroot to /target and use it
|
||||
# directly, or use the apt-install and in-target commands to easily install
|
||||
# packages and run commands in the target system.
|
||||
#d-i preseed/late_command string apt-install zsh; in-target chsh -s /bin/zsh
|
||||
d-i preseed/late_command string in-target sed -e 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' -i /etc/ssh/sshd_config
|
||||
3
variables.auto.pkrvars.hcl
Normal file
3
variables.auto.pkrvars.hcl
Normal file
@@ -0,0 +1,3 @@
|
||||
proxmox_api_url = "https://10.20.1.250:8006/api2/json"
|
||||
proxmox_api_token_id = "root@pam!terraform"
|
||||
proxmox_api_token_secret = "5da78dbe-0d78-48e5-81a3-5eaa35ff052e"
|
||||
Reference in New Issue
Block a user