Skip to content

Commit d993b68

Browse files
authored
[GRUB] [Boot] Unified Grub config for all installer options (#39)
Signed-off-by: Vivek Reddy Karri <[email protected]>
1 parent d3f8e1b commit d993b68

6 files changed

Lines changed: 172 additions & 208 deletions

File tree

build_image.sh

Lines changed: 7 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -113,82 +113,6 @@ clean_dir()
113113
exit $2
114114
}
115115

116-
generate_s2s_installer_image_bluefield()
117-
{
118-
if [ ! -d installer ] || [ ! -r installer/sharch_body.sh ] ; then
119-
echo "Error: Invalid installer script directory: installer"
120-
exit 1
121-
fi
122-
123-
if [ ! -d installer/bluefield ] || [ ! -r installer/bluefield/sonic_to_sonic.sh ] ; then
124-
echo "Error: Invalid arch installer directory: installer/bluefield"
125-
exit 1
126-
fi
127-
128-
# Copy platform-specific installer config files
129-
rm -rf ./installer/bluefield/platforms/
130-
mkdir -p ./installer/bluefield/platforms/
131-
for PLATFORM in `ls ./device/nvidia-bluefield`; do
132-
if [ -f ./device/nvidia-bluefield/$PLATFORM/installer.conf ]; then
133-
cp ./device/nvidia-bluefield/$PLATFORM/installer.conf ./installer/bluefield/platforms/$PLATFORM
134-
fi
135-
done
136-
137-
echo -n "Building self-extracting install image ."
138-
tmp_dir=$(mktemp --directory)
139-
tmp_installdir="$tmp_dir/installer"
140-
mkdir $tmp_installdir || clean_dir $tmp_dir 1
141-
142-
# Copy the bluefield specific sonic_to_sonic installer script and rename
143-
cp installer/bluefield/sonic_to_sonic.sh $tmp_installdir/install.sh
144-
145-
# Replace the build time flags inside the script
146-
sed -i -e "s/%%IMAGE_VERSION%%/$IMAGE_VERSION/g" \
147-
-e "s/%%INSTALLER_PAYLOAD%%/$ONIE_INSTALLER_PAYLOAD/g" \
148-
-e "s/%%FILESYSTEM_DOCKERFS%%/$FILESYSTEM_DOCKERFS/g" \
149-
-e "s/%%DOCKERFS_DIR%%/$DOCKERFS_DIR/g" \
150-
-e "s/%%FILESYSTEM_SQUASHFS%%/$FILESYSTEM_SQUASHFS/g" \
151-
-e "s/%%KERNEL_VERSION%%/$KVERSION/g" $tmp_installdir/install.sh || clean_dir $tmp_dir 1
152-
chmod 0755 $tmp_installdir/install.sh
153-
154-
# Copy the payload file
155-
cp $ONIE_INSTALLER_PAYLOAD $tmp_installdir || clean_dir $tmp_dir 1
156-
157-
# Create machine.conf file
158-
echo "machine=nvidia-bluefield" > $tmp_installdir/machine.conf
159-
echo "platform=arm64" >> $tmp_installdir/machine.conf
160-
161-
sharch="$tmp_dir/sharch.tar"
162-
tar -C $tmp_dir -cf $sharch installer || {
163-
echo "Error: Problems creating $sharch archive"
164-
clean_dir $tmp_dir 1
165-
}
166-
167-
[ -f "$sharch" ] || {
168-
echo "Error: $sharch not found"
169-
clean_dir $tmp_dir 1
170-
}
171-
172-
sha1=$(cat $sharch | sha1sum | awk '{print $1}')
173-
echo -n "."
174-
175-
cp installer/sharch_body.sh $OUTPUT_ONIE_IMAGE || {
176-
echo "Error: Problems copying sharch_body.sh"
177-
clean_dir 1
178-
}
179-
180-
# Replace variables in the sharch template
181-
sed -i -e "s/%%IMAGE_SHA1%%/$sha1/" $OUTPUT_ONIE_IMAGE
182-
echo -n "."
183-
cat $sharch >> $OUTPUT_ONIE_IMAGE
184-
rm -rf $tmp_dir
185-
echo " Done."
186-
187-
echo "Success: Demo install image is ready in ${OUTPUT_ONIE_IMAGE}:"
188-
189-
clean_dir $tmp_dir 0
190-
}
191-
192116
if [ "$IMAGE_TYPE" = "onie" ]; then
193117
echo "Build ONIE installer"
194118
mkdir -p `dirname $OUTPUT_ONIE_IMAGE`
@@ -299,19 +223,15 @@ elif [ "$IMAGE_TYPE" = "aboot" ]; then
299223
./scripts/sign_image.sh -i "$OUTPUT_ABOOT_IMAGE" -k "$SIGNING_KEY" -c "$SIGNING_CERT" -a "$TARGET_CA_CERT"
300224
fi
301225

