Add support for customized mirror and apt-cacher
This commit is contained in:
parent
6cfc75e321
commit
3f0b0b2d7b
|
@ -58,6 +58,12 @@ pvc:
|
||||||
# Per-host TFTP path (almost always "/host" under "root_path"; must be writable)
|
# Per-host TFTP path (almost always "/host" under "root_path"; must be writable)
|
||||||
host_path: "/srv/tftp/pvc-installer/host"
|
host_path: "/srv/tftp/pvc-installer/host"
|
||||||
|
|
||||||
|
# Debian repository configuration
|
||||||
|
repo:
|
||||||
|
# Mirror path; defaults to using the apt-cacher-ng instance located on the current machine
|
||||||
|
# Replace "10.199.199.254" if you change "dhcp" -> "address" above
|
||||||
|
mirror: http://10.199.199.254:3142/ftp.debian.org/debian
|
||||||
|
|
||||||
# PVC Ansible repository configuration
|
# PVC Ansible repository configuration
|
||||||
# Note: If "path" does not exist, "remote" will be cloned to it via Git using SSH private key "keyfile".
|
# Note: If "path" does not exist, "remote" will be cloned to it via Git using SSH private key "keyfile".
|
||||||
# Note: The VCS will be refreshed regularly via the API in response to webhooks.
|
# Note: The VCS will be refreshed regularly via the API in response to webhooks.
|
||||||
|
|
|
@ -21,6 +21,8 @@ pvc:
|
||||||
tftp:
|
tftp:
|
||||||
root_path: "ROOT_DIRECTORY/tftp"
|
root_path: "ROOT_DIRECTORY/tftp"
|
||||||
host_path: "ROOT_DIRECTORY/tftp/host"
|
host_path: "ROOT_DIRECTORY/tftp/host"
|
||||||
|
repo:
|
||||||
|
mirror: http://BOOTSTRAP_ADDRESS:3142/UPSTREAM_MIRROR
|
||||||
ansible:
|
ansible:
|
||||||
path: "ROOT_DIRECTORY/repo"
|
path: "ROOT_DIRECTORY/repo"
|
||||||
keyfile: "ROOT_DIRECTORY/id_ed25519"
|
keyfile: "ROOT_DIRECTORY/id_ed25519"
|
||||||
|
|
|
@ -121,6 +121,7 @@ def read_config():
|
||||||
o_queue = o_base["queue"]
|
o_queue = o_base["queue"]
|
||||||
o_dhcp = o_base["dhcp"]
|
o_dhcp = o_base["dhcp"]
|
||||||
o_tftp = o_base["tftp"]
|
o_tftp = o_base["tftp"]
|
||||||
|
o_repo = o_base["repo"]
|
||||||
o_ansible = o_base["ansible"]
|
o_ansible = o_base["ansible"]
|
||||||
o_notifications = o_base["notifications"]
|
o_notifications = o_base["notifications"]
|
||||||
except KeyError as k:
|
except KeyError as k:
|
||||||
|
@ -178,6 +179,15 @@ def read_config():
|
||||||
f"Missing second-level key '{key}' under 'tftp'"
|
f"Missing second-level key '{key}' under 'tftp'"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Get the Repo configuration
|
||||||
|
for key in ["mirror"]:
|
||||||
|
try:
|
||||||
|
config[f"repo_{key}"] = o_repo[key]
|
||||||
|
except Exception:
|
||||||
|
raise MalformedConfigurationError(
|
||||||
|
f"Missing second-level key '{key}' under 'repo'"
|
||||||
|
)
|
||||||
|
|
||||||
# Get the Ansible configuration
|
# Get the Ansible configuration
|
||||||
for key in ["path", "key_file", "remote", "branch", "clusters_file", "lock_file"]:
|
for key in ["path", "key_file", "remote", "branch", "clusters_file", "lock_file"]:
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -67,7 +67,7 @@ def add_preseed(config, cspec_node, host_macaddr, system_drive_target):
|
||||||
# We use the dhcp_address here to allow the listen_address to be 0.0.0.0
|
# We use the dhcp_address here to allow the listen_address to be 0.0.0.0
|
||||||
rendered = template.render(
|
rendered = template.render(
|
||||||
debrelease=cspec_node.get("config", {}).get("release"),
|
debrelease=cspec_node.get("config", {}).get("release"),
|
||||||
debmirror=cspec_node.get("config", {}).get("mirror"),
|
debmirror=config.get("repo_mirror"),
|
||||||
addpkglist=add_packages,
|
addpkglist=add_packages,
|
||||||
filesystem=cspec_node.get("config", {}).get("filesystem"),
|
filesystem=cspec_node.get("config", {}).get("filesystem"),
|
||||||
skip_blockcheck=False,
|
skip_blockcheck=False,
|
||||||
|
|
|
@ -28,7 +28,7 @@ import pvcbootstrapd.lib.notifications as notifications
|
||||||
|
|
||||||
def build_tftp_repository(config):
|
def build_tftp_repository(config):
|
||||||
# Generate an installer config
|
# Generate an installer config
|
||||||
build_cmd = [ f"{config['ansible_path']}/pvc-installer/buildpxe.sh", "-o", config['tftp_root_path'], "-u", config['deploy_username'] ]
|
build_cmd = [ f"{config['ansible_path']}/pvc-installer/buildpxe.sh", "-o", config['tftp_root_path'], "-u", config['deploy_username'], "-m", config["repo_mirror"] ]
|
||||||
print(f"Building TFTP contents via pvc-installer command: {' '.join(build_cmd)}")
|
print(f"Building TFTP contents via pvc-installer command: {' '.join(build_cmd)}")
|
||||||
notifications.send_webhook(config, "begin", f"Building TFTP contents via pvc-installer command: {' '.join(build_cmd)}")
|
notifications.send_webhook(config, "begin", f"Building TFTP contents via pvc-installer command: {' '.join(build_cmd)}")
|
||||||
retcode = run(build_cmd)
|
retcode = run(build_cmd)
|
||||||
|
|
|
@ -95,12 +95,27 @@ if [[ -z ${deploy_username} ]]; then
|
||||||
fi
|
fi
|
||||||
echo
|
echo
|
||||||
|
|
||||||
|
echo "Please enter an upstream Debian mirror (hostname+directory without scheme) to use (e.g. ftp.debian.org/debian):"
|
||||||
|
echo -n "[ftp.debian.org/debian] > "
|
||||||
|
read upstream_mirror
|
||||||
|
if [[ -z ${upstream_mirror} ]]; then
|
||||||
|
upstream_mirror="ftp.debian.org/debian"
|
||||||
|
fi
|
||||||
|
echo
|
||||||
|
|
||||||
echo "Proceeding with setup!"
|
echo "Proceeding with setup!"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
echo "Installing APT dependencies..."
|
echo "Installing APT dependencies..."
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install --yes vlan iptables dnsmasq redis python3 python3-pip python3-requests sqlite3 celery pxelinux syslinux-common live-build debootstrap uuid-runtime qemu-user-static
|
sudo apt-get install --yes vlan iptables dnsmasq redis python3 python3-pip python3-requests sqlite3 celery pxelinux syslinux-common live-build debootstrap uuid-runtime qemu-user-static apt-cacher-ng
|
||||||
|
|
||||||
|
echo "Configuring apt-cacher-ng..."
|
||||||
|
sudo systemctl enable --now apt-cacher-ng
|
||||||
|
if ! grep -q ${upstream_mirror} /etc/apt-cacher-ng/backends_debian; then
|
||||||
|
echo "http://${upstream_mirror}" | sudo tee /etc/apt-cacher-ng/backends_debian &>/dev/null
|
||||||
|
sudo systemctl restart apt-cacher-ng
|
||||||
|
fi
|
||||||
|
|
||||||
echo "Configuring dnsmasq..."
|
echo "Configuring dnsmasq..."
|
||||||
sudo systemctl disable --now dnsmasq
|
sudo systemctl disable --now dnsmasq
|
||||||
|
@ -131,6 +146,7 @@ sed -i "s|BOOTSTRAP_DHCPSTART|${bootstrap_dhcpstart}|" ${root_directory}/pvcboot
|
||||||
sed -i "s|BOOTSTRAP_DHCPEND|${bootstrap_dhcpend}|" ${root_directory}/pvcbootstrapd/pvcbootstrapd.yaml
|
sed -i "s|BOOTSTRAP_DHCPEND|${bootstrap_dhcpend}|" ${root_directory}/pvcbootstrapd/pvcbootstrapd.yaml
|
||||||
sed -i "s|GIT_REMOTE|${git_remote}|" ${root_directory}/pvcbootstrapd/pvcbootstrapd.yaml
|
sed -i "s|GIT_REMOTE|${git_remote}|" ${root_directory}/pvcbootstrapd/pvcbootstrapd.yaml
|
||||||
sed -i "s|GIT_BRANCH|${git_branch}|" ${root_directory}/pvcbootstrapd/pvcbootstrapd.yaml
|
sed -i "s|GIT_BRANCH|${git_branch}|" ${root_directory}/pvcbootstrapd/pvcbootstrapd.yaml
|
||||||
|
sed -i "s|UPSTREAM_MIRROR|${upstream_mirror}|" ${root_directory}/pvcbootstrapd/pvcbootstrapd.yaml
|
||||||
|
|
||||||
echo "Creating network configuration for interface ${bootstrap_interface} (is vLAN? ${is_bootstrap_interface_vlan})..."
|
echo "Creating network configuration for interface ${bootstrap_interface} (is vLAN? ${is_bootstrap_interface_vlan})..."
|
||||||
if [[ "${is_bootstrap_interface_vlan}" == "yes" ]]; then
|
if [[ "${is_bootstrap_interface_vlan}" == "yes" ]]; then
|
||||||
|
|
Loading…
Reference in New Issue