]> git.siccegge.de Git - forks/vmdebootstrap.git/commitdiff
Allow space for a bootloader installed with dd
authorNeil Williams <codehelp@debian.org>
Tue, 23 Dec 2014 16:15:20 +0000 (16:15 +0000)
committerNeil Williams <codehelp@debian.org>
Tue, 23 Dec 2014 16:31:10 +0000 (16:31 +0000)
Implement bootoffset to explcitly allow space for
a bootloader to be installed in front of the
first partition. Add support for cubietruck in
the example to dd the Debian uboot image by adding
a parameter to the customise script call.
Increase size of boot partition to make upgrades easier.
Allow the partition type to be specified.
Use mib units as these are converted to 1024 instead of 1000.

.gitignore [new file with mode: 0644]
examples/beagleboneblack.sh
examples/cubietruck-customise.sh
examples/cubietruck.sh
vmdebootstrap

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..710c495
--- /dev/null
@@ -0,0 +1,2 @@
+*.img
+*.log
index 392394908f36f6f7b5043972d3fe70db0e34627c..30d0c4ae7d9d4d838892c1929d5fd72c29f2db0e 100755 (executable)
@@ -17,5 +17,5 @@ sudo vmdebootstrap \
  --distribution sid \
  --serial-console-command "'/sbin/getty -L ttyO0 115200 vt100'" \
  --customize "beagleboneblack-customise.sh" \
- --bootsize 50m --boottype vfat \
+ --bootsize 100mib --boottype vfat \
  "$@"
index 74a0d5b209507cb4b4893a4a5b0c4ab1ab4d8de2..4d436ae3fa813f5d691777690b189e0cd8b3164d 100755 (executable)
@@ -3,10 +3,22 @@
 set -e
 
 rootdir=$1
+image=$2
 
-# u-boot needs to be dd'd to the partition
-#cp /usr/lib/u-boot/Cubietruck/uboot.elf /boot/
-#cp /usr/lib/u-boot/Cubietruck/u-boot-sunxi-with-spl.bin /boot/
+if [ -z "${image}" ]; then
+       echo "Image not specified"
+       exit
+fi
+
+if [ ! -f '/usr/lib/u-boot/Cubietruck/u-boot-sunxi-with-spl.bin' ]; then
+       echo "Unable to find cubietruck u-boot file"
+       exit
+fi
+
+# u-boot needs to be dd'd to the device, not a partition
+# but kpartx does not setup the device, just the partitions
+
+dd if=/usr/lib/u-boot/Cubietruck/u-boot-sunxi-with-spl.bin of=${image} bs=1k seek=8
 
 mkdir -p $rootdir/boot/dtbs
 cp $rootdir/usr/lib/linux-image-*-armmp/* $rootdir/boot/dtbs
index 2da46afdf2bcd6715dddc1c16783b76f067f95eb..a904e0750a090519b0a2ec5814da890c09cf69d2 100755 (executable)
@@ -18,6 +18,6 @@ sudo vmdebootstrap \
  --distribution sid \
  --serial-console-command "/sbin/getty -L ttyS0 115200 vt100" \
  --customize "cubietruck-customise.sh" \
- --serial-console-command \
- --bootsize 50m --boottype vfat \
+ --bootoffset=2mib \
+ --bootsize 100mib --boottype vfat \
  "$@"
index aae437a9120e5ceaab66e7a18fab1913badd9eea..6f104da5ea487aa824b3673e013ecfb34c644e23 100755 (executable)
@@ -292,17 +292,41 @@ class VmDebootstrap(cliapp.Application):  # pylint: disable=too-many-public-meth
                      str(self.settings['size'])])
 
     def partition_image(self):
+        """
+        Uses fat16 (msdos) partitioning by default, use part-type to change.
+        If bootoffset is specified, the first actual partition
+        starts at that offset to allow customisation scripts to
+        put bootloader images into the space, e.g. u-boot.
+        """
         self.message('Creating partitions')
         self.runcmd(['parted', '-s', self.settings['image'],
-                     'mklabel', 'msdos'])
+                     'mklabel', self.settings['part-type']])
+        partoffset = 0
+        bootsize = 0
+        if self.settings['bootoffset'] and self.settings['bootoffset'] is not '0':
+            # turn v.small offsets into something at least possible to create.
+            if self.settings['bootoffset'] < 1048576:
+                partoffset = 1
+                logging.info(
+                    "Setting bootoffset %smib to allow for %s bytes",
+                    partoffset, self.settings['bootoffset'])
+            else:
+                partoffset = self.settings['bootoffset'] / (1024 * 1024)
+                self.message("Using bootoffset: %smib %s bytes" % (partoffset, self.settings['bootoffset']))
         if self.settings['bootsize'] and self.settings['bootsize'] is not '0%':
-            bootsize = str(self.settings['bootsize'] / (1024 * 1024))
+            bootsize = self.settings['bootsize'] / (1024 * 1024)
+            bootsize += partoffset
+            self.message("Using bootsize %smib: %s bytes" % (bootsize, self.settings['bootsize']))
+            logging.debug("Starting boot partition at %sMb", bootsize)
             self.runcmd(['parted', '-s', self.settings['image'],
-                         'mkpart', 'primary', 'fat16', '0%', bootsize])
+                         'mkpart', 'primary', 'fat16', str(partoffset), str(bootsize)])
+        if partoffset == 0:
+            self.runcmd(['parted', '-s', self.settings['image'],
+                         'mkpart', 'primary', '0%', '100%'])
         else:
-            bootsize = '0%'
-        self.runcmd(['parted', '-s', self.settings['image'],
-                     'mkpart', 'primary', bootsize, '100%'])
+            logging.debug("Starting root partition at %sMb", partoffset)
+            self.runcmd(['parted', '-s', self.settings['image'],
+                         'mkpart', 'primary', str(bootsize), '100%'])
         self.runcmd(['parted', '-s', self.settings['image'],
                      'set', '1', 'boot', 'on'])
 
@@ -662,8 +686,9 @@ append initrd=%(initrd)s root=UUID=%(uuid)s ro %(kserial)s
                 return
             script = example
         self.message('Running customize script %s' % script)
+        logging.info("rootdir=%s image=%s", rootdir, self.settings['image'])
         with open('/dev/tty', 'w') as tty:
-            cliapp.runcmd([script, rootdir], stdout=tty, stderr=tty)
+            cliapp.runcmd([script, rootdir, self.settings['image']], stdout=tty, stderr=tty)
 
     def create_tarball(self, rootdir):
         # Create a tarball of the disk's contents