Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/viralpoetry/packer-bare-metal
Building bare metal OS images with Packer, VirtualBox and qemu-img
https://github.com/viralpoetry/packer-bare-metal
bare-metal operating-system packer qemu-img
Last synced: 3 months ago
JSON representation
Building bare metal OS images with Packer, VirtualBox and qemu-img
- Host: GitHub
- URL: https://github.com/viralpoetry/packer-bare-metal
- Owner: viralpoetry
- Created: 2018-02-10T15:27:23.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2018-03-19T11:56:44.000Z (over 6 years ago)
- Last Synced: 2024-06-03T09:45:14.985Z (5 months ago)
- Topics: bare-metal, operating-system, packer, qemu-img
- Language: Shell
- Size: 5.86 KB
- Stars: 162
- Watchers: 8
- Forks: 25
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Building bare metal images with Packer, VirtualBox and qemu-img
This repository should demonstrate that it is possible to provision OS with Packer, then create raw disk image that can be booted directly on bare metal.
I am using random [Alpine Packer builder](https://github.com/ketzacoatl/packer-alpine/tree/master/00-iso-install) from the GitHub (thanks!) because of Alpine small size.
Firstly, run `packer build packer_template.json` to create VirtualBox `OVA` archive which contains disk and configuration files.
Then decompress `OVA` tar archive and convert `VMDK` to `RAW`:
```
$ cd output-virtualbox-iso
$ tar xvf alpine-clean-3.6.1.ova
$ qemu-img convert -f vmdk alpine-clean-3.6.1-disk001.vmdk -O raw alpine-clean-3.6.1.raw
```Check that `RAW` file is actual disk file:
```
$ fdisk -l alpine-clean-3.6.1.raw
Disk alpine-clean-3.6.1.raw: 2 GiB, 2147483648 bytes, 4194304 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x1de52f32Device Boot Start End Sectors Size Id Type
alpine-clean-3.6.1.raw1 * 2048 206847 204800 100M 83 Linux
alpine-clean-3.6.1.raw2 206848 1255423 1048576 512M 82 Linux swap / Solaris
alpine-clean-3.6.1.raw3 1255424 4194303 2938880 1.4G 83 Linux
```Partition offset is `1255424 sectors` * `512 bytes` per sector, so if you want to mount it, you can use `mount` command with the appropriate offset:
```
$ mkdir /tmp/loop
$ sudo mount -o ro,loop,offset=642777088 alpine-clean-3.6.1.raw /tmp/loop
$ mount | grep alpine-clean-3.6.1.raw
alpine-clean-3.6.1.raw on /tmp/loop type ext4 (ro,relatime,data=ordered)
```If you want to create bootable USB, make sure that your USB is not mounted. If mounted, use `umount` command.
```
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
...
sda 8:0 0 477G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 460.6G 0 part /
└─sda3 8:3 0 15.9G 0 part
sdb 8:16 1 7.3G 0 disk /media/user/ABCD-EFGH <--- our mounted USB stick$ sudo umount /media/user/ABCD-EFGH
```
Finally, write raw disk to the USB memory stick
```
$ sudo dd if=./alpine-clean-3.6.1.raw of=/dev/sdb bs=4k131072+0 records in
131072+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 139.334 s, 3.9 MB/s
```TODO:
1. Shrink disk image using zerofree / other tools
2. ?
3. ProfitSources: