Compare commits

..

No commits in common. "cebd6f0de2b87e6cea3143c43fa4fead31e30b37" and "7704e6149b1d0c91d19651215aeee7399a9b8c93" have entirely different histories.

5 changed files with 47 additions and 79 deletions

View File

@ -124,9 +124,8 @@ build_pxe() {
cp templates/boot.ipxe ${outputdir}/boot.ipxe
echo "done."
echo -n "Copying jinja2 templates... "
echo -n "Copying preseed template... "
cp templates/host-preseed.j2 ${outputdir}/host-preseed.j2
cp templates/host-ipxe.j2 ${outputdir}/host-ipxe.j2
echo "done."
sudo chown -R $(whoami) ${outputdir}

View File

@ -1,5 +1,5 @@
#!ipxe
{% if imgargs_host is defined and imgargs_host -%}
{% if imgargs_host is defined and imgargs_host %}
set imgargs-host {{ imgargs_host }}
{%- endif %}
{% endif %}

View File

@ -11,40 +11,53 @@
### General definitions/overrides
###
{%- if debrelease is defined and debrelease %}
{% if debrelease is defined and debrelease %}
# The Debian release to use (overrides the default)
debrelease="{{ debrelease }}"
#debrelease="buster"
debrelease="{debrelease}"
{% endif %}
{%- if debmirror is defined and debmirror %}
{% if debmirror is defined and debmirror %}
# The Debian mirror to use (overrides the default)
debmirror="{{ debmirror }}"
{%- endif %}
#debmirror="http://debian.mirror.rafal.ca/debian"
debmirror="{debmirror}"
{% endif %}
{%- if addpkglist is defined and addpkglist %}
{% if addpkglist is defined and addpkglist %}
# Additional packages (comma-separated) to install in the base system
addpkglist="{{ addpkglist }}"
{%- endif %}
#addpkglist="mypackage,otherpackage"
addpkglist="{addpkglist}"
{% endif %}
{%- if filesystem is defined and filesystem %}
{% if filesystem is defined and filesystem %}
# Alternate filesystem for system volumes (/, /var/lib/ceph, /var/lib/zookeeper)
filesystem="{{ filesystem }}"
{%- endif %}
#filesystem=ext4
filesystem="{filesystem}"
{% endif %}
{%- if skip_blockcheck is defined and skip_blockcheck %}
{% if skip_blockcheck is defined and skip_blockcheck %}
# Skip block zeroing; only recommended for testing, slow, low-endurance, or known-zeroed block devices.
skip_blockcheck="y"
{%- endif %}
{% endif %}
###
### Per-host definitions (required)
###
# The hostname of the system (set per-run)
target_hostname="{{ fqdn }}"
#target_hostname="myhostname.domain.tld"
target_hostname="{hostname}"
# The target system disk path
target_disk="{{ target_disk }}"
# The target system disk (either a path or model to find; path overrides model if set)
# Install will fail if these devices aren't found.
{% if target_disk_path is defined and target_disk_path %}
#target_disk_path="/dev/disk/by-path/pci-0000:03:00.0-scsi-0:1:0:0" # Example: RAID device via explicit path
target_disk_path="{target_disk_path}"
{% end if %}
{% if target_disk_model is defined and target_disk_model %}
#target_disk_model="DELLBOSS VD" # Example: Dell BOSS on R6515 via model name
target_disk_model="{target_disk_model}"
{% end if %}
# SSH key method (usually tftp)
target_keys_method="tftp"
@ -67,4 +80,5 @@ target_deploy_user="deploy"
#target_module_blacklist=( "hpwdt" )
# Installer checkin URI (provided by pvcbootstrapd)
pvcbootstrapd_checkin_uri="{{ pvcbootstrapd_checkin_uri }}"
#pvcbootstrapd_checkin_uri="http://10.199.199.254:9999/checkin/host"
pvcbootstrapd_checkin_uri="{pvcbootstrapd_checkin_uri}"

View File

@ -211,63 +211,18 @@ seed_config() {
host_ipaddr=$( ip -br address show ${target_interface} | awk '{ print $3 }' | awk -F '/' '{ print $1 }' )
# Handle the target disk
case "${target_disk}" in
/dev/*)
# Get the real path of the block device (for /dev/disk/* symlink paths)
target_disk="$( realpath ${target_disk} )"
;;
detect:*)
# Read the detect string into separate variables
# A detect string is formated thusly:
# detect:<Controller-or-Vendor-Name>:<0-indexed-ID>:<Capacity-in-human-units>
# For example:
# detect:INTEL:1:800GB
# detect:DELLBOSS:0:240GB
# detect:PERC H330 Mini:0:200GB
IFS=: read detect b_name b_id b_size <<<"${target_disk}"
# Get the lsscsi output (exclude NVMe)
lsscsi_data_all="$( lsscsi -s -N )"
# Get the available sizes, and match to within +/- 2%
lsscsi_sizes=( $( awk '{ print $NF }' <<<"${lsscsi_data_all}" | sort | uniq ) )
# For each size...
for size in ${lsscsi_sizes[@]}; do
# Get whether we match +2% and -2% sizes to handle human -> real deltas
# The break below is pretty safe. I can think of no two classes of disks
# where the difference is within 2% of each other. Even the common
# 120GB -> 128GB and 240GB -> 256GB size deltas are well outside of 2%,
# so this should be safe in all cases. 1% would be narrower but has more
# chance of mis-identifying due to rounding, while 3% gets into more
# contentious differences, so 2% seems like the best option.
# We use Python for this due to BASH's problematic handling of floating-
# point numbers.
is_match="$(
python <<EOF
from re import sub
b_size = float(sub(r'\D','','${b_size}'))
t_size = float(sub(r'\D','','${size}'))
plustwopct = t_size * 1.02
minustwopct = t_size * 0.98
if b_size > minustwopct and b_size < plustwopct:
print("match")
EOF
)"
# If we do, this size is our actual block size, not what was specified
if [[ -n ${is_match} ]]; then
b_size=${size}
break
fi
done
# Search for the b_name first
lsscsi_data_name="$( grep --color=none -Fiw "${b_name}" <<<"${lsscsi_data_all}" )"
# Search for the b_blocks second
lsscsi_data_name_size="$( grep --color=none -Fiw "${b_size}" <<<"${lsscsi_data_name}" )"
# Read the /dev/X results into an array
lsscsi_filtered=( $( awk '{ print $(NF-1) }' <<<"${lsscsi_data_name_size}" ) )
# Get the b_id-th entry
target_disk="${lsscsi_filtered[${b_id}]}"
;;
esac
if [[ -n ${target_disk_path} ]]; then
target_disk="$( realpath ${target_disk_path} )"
else
# Find the (first) disk with the given model
for disk in /dev/sd?; do
disk_model="$( fdisk -l ${disk} | grep 'Disk model:' | sed 's/Disk model: //g' )"
if [[ ${disk_model} == ${target_disk_model} ]]; then
target_disk="${disk}"
break
fi
done
fi
if [[ ! -b ${target_disk} ]]; then
echo "Invalid disk or disk not found!"
exit 1

View File

@ -1 +1 @@
live-task-standard live-tools live-boot live-boot-initramfs-tools linux-image-amd64 psmisc mdadm lvm2 parted gdisk dosfstools debootstrap grub-pc-bin grub-efi-amd64 sipcalc vim ca-certificates vlan tftp-hpa curl ipmitool lsscsi
live-task-standard live-tools live-boot live-boot-initramfs-tools linux-image-amd64 psmisc mdadm lvm2 parted gdisk dosfstools debootstrap grub-pc-bin grub-efi-amd64 sipcalc vim ca-certificates vlan tftp-hpa curl ipmitool