302-
elif [[ $IMAGE_TYPE = s2s && $CONFIGURED_PLATFORM == nvidia-bluefield ]]; then
303-
# bluefield Doesn't have ONiE Support yet and this *.bin image generated can only be used for SONiC-SONiC installation
304-
echo "Build SONiC to SONiC installer for Bluefield"
305-
mkdir -p `dirname $OUTPUT_ONIE_IMAGE`
306-
sudo rm -f $OUTPUT_ONIE_IMAGE
307-
generate_s2s_installer_image_bluefield
308-
309-
elif [[ ( $IMAGE_TYPE == bfb || $IMAGE_TYPE == pxe ) && $CONFIGURED_PLATFORM == nvidia-bluefield ]]; then
226+
elif [[ $CONFIGURED_PLATFORM == nvidia-bluefield ]]; then
310227
sudo --preserve-env /sonic/installer/bluefield/create_sonic_image --kernel $KVERSION
311-
sudo chown $USER ./$OUTPUT_BFB_IMAGE
312-
if [[ $IMAGE_TYPE == pxe ]]; then
313-
sudo chown $USER ./$OUTPUT_PXE_IMAGE
228+
if [[ $IMAGE_TYPE != bin ]]; then
229+
sudo chown $USER ./$OUTPUT_BFB_IMAGE
230+
if [[ $IMAGE_TYPE == pxe ]]; then
231+
sudo chown $USER ./$OUTPUT_PXE_IMAGE
232+
fi
314233
fi
234+
315235
else
316236
echo "Error: Non supported image type $IMAGE_TYPE"
317237
exit 1

installer/bluefield/create_sonic_image

Lines changed: 112 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,13 @@
1919
# This script generates the corresponding SONiC installer images for Bluefield
2020
# 1) BFB Image
2121
# 2) PXE Archive for Network Booting
22+
# 3) BIN Image for SONiC-SONiC Installation
2223

2324
set -e
2425

2526
WDIR=
26-
IMAGE_VER=
27-
KERNEL=
27+
IMAGE_VERSION=
28+
KERNEL_VERSION=
2829
CHROOT_DIR=
2930
INITRD=
3031
VMLINUZ=
@@ -41,6 +42,8 @@ TARGET_MACHINE=nvidia-bluefield
4142
BFB="${BFB:-/lib/firmware/mellanox/boot/default.bfb}"
4243
GRUB_AA64=grubnetaa64.efi
4344
CONSOLE_PARAM="console=ttyAMA1 console=hvc0 console=ttyAMA0 earlycon=pl011,0x01000000 earlycon=pl011,0x01800000"
45+
GRUB_CFG="" # Common Grub Config
46+
DEFAULT_GRUB_CMDLINE_LINUX="$CONSOLE_PARAM quiet"
4447

4548
usage() {
4649
cat << EOF
@@ -65,7 +68,7 @@ parse_args() {
6568
;;
6669
-k|--kernel)
6770
shift
68-
KERNEL=$1
71+
KERNEL_VERSION=$1
6972
;;
7073
*)
7174
usage
@@ -76,12 +79,81 @@ parse_args() {
7679
done
7780
}
7881

79-
validate_config() {
80-
if [[ ! -d "$CHROOT_DIR" ]]; then
81-
echo "[create_sonic_image] Error! Path to CHROOT not found"
82+
clean_dir()
83+
{
84+
rm -rf $1
85+
exit $2
86+
}
87+
88+
generate_s2s_installer_image_bluefield()
89+
{
90+
if [ ! -d /sonic/installer ] || [ ! -r /sonic/installer/sharch_body.sh ] ; then
91+
echo "Error: Invalid installer script directory: installer"
92+
exit 1
93+
fi
94+
95+
if [ ! -d /sonic/installer/bluefield ] || [ ! -r /sonic/installer/bluefield/sonic_to_sonic.sh.j2 ] ; then
96+
echo "Error: Invalid arch installer directory: installer/bluefield"
8297
exit 1
8398
fi
8499

100+
# Copy platform-specific installer config files
101+
rm -rf /sonic/installer/bluefield/platforms/
102+
mkdir -p /sonic/installer/bluefield/platforms/
103+
for PLATFORM in `ls ./device/nvidia-bluefield`; do
104+
if [ -f /sonic/device/nvidia-bluefield/$PLATFORM/installer.conf ]; then
105+
cp /sonic/device/nvidia-bluefield/$PLATFORM/installer.conf /sonic/installer/bluefield/platforms/$PLATFORM
106+
fi
107+
done
108+
109+
echo -n "Building self-extracting installer image ."
110+
tmp_dir=$(mktemp --directory)
111+
tmp_installdir="$tmp_dir/installer"
112+
mkdir $tmp_installdir || clean_dir $tmp_dir 1
113+
114+
# Replace the build time flags inside the sonic_to_sonic.sh script
115+
j2 /sonic/installer/bluefield/sonic_to_sonic.sh.j2 -o $tmp_installdir/install.sh || clean_dir $tmp_dir 1
116+
chmod 0755 $tmp_installdir/install.sh
117+
118+
# Copy the payload file
119+
cp $ONIE_INSTALLER_PAYLOAD $tmp_installdir || clean_dir $tmp_dir 1
120+
121+
# Create machine.conf file
122+
echo "machine=nvidia-bluefield" > $tmp_installdir/machine.conf
123+
echo "platform=arm64" >> $tmp_installdir/machine.conf
124+
125+
sharch="$tmp_dir/sharch.tar"
126+
tar -C $tmp_dir -cf $sharch installer || {
127+
echo "Error: Problems creating $sharch archive"
128+
clean_dir $tmp_dir 1
129+
}
130+
131+
[ -f "$sharch" ] || {
132+
echo "Error: $sharch not found"
133+
clean_dir $tmp_dir 1
134+
}
135+
136+
sha1=$(cat $sharch | sha1sum | awk '{print $1}')
137+
echo -n "."
138+
139+
cp /sonic/installer/sharch_body.sh /sonic/$OUTPUT_ONIE_IMAGE || {
140+
echo "Error: Problems copying sharch_body.sh"
141+
clean_dir 1
142+
}
143+
144+
# Replace variables in the sharch template
145+
sed -i -e "s/%%IMAGE_SHA1%%/$sha1/" /sonic/$OUTPUT_ONIE_IMAGE
146+
echo -n "."
147+
cat $sharch >> /sonic/$OUTPUT_ONIE_IMAGE
148+
rm -rf $tmp_dir
149+
150+
echo " Done."
151+
echo "Success: sonic-sonic installer install image for bluefield is ready in /sonic/${OUTPUT_ONIE_IMAGE}:"
152+
153+
clean_dir $tmp_dir 0
154+
}
155+
156+
validate_config() {
85157
if [[ ! -f "$INITRD" ]]; then
86158
echo "[create_sonic_image] Error! SONiC INITRD not found"
87159
exit 1
@@ -160,15 +232,8 @@ add_sonic_to_initramfs() {
160232
# Add the logic to put second stage installer into bfb initramfs
161233
mkdir -p debian
162234

163-
cp ${SDIR}/install.sh temp_install.sh
164-
sed -i -e "s/%%IMAGE_VERSION%%/$IMAGE_VER/g" temp_install.sh
165-
sed -i -e "s/%%INSTALLER_PAYLOAD%%/$ONIE_INSTALLER_PAYLOAD/g" temp_install.sh
166-
sed -i -e "s/%%FILESYSTEM_DOCKERFS%%/$FILESYSTEM_DOCKERFS/g" temp_install.sh
167-
sed -i -e "s/%%DOCKERFS_DIR%%/$DOCKERFS_DIR/g" temp_install.sh
168-
sed -i -e "s/%%FILESYSTEM_SQUASHFS%%/$FILESYSTEM_SQUASHFS/g" temp_install.sh
169-
sed -i -e "s/%%KERNEL_VERSION%%/$KERNEL/g" temp_install.sh
170-
install -m 0755 temp_install.sh ./debian/install.sh
171-
rm -f temp_install.sh
235+
j2 ${SDIR}/install.sh.j2 -o ./debian/install.sh
236+
chmod 0755 ./debian/install.sh
172237

173238
# Copy the INSTALLER payload
174239
cp $CDIR/$ONIE_INSTALLER_PAYLOAD ./debian/
@@ -182,7 +247,7 @@ printf_msg()
182247
return 0
183248
}
184249
185-
depmod -a $KERNEL > /dev/null 2>&1
250+
depmod -a $KERNEL_VERSION > /dev/null 2>&1
186251
insmod /usr/lib/modules/5.10.0-8-2-arm64/kernel/drivers/virtio/virtio.ko > /dev/null 2>&1
187252
insmod /usr/lib/modules/5.10.0-8-2-arm64/kernel/drivers/virtio/virtio_ring.ko > /dev/null 2>&1
188253
insmod /efivarfs.ko > /dev/null 2>&1
@@ -318,7 +383,7 @@ create_bfb_image() {
318383
copy_bin $tool
319384
done
320385

321-
sudo depmod -a -b ./ $KERNEL
386+
sudo depmod -a -b ./ $KERNEL_VERSION
322387
mkdir -p usr/share/misc/ bin/ var/log/watchdog
323388
sudo cp /etc/watchdog.conf etc
324389
sudo cp /usr/share/misc/pci.ids usr/share/misc/
@@ -390,22 +455,40 @@ main() {
390455

391456
. $CDIR/onie-image-arm64.conf
392457

458+
# Export ENV Variables for j2cli
393459
CHROOT_DIR=$CDIR/$FILESYSTEM_ROOT
394-
INITRD=$CDIR/$FILESYSTEM_ROOT/boot/initrd.img-$KERNEL
395-
VMLINUZ=$CDIR/$FILESYSTEM_ROOT/boot/vmlinuz-$KERNEL
396-
MODULES_DIR=$CDIR/$FILESYSTEM_ROOT/lib/modules/$KERNEL
397-
EFIVARS_MOD=$MODULES_DIR/kernel/fs/efivarfs/efivarfs.ko
398-
WATCHDOG=$MODULES_DIR/kernel/drivers/watchdog/sbsa_gwdt.ko
399-
IMAGE_VER=$(cat $CHROOT_DIR/etc/sonic/sonic_version.yml | grep "build_version" | sed -e "s/build_version: //g;s/'//g")
400-
validate_config
460+
if [[ ! -d "$CHROOT_DIR" ]]; then
461+
echo "[create_sonic_image] Error! Path to CHROOT not found"
462+
exit 1
463+
fi
464+
465+
export GRUB_CFG=$(cat /sonic/installer/bluefield/sonic-grub.cfg)
466+
export IMAGE_VERSION=$(cat $CHROOT_DIR/etc/sonic/sonic_version.yml | grep "build_version" | sed -e "s/build_version: //g;s/'//g")
467+
export DEFAULT_GRUB_CMDLINE_LINUX ONIE_INSTALLER_PAYLOAD FILESYSTEM_DOCKERFS DOCKERFS_DIR FILESYSTEM_SQUASHFS KERNEL_VERSION
401468

402-
create_workdir
403-
echo "Work directory: $WDIR"
469+
if [[ $IMAGE_TYPE == bin ]]; then
470+
# bluefield Doesn't have ONiE Support yet and this *.bin image generated can only be used for SONiC-SONiC installation
471+
echo "Build SONiC to SONiC installer for Bluefield"
472+
mkdir -p `dirname $OUTPUT_ONIE_IMAGE`
473+
sudo rm -f $OUTPUT_ONIE_IMAGE
474+
generate_s2s_installer_image_bluefield
475+
else
476+
INITRD=$CDIR/$FILESYSTEM_ROOT/boot/initrd.img-$KERNEL_VERSION
477+
VMLINUZ=$CDIR/$FILESYSTEM_ROOT/boot/vmlinuz-$KERNEL_VERSION
478+
MODULES_DIR=$CDIR/$FILESYSTEM_ROOT/lib/modules/$KERNEL_VERSION
479+
EFIVARS_MOD=$MODULES_DIR/kernel/fs/efivarfs/efivarfs.ko
480+
WATCHDOG=$MODULES_DIR/kernel/drivers/watchdog/sbsa_gwdt.ko
481+
482+
validate_config
404483

405-
create_bfb_image
484+
create_workdir
485+
echo "Work directory: $WDIR"
406486

407-
if [[ $IMAGE_TYPE == pxe ]]; then
408-
create_pxe_archive
487+
create_bfb_image
488+
489+
if [[ $IMAGE_TYPE == pxe ]]; then
490+
create_pxe_archive
491+
fi
409492
fi
410493
}
411494

Lines changed: 8 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,13 @@
1919
# This will setup the disk, grub etc for the actual SONiC to boot from
2020

2121
# NOTE: Replace these flag at build time
22-
IMAGE_VERSION="%%IMAGE_VERSION%%"
23-
INSTALLER_PAYLOAD="%%INSTALLER_PAYLOAD%%"
24-
FILESYSTEM_DOCKERFS="%%FILESYSTEM_DOCKERFS%%"
25-
DOCKERFS_DIR="%%DOCKERFS_DIR%%"
26-
FILESYSTEM_SQUASHFS="%%FILESYSTEM_SQUASHFS%%"
27-
KERNEL_VERSION="%%KERNEL_VERSION%%"
22+
IMAGE_VERSION="{{IMAGE_VERSION}}"
23+
INSTALLER_PAYLOAD="{{ONIE_INSTALLER_PAYLOAD}}"
24+
FILESYSTEM_DOCKERFS="{{FILESYSTEM_DOCKERFS}}"
25+
DOCKERFS_DIR="{{DOCKERFS_DIR}}"
26+
FILESYSTEM_SQUASHFS="{{FILESYSTEM_SQUASHFS}}"
27+
KERNEL_VERSION="{{KERNEL_VERSION}}"
28+
DEFAULT_GRUB_CMDLINE_LINUX="{{DEFAULT_GRUB_CMDLINE_LINUX}}"
2829

2930
image_dir="image-$IMAGE_VERSION"
3031
demo_volume_revision_label="SONiC-OS-${IMAGE_VERSION}"
@@ -204,27 +205,9 @@ ex grub-install \
204205
grub_cfg=$(mktemp)
205206

206207
# Modify GRUB_CMDLINE_LINUX from bf.cfg file if required
207-
# GRUB_CMDLINE_LINUX
208-
209-
DEFAULT_GRUB_CMDLINE_LINUX="console=ttyAMA1 console=hvc0 console=ttyAMA0 earlycon=pl011,0x01000000 earlycon=pl011,0x01800000 quiet"
210208
GRUB_CMDLINE_LINUX=${GRUB_CMDLINE_LINUX:-"$DEFAULT_GRUB_CMDLINE_LINUX"}
211209
export GRUB_CMDLINE_LINUX
212210

213-
# Add the logic to support grub-reboot and grub-set-default
214-
cat <<EOF >> $grub_cfg
215-
if [ -s \$prefix/grubenv ]; then
216-
load_env
217-
fi
218-
if [ "\${saved_entry}" ]; then
219-
set default="\${saved_entry}"
220-
fi
221-
if [ "\${next_entry}" ]; then
222-
set default="\${next_entry}"
223-
unset next_entry
224-
save_env next_entry
225-
fi
226-
EOF
227-
228211
# Add a menu entry for the SONiC OS
229212
# Note: assume that apparmor is supported in the kernel
230213
demo_grub_entry="$demo_volume_revision_label"
@@ -237,27 +220,9 @@ else
237220
grub_cfg_root=UUID=$uuid
238221
fi
239222

240-
# Add common configuration, like the timeout
241-
cat <<EOF >> $grub_cfg
242-
set timeout=5
243-
EOF
244223

245224
cat <<EOF >> $grub_cfg
246-
menuentry '$demo_grub_entry' {
247-
insmod gzio
248-
insmod part_gpt
249-
insmod ext2
250-
search --no-floppy --label --set=root SONiC-OS
251-
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
252-
echo 'Loading SONiC-OS Kernel'
253-
linux /$image_dir/boot/vmlinuz-$KERNEL_VERSION root=$grub_cfg_root rw $GRUB_CMDLINE_LINUX fixrtc \
254-
loop=$image_dir/$FILESYSTEM_SQUASHFS loopfstype=squashfs \
255-
systemd.unified_cgroup_hierarchy=0 \
256-
apparmor=1 security=apparmor varlog_size=4096 systemd.unified_cgroup_hierarchy=0 \
257-
isolcpus=1-7 nohz_full=1-7 rcu_nocbs=1-7
258-
echo 'Loading SONiC-OS initial ramdisk ...'
259-
initrd /$image_dir/boot/initrd.img-$KERNEL_VERSION
260-
}
225+
{{GRUB_CFG}}
261226
EOF
262227

263228
# Copy the grub.cfg onto the boot-directory as specified in the grub-install

0 commit comments

Comments
 (0)