Advertisement
Guest User

grub config

a guest
Jan 17th, 2024
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.00 KB | None | 0 0
  1. # Start of ---------- 00_mender_grubenv_defines_grub.cfg ----------
  2. mender_rootfsa_part=2
  3. mender_rootfsb_part=3
  4. mender_kernel_root_base=/dev/nvme0n1pp
  5. kernel_imagetype=bzImage
  6. # End of ---------- 00_mender_grubenv_defines_grub.cfg ----------
  7. # Start of ---------- 01_mender_console_bootargs_grub.cfg ----------
  8. set console_bootargs="console=tty0,115200n8 console=ttyS0,115200n8 console=ttyO0,115200n8 console=ttyAMA0,115200n8"
  9. # End of ---------- 01_mender_console_bootargs_grub.cfg ----------
  10. # Start of ---------- 02_mender_root_bootargs_grub.cfg ----------
  11. set rootargs="rootwait"
  12. # End of ---------- 02_mender_root_bootargs_grub.cfg ----------
  13. # Start of ---------- 04_mender_setup_env_functions_grub.cfg ----------
  14. # See the grub-mender-grubenv-print script for how this works.
  15.  
  16. # In this file we are skipping signature checking in most places. This is
  17. # because Mender's environment is by nature dynamic, and cannot have a static
  18. # signature. Instead, we make sure the content is valid.
  19.  
  20. # Free form variables can not be supported when signatures are
  21. # enforced. "mender_systemd_machine_id" is such a variable, so it is not
  22. # supported when signatures are on.
  23.  
  24. # Note that Secure Boot and GRUB signatures are two different things, and here
  25. # we are talking about the latter.
  26.  
  27. function mender_setup_env_location {
  28. MENDER_ENV1=(${root})/grub-mender-grubenv/mender_grubenv1/env
  29. MENDER_LOCK1=(${root})/grub-mender-grubenv/mender_grubenv1/lock
  30. MENDER_ENV2=(${root})/grub-mender-grubenv/mender_grubenv2/env
  31. MENDER_LOCK2=(${root})/grub-mender-grubenv/mender_grubenv2/lock
  32.  
  33. if [ ! -f ${MENDER_ENV1} -o ! -f ${MENDER_LOCK1} -o ! -f ${MENDER_ENV2} -o ! -f ${MENDER_LOCK2} ]; then
  34. if [ "${check_signatures}" = "enforce" ]; then
  35. echo "Signatures are enabled and the environment could not be found. Rebooting in 10 seconds..."
  36. sleep 10
  37. reboot
  38. else
  39. echo "The environment was not found. Tried to access ${MENDER_ENV1}. Continuing in 10 seconds..."
  40. sleep 10
  41. # Fallthrough and continue. Will most likely hit the "Environment is
  42. # corrupt" section below.
  43. fi
  44. fi
  45. }
  46.  
  47. function mender_check_and_restore_env {
  48. mender_setup_env_location
  49. editing=invalid
  50. load_env --skip-sig --file ${MENDER_LOCK2} editing
  51. if [ "${editing}" != 0 ]; then
  52. # See comment about "free form" variables near the top.
  53. if [ "$check_signatures" = "enforce" ]; then
  54. load_env --skip-sig --file ${MENDER_ENV1} bootcount mender_boot_part upgrade_available
  55. save_env --file ${MENDER_ENV2} bootcount mender_boot_part upgrade_available
  56. else
  57. load_env --skip-sig --file ${MENDER_ENV1} bootcount mender_boot_part upgrade_available mender_systemd_machine_id
  58. save_env --file ${MENDER_ENV2} bootcount mender_boot_part upgrade_available mender_systemd_machine_id
  59. fi
  60. editing=0
  61. save_env --file ${MENDER_LOCK2} editing
  62. else
  63. editing=invalid
  64. load_env --skip-sig --file ${MENDER_LOCK1} editing
  65. if [ "${editing}" != 0 ]; then
  66. # See comment about "free form" variables near the top.
  67. if [ "$check_signatures" = "enforce" ]; then
  68. load_env --skip-sig --file ${MENDER_ENV2} bootcount mender_boot_part upgrade_available
  69. save_env --file ${MENDER_ENV1} bootcount mender_boot_part upgrade_available
  70. else
  71. load_env --skip-sig --file ${MENDER_ENV2} bootcount mender_boot_part upgrade_available mender_systemd_machine_id
  72. save_env --file ${MENDER_ENV1} bootcount mender_boot_part upgrade_available mender_systemd_machine_id
  73. fi
  74. editing=0
  75. save_env --file ${MENDER_LOCK1} editing
  76. fi
  77. fi
  78. }
  79.  
  80. function mender_save_env {
  81. # Save redundant environment.
  82. mender_setup_env_location
  83. editing=1
  84. save_env --file ${MENDER_LOCK2} editing
  85. # See comment about "free form" variables near the top.
  86. if [ "$check_signatures" = "enforce" ]; then
  87. save_env --file ${MENDER_ENV2} bootcount mender_boot_part upgrade_available
  88. else
  89. save_env --file ${MENDER_ENV2} bootcount mender_boot_part upgrade_available mender_systemd_machine_id
  90. fi
  91. editing=0
  92. save_env --file ${MENDER_LOCK2} editing
  93.  
  94. editing=1
  95. save_env --file ${MENDER_LOCK1} editing
  96. # See comment about "free form" variables near the top.
  97. if [ "$check_signatures" = "enforce" ]; then
  98. save_env --file ${MENDER_ENV1} bootcount mender_boot_part upgrade_available
  99. else
  100. save_env --file ${MENDER_ENV1} bootcount mender_boot_part upgrade_available mender_systemd_machine_id
  101. fi
  102. editing=0
  103. save_env --file ${MENDER_LOCK1} editing
  104. }
  105.  
  106. function mender_check_grubenv_valid {
  107. if [ "${mender_boot_part}" != "${mender_rootfsa_part}" -a "${mender_boot_part}" != "${mender_rootfsb_part}" ]; then
  108. return 1
  109. fi
  110.  
  111. if [ "${bootcount}" != "0" -a "${bootcount}" != "1" ]; then
  112. return 1
  113. fi
  114.  
  115. if [ "${upgrade_available}" != "0" -a "${upgrade_available}" != "1" ]; then
  116. return 1
  117. fi
  118.  
  119. return 0
  120. }
  121.  
  122. function mender_load_env {
  123. mender_setup_env_location
  124.  
  125. # See comment about "free form" variables near the top.
  126. if [ "$check_signatures" = "enforce" ]; then
  127. load_env --skip-sig --file ${MENDER_ENV1} bootcount mender_boot_part upgrade_available
  128. else
  129. load_env --skip-sig --file ${MENDER_ENV1} bootcount mender_boot_part upgrade_available mender_systemd_machine_id
  130. export mender_systemd_machine_id
  131. fi
  132. export bootcount
  133. export mender_boot_part
  134. export upgrade_available
  135.  
  136. if ! mender_check_grubenv_valid; then
  137. if [ "${check_signatures}" = "enforce" ]; then
  138. echo "Signatures are enabled and the environment is unverified. Rebooting in 10 seconds..."
  139. sleep 10
  140. reboot
  141. else
  142. if [ "${mender_boot_part}" != "${mender_rootfsb_part}" ]; then
  143. mender_boot_part="${mender_rootfsa_part}"
  144. fi
  145. echo "The environment is corrupt. Trying to boot from ${mender_kernel_root_base}${mender_boot_part} in 10 seconds, but this is not guaranteed to be a valid partition..."
  146. sleep 10
  147. # Fallthrough and continue.
  148. fi
  149. fi
  150. }
  151.  
  152. function mender_load_env_with_rollback {
  153. mender_load_env
  154.  
  155. if [ "${upgrade_available}" = "1" ]; then
  156. if [ "${bootcount}" != "0" ]; then
  157. echo "Rolling back..."
  158. if [ "${mender_boot_part}" = "${mender_rootfsa_part}" ]; then
  159. mender_boot_part="${mender_rootfsb_part}"
  160. else
  161. mender_boot_part="${mender_rootfsa_part}"
  162. fi
  163. upgrade_available=0
  164. bootcount=0
  165. else
  166. echo "Booting new update..."
  167. bootcount=1
  168. fi
  169.  
  170. mender_save_env
  171. fi
  172. }
  173. # End of ---------- 04_mender_setup_env_functions_grub.cfg ----------
  174. # Start of ---------- 05_mender_setup_env_grub.cfg ----------
  175. mender_check_and_restore_env
  176. mender_load_env_with_rollback
  177. regexp (.*),(.*) $root -s mender_grub_storage_device
  178. # End of ---------- 05_mender_setup_env_grub.cfg ----------
  179. # Start of ---------- 05_mender_setup_grub.cfg ----------
  180. function maybe_pause {
  181. # By default we do nothing. debug-pause PACKAGECONFIG replaces this so we
  182. # can pause at strategic places.
  183. echo
  184. }
  185.  
  186. drop_to_grub_prompt="no"
  187. function maybe_drop_to_grub_prompt {
  188. # By default we do nothing. force-grub-prompt PACKAGECONFIG replaces this so we
  189. # can bypass boot and stop at the grub prompt.
  190. echo
  191. }
  192. # End of ---------- 05_mender_setup_grub.cfg ----------
  193. # Start of ---------- 06_mender_systemd_machine_id_grub.cfg ----------
  194. if test -n "${mender_systemd_machine_id}"; then
  195. systemd_bootargs="systemd.machine_id=${mender_systemd_machine_id}"
  196. fi
  197. # End of ---------- 06_mender_systemd_machine_id_grub.cfg ----------
  198. # Start of ---------- 10_mender_bootargs_grub.cfg ----------
  199. set bootargs="${bootargs} ${console_bootargs} ${rootargs} ${systemd_bootargs}"
  200. # End of ---------- 10_mender_bootargs_grub.cfg ----------
  201. # Start of ---------- 80_mender_choose_partitions_grub.cfg ----------
  202. # Historical note: The "mender_boot_part" variable means "partition to use as
  203. # root filesystem while booting", not "the boot partition". So it would be
  204. # better if it was named "mender_rootfs_part", but we can't rename it for
  205. # compatibility reasons. The rest of the variable names follow the latter
  206. # logic.
  207.  
  208. if [ "${mender_boot_part}" = "${mender_rootfsa_part}" -a test -n "${mender_kernela_part}" ]; then
  209. mender_ptable_part=${mender_kernela_part}
  210. mender_kernel_path=""
  211. elif [ "${mender_boot_part}" = "${mender_rootfsb_part}" -a test -n "${mender_kernelb_part}" ]; then
  212. mender_ptable_part=${mender_kernelb_part}
  213. mender_kernel_path=""
  214. else
  215. mender_ptable_part=${mender_boot_part}
  216. mender_kernel_path="/boot"
  217. fi
  218.  
  219. if test -e (${mender_grub_storage_device},gpt${mender_ptable_part})/; then
  220. root="${mender_grub_storage_device},gpt${mender_ptable_part}"
  221. else
  222. root="${mender_grub_storage_device},msdos${mender_ptable_part}"
  223. fi
  224.  
  225. if test -n "${mender_rootfsa_uuid}" -a test -n "${mender_rootfsb_uuid}"; then
  226. if [ "${mender_boot_part}" = "${mender_rootfsa_part}" ]; then
  227. mender_kernel_root="PARTUUID=${mender_rootfsa_uuid}"
  228. elif [ "${mender_boot_part}" = "${mender_rootfsb_part}" ]; then
  229. mender_kernel_root="PARTUUID=${mender_rootfsb_uuid}"
  230. fi
  231. else
  232. mender_kernel_root="${mender_kernel_root_base}${mender_boot_part}"
  233. fi
  234. # End of ---------- 80_mender_choose_partitions_grub.cfg ----------
  235. # Start of ---------- 90_mender_boot_grub.cfg ----------
  236. maybe_drop_to_grub_prompt
  237.  
  238. if [ "${drop_to_grub_prompt}" = "no" ]; then
  239. if linux "${mender_kernel_path}/${kernel_imagetype}" root="${mender_kernel_root}" ${bootargs}; then
  240. if test -n "${initrd_imagetype}" -a test -e "${mender_kernel_path}/${initrd_imagetype}"; then
  241. initrd "${mender_kernel_path}/${initrd_imagetype}"
  242. fi
  243. maybe_pause "Pausing before booting."
  244. boot
  245. fi
  246. maybe_pause "Pausing after failed boot."
  247. fi
  248. # End of ---------- 90_mender_boot_grub.cfg ----------
  249. # Start of ---------- 95_mender_try_to_recover_grub.cfg ----------
  250. if [ "${drop_to_grub_prompt}" != "yes" ]; then
  251. if [ "${upgrade_available}" = "1" ]; then
  252. reboot
  253. fi
  254. fi
  255. # End of ---------- 95_mender_try_to_recover_grub.cfg ----------
  256. # Start of ---------- 99_mender_end_of_grub.cfg ----------
  257. if [ "${drop_to_grub_prompt}" = "yes" ]; then
  258. echo "Dropping to grub prompt intentionally."
  259. sleep --interruptible 10 --verbose
  260. else
  261. echo "Dropping to grub prompt for unknown reason. Should never get here."
  262. sleep --interruptible 10 --verbose
  263. fi
  264. menuentry 'Dummy Entry for Debug.' 'Wait' {
  265. echo Menu Entry for debug/command prompt access
  266. }
  267. # End of ---------- 99_mender_end_of_grub.cfg ----------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement