Skip to content

Commit

Permalink
Merge branch 'current' of https://github.com/vyos/vyatta-cfg-system i…
Browse files Browse the repository at this point in the history
…nto current
  • Loading branch information
dmbaturin committed Nov 12, 2018
2 parents 299cb67 + f68dda9 commit f7b182f
Show file tree
Hide file tree
Showing 8 changed files with 160 additions and 63 deletions.
2 changes: 2 additions & 0 deletions Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,8 @@ curver_DATA += cfg-version/mdns@1
curver_DATA += cfg-version/dhcp-server@5
curver_DATA += cfg-version/dhcp-relay@2
curver_DATA += cfg-version/ssh@1
curver_DATA += cfg-version/l2tp@1


cpiop = find . ! -regex '\(.*~\|.*\.bak\|.*\.swp\|.*\#.*\#\)' -print0 | \
cpio -0pd
Expand Down
Empty file added cfg-version/l2tp@1
Empty file.
5 changes: 5 additions & 0 deletions debian/control
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,11 @@ Depends: adduser,
curl,
parted,
libpam-cap,
efibootmgr,
libefivar0,
grub-efi-amd64-bin,
dosfstools,
gdisk,
${arch:Depends}
Pre-Depends: bash-completion
Suggests: util-linux (>= 2.13-5),
Expand Down
7 changes: 5 additions & 2 deletions scripts/install/install-functions
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ get_drive_size () {
# Probe hardrives not shown in /proc/partitions by default
probe_drives () {
# Find drives that may not be in /proc/partitions since not mounted
drive=$(ls /sys/block | grep '[hsv]d.')
drive=$(ls /sys/block | grep '[hsv]d.|nvme.')

# now exclude all drives that are read-only
for drive in $drive; do
Expand All @@ -176,9 +176,12 @@ select_drive () {
# the first grep pattern looks for devices named c0d0, hda, and sda.
drives=$(cat /proc/partitions | \
awk '{ if ($4!="name") { print $4 } }' | \
egrep "c[0-9]d[0-9]$|[hsv]d[a-z]$" | \
egrep "c[0-9]d[0-9]$|[hsv]d[a-z]$|nvme[0-9]n[0-9]" | \
egrep -v "^$")

#this needs more testing to decide if better than above
#drives=$(lsblk -dn -o name -I8)

# take the first drive as the default
drv=$(echo $drives | /usr/bin/awk '{ print $1 }')

Expand Down
135 changes: 90 additions & 45 deletions scripts/install/install-get-partition
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@ PARTITION=''
# default file system type
ROOT_FSTYPE='ext4'

EFI_PARTITION=0
if [ -d /sys/firmware/efi ]; then
EFI_PARTITION=1
fi

warn_of_dire_consequences () {
# Give the user a requisite warning that we are about to nuke their drive
response=''
Expand Down Expand Up @@ -275,13 +280,19 @@ check_for_new_raid () {
let root_size-=$part_start_offset

for drive in $drives; do
echo "Creating data partition: /dev/${drive}${data_dev}"
create_partitions "$drive" $root_size $part_start_offset "no"
sfdisk --change-id /dev/$drive $data_dev 0xfd
# mark data partition as bootable
lecho "Marking /dev/$drive partition $data_dev bootable"
output=$(parted -s /dev/$drive set $data_dev boot on 2>&1)
lecho "$output"
create_partitions "$drive" $root_size "no"
if [ "$EFI_PARTITION" -eq "1" ]; then
#EFI moves the data parition on RAID to 3
data_dev=3
echo "Create data partition: /dev/${drive}${data_dev}"
else
echo "Creating data partition: /dev/${drive}${data_dev}"
sfdisk --change-id /dev/$drive $data_dev 0xfd
# mark data partition as bootable
lecho "Marking /dev/$drive partition $data_dev bootable"
output=$(parted -s /dev/$drive set $data_dev boot on 2>&1)
lecho "$output"
fi
done

# Must give partition device time to settle
Expand Down Expand Up @@ -668,43 +679,74 @@ create_partitions() {
echo "Error: $ldrive is only $size"MB" large. Desired root is $root_part_size"
exit 1
fi
if [ "$EFI_PARTITION" -eq "1" ]; then
#Need room for the EFI partition. 512 is standard, but 256 is probably okay here
root_part_size=$((root_part_size - 256))

##Do GPT/EFI Setup
sgdisk --zap-all /dev/$ldrive
# part1 = BIOS BOOT (backwards compatibility)
# part2 = EFI
# part3 = ROOT
sgdisk -a1 -n1:34:2047 -t1:EF02 \
-n2:2048:+256M -t2:EF00 \
-n3:0:0:+$root_part_size -t3:8300 /dev/$ldrive
status=$?
if [ "$status" != 0 ]; then
echo -e "Error creating primary partition on $ldrive.\nPlease see $INSTALL_LOG for more details.\nExiting..."
lecho "Error creating primary partition on $ldrive.\nparted /dev/$ldrive mkpart primary 0% $root_part_size\n$output"
exit 1
fi
# set the partition number on the device.
if [ -n "$( echo $ldrive | grep -E "cciss|ida|nvme" )" ]; then
# if this is a cciss
ROOT_PARTITION=$ldrive"p3"
efipart=$ldrive"p2"
else
# else... the rest of the world
ROOT_PARTITION=$ldrive"3"
efipart=$ldrive"2"
fi
#Add the drive to the file so grub can install
echo $efipart >> /tmp/efiparts.tmp
else
# Force FAT label creation
lecho "Creating a new disklabel on $ldrive"
parted -s /dev/$ldrive mklabel msdos

# Make sure you can print disk info using parted
parted --script /dev/$ldrive p >/dev/null 2>&1

# If we still can't, something has gone terribly wrong
if [ "$?" != "0" ]; then
echo "Unable to read disk label. Exiting."
exit 1
fi

# Force FAT label creation
lecho "Creating a new disklabel on $ldrive"
parted -s /dev/$ldrive mklabel msdos

# Make sure you can print disk info using parted
parted --script /dev/$ldrive p >/dev/null 2>&1

# If we still can't, something has gone terribly wrong
if [ "$?" != "0" ]; then
echo "Unable to read disk label. Exiting."
exit 1
fi

lecho "Creating root partition on /dev/$ldrive"
lecho "Creating root partition on /dev/$ldrive"

# Make the root partition
# if optimal_io_size is empty use default of 2048s
if [ $(cat /sys/block/$ldrive/queue/optimal_io_size) -gt 0 ]; then
output=$(parted --script --align optimal /dev/$ldrive mkpart primary 0% $root_part_size)
else
output=$(parted --script --align optimal /dev/$ldrive mkpart primary 2048s $root_part_size)
fi
status=$?
if [ "$status" != 0 ]; then
echo -e "Error creating primary partition on $ldrive.\nPlease see $INSTALL_LOG for more details.\nExiting..."
lecho "Error creating primary partition on $ldrive.\nparted /dev/$ldrive mkpart primary 0% $root_part_size\n$output"
exit 1
fi
# Make the root partition
# if optimal_io_size is empty use default of 2048s
if [ $(cat /sys/block/$ldrive/queue/optimal_io_size) -gt 0 ]; then
output=$(parted --script --align optimal /dev/$ldrive mkpart primary 0% $root_part_size)
else
output=$(parted --script --align optimal /dev/$ldrive mkpart primary 2048s $root_part_size)
fi
status=$?
if [ "$status" != 0 ]; then
echo -e "Error creating primary partition on $ldrive.\nPlease see $INSTALL_LOG for more details.\nExiting..."
lecho "Error creating primary partition on $ldrive.\nparted /dev/$ldrive mkpart primary 0% $root_part_size\n$output"
exit 1
fi

# set the partition number on the device.
if [ -n "$( echo $ldrive | grep -E "cciss|ida" )" ]; then
# if this is a cciss
ROOT_PARTITION=$ldrive"p1"
else
# else... the rest of the world
ROOT_PARTITION=$ldrive"1"
# set the partition number on the device.
if [ -n "$( echo $ldrive | grep -E "cciss|ida|nvme" )" ]; then
# if this is a cciss
ROOT_PARTITION=$ldrive"p1"
else
# else... the rest of the world
ROOT_PARTITION=$ldrive"1"
fi
fi
# udev takes time to re-add the device file, so wait for it
while [ ! -b "/dev/$ROOT_PARTITION" ]; do
Expand Down Expand Up @@ -824,6 +866,7 @@ setup_method_auto () {
echo -n "How big of a root partition should I create? ($ROOT_MIN"MB" - $size"MB") [$size]MB: "
response=$(get_response "$size")
# TODO: need to have better error checking on this value
# TODO: This should also probably take into account the size of the EFI partition (256MB)
root_part_size=$(echo "$response" | sed 's/[^0-9]//g')
if [ $root_part_size -lt $ROOT_MIN ] \
|| [ $root_part_size -gt $size ]; then
Expand All @@ -837,10 +880,12 @@ setup_method_auto () {

# now take the data and create the partitions
create_partitions "$INSTALL_DRIVE" "$root_part_size" "yes"
# mark data partition as bootable
lecho "Marking /dev/$INSTALL_DRIVE partition 1 as bootable"
output=$(parted -s /dev/$INSTALL_DRIVE set 1 boot on 2>&1)
lecho "$output"
if ! [ "$EFI_PARTITION" -eq "1" ]; then
# mark data partition as bootable
lecho "Marking /dev/$INSTALL_DRIVE partition 1 as bootable"
output=$(parted -s /dev/$INSTALL_DRIVE set 1 boot on 2>&1)
lecho "$output"
fi
# Must give partition device time to settle
sleep 5
}
Expand Down
4 changes: 2 additions & 2 deletions scripts/install/install-image
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ install_new ()

# postinst operations
if ! /opt/vyatta/sbin/install-postinst-new \
"$inst_drv" "$root_part" union; then
"$inst_drv" "$root_part" union; then
exit 1
fi
}
Expand Down Expand Up @@ -297,7 +297,7 @@ rm -f $PART_FILE >&/dev/null
# handle different types
case "$root_part_type" in
new)
install_new "$root_part" "$inst_drv"
install_new "$root_part" "$inst_drv"
exit 0
;;
union|old)
Expand Down
63 changes: 49 additions & 14 deletions scripts/install/install-postinst-new
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ INSTALL_DRIVE=$1
ROOT_PARTITION=$2
# install type: "union" or "old"
INSTALL_TYPE=$3
# For passing into vyatta-grub-setup
EFI_PARTITION=0

# Default user
DEFAULT_USER=vyos
Expand Down Expand Up @@ -122,24 +124,57 @@ install_grub () {
# members.

progress_indicator start

if [[ $grub_inst_drv == "md raid" ]]; then
for slave in $raid_slaves; do
grub_inst_drv=${slave:0:3}
output=$(grub-install --no-floppy --recheck --root-directory=$grub_root \
/dev/$grub_inst_drv 2>&1)
lecho "$output"
done
else
output=$(grub-install --no-floppy --recheck --root-directory=$grub_root \
/dev/$grub_inst_drv 2>&1)
lecho "$output"

if [ -f "/tmp/efiparts.tmp" ]; then
# Remove grub-pc packages
dpkg -r grub-pc grub2 >&/dev/null
# Install grub-efi packages
dpkg -i /usr/share/vyos/packages/grub-efi*.deb >&/dev/null
EFI_PARTITION=1
mkdir -p $grub_root/boot/efi
readarray parts < /tmp/efiparts.tmp
part_length=${#parts[@]}
bootloader_name="VyOS"
I=0
for part in "${parts[@]}"
do
#Name the bootloaders something different if we have a RAID
if [ "$part_length" -gt "1" ]; then
bootloader_name="VyOS (RAID disk $I)"
((I++))
fi
mkdosfs -F 32 -n EFI /dev/$part >&/dev/null
mount /dev/$part $grub_root/boot/efi
output=$(grub-install --no-floppy --recheck --target=x86_64-efi --root-directory=$grub_root --efi-directory=$grub_root/boot/efi --bootloader-id="$bootloader_name" 2>&1)
umount $grub_root/boot/efi
##TODO DO we need these to be in fstab??
#
#This is what I've used in the past
#if [ $I -gt 0 ]; then
# RAIDPART="#"
#fi
#echo "${RAIDPART}PARTUUID=$(blkid -s PARTUUID -o value $part) /boot/efi vfat defaults 0 1" >> /etc/fstab
done
rm /tmp/efiparts.tmp
else
if [[ $grub_inst_drv == "md raid" ]]; then
for slave in $raid_slaves; do
grub_inst_drv=${slave:0:3}
output=$(grub-install --no-floppy --recheck --root-directory=$grub_root \
/dev/$grub_inst_drv 2>&1)
lecho "$output"
done
else
output=$(grub-install --no-floppy --recheck --root-directory=$grub_root \
/dev/$grub_inst_drv 2>&1)
lecho "$output"
fi
fi

progress_indicator stop

output=$(/opt/vyatta/sbin/vyatta-grub-setup $grub_setup_args \
"$ROOT_PARTITION" '' $grub_root 2>&1)
"$ROOT_PARTITION" '' $grub_root "$EFI_PARTITION" 2>&1)
ret=$?
lecho "$output"
if [ $ret == 0 ]; then
Expand Down
7 changes: 7 additions & 0 deletions scripts/vyatta-grub-setup
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ shift `expr $OPTIND - 1`
ROOT_PARTITION="$1"
GRUB_OPTIONS="$2"
ROOTFSDIR="$3"
EFI_PARTITION="$4"

[ "$ROOT_PARTITION" ] || exit 1

Expand Down Expand Up @@ -155,6 +156,12 @@ fi
echo -e "serial --unit=0 --speed=9600"
echo "terminal_output --append serial"

# EFI needs a few extra modules
if [ "$EFI_PARTITION" -eq "1" ]; then
echo -e "insmod efi_gop"
echo -e "insmod efi_uga"
fi

if [ ${ROOT_PARTITION:0:2} = "md" ]; then
uuid_root_disk=`/sbin/tune2fs -l /dev/${root_disk}1 | grep UUID | awk '{print $3}'`
uuid_root_md=`/sbin/tune2fs -l /dev/md${ROOT_PARTITION#md} | grep UUID | awk '{print $3}'`
Expand Down

0 comments on commit f7b182f

Please sign in to comment.