Fedora ARM Installer

Summary
'''@ WARNING: This program *WILL* destroy *ANY* data on the selected disk. Please make sure to backup your device first and be careful! @'''

This is a first attempt at a basic Fedora ARM Image Installer ( Downloader / Creator / Updater ). All one has to do is first select a source image file or download option (click the refresh button first). Then select the destination (target) device drive to write to. Then just click install!

This script is written in Python (version 2 & 3 compatible) and makes use of the PyQt4 GUI module allowing it to run graphically (both Linux & Windows). The files written are block device image files containing: [MBR + Partitions + File Systems + Data]. Distributors should make sure to package some sort of first-boot setup-script to customize the root file system as there is no official installer for ARM devices yet. Hopefully this application will be able to create bootable media for almost any generalized Guruplug, Raspberry Pi , Efika , Pandaboard and Trimslice. Devices that boot off of hard drives may have to wait a bit as there is a line of code that ignores block devices that are greater than 32 Gigabytes in size (temporarily trying to protect users).

Note: The Windows version makes use of a pre-packaged dd.exe binary file to help write to device files

'''@ WARNING: This program *WILL* destroy *ANY* data on the selected disk. Please make sure to backup your device first and be careful! @'''





Downloads
Latest version - 1.0.0-2 (0.5.2-2)

Windows Vista & 7
Program Executable


 * 1) Click on the link above
 * 2) Right click on the file and select &quot;Extract All...&quot;
 * 3) Open the extracted folder
 * 4) Right click on the program and select &quot;Run as administrator&quot;
 * 5) Be careful!

Linux
Linux Installer


 * 1) (official yum install could arrive -- I need a first-time packaging sponsor :/)

Usage

 * The -c switch creates a flat-file with a given size in Gigabytes
 * allowing you to partition it
 * The -s switch splits the partitioned flat-file into its respective partition chunks
 * allowing you to make filesystems, mount them and copy files to them
 * The -j switch joins all of the split flat-files back into a final block image file

Script
&#035;&#033;&#047;bin&#047;bash&#010;&#010;if&#032;&#091;&#032;&#034;&#036;&#123;1&#125;&#034;&#032;&#061;&#061;&#032;&#034;c&#034;&#032;&#093;&#010;then&#010;&#009;if&#032;&#091;&#032;&#034;&#036;&#123;3&#125;&#034;&#032;&#061;&#061;&#032;&#034;&#034;&#032;&#093;&#010;&#009;then&#010;&#009;&#009;echo&#032;&#034;Usage&#058;&#032;&#036;0&#032;&#036;1&#032;&#060;filename&#062;&#032;&#060;filesize&#062;&#034;&#010;&#009;&#009;exit&#032;1&#010;&#009;fi&#010;&#009;echo&#032;&#034;Creating&#032;new&#032;file&#032;&#091;&#036;&#123;2&#125;&#093;&#046;&#046;&#046;&#034;&#010;&#009;dd&#032;if&#061;&#047;dev&#047;zero&#032;of&#061;&#036;&#123;2&#125;&#032;bs&#061;&#036;&#123;3&#125;G&#032;count&#061;1&#032;&#062;&#032;&#047;dev&#047;null&#032;2&#062;&#038;1&#010;&#009;echo&#032;&#034;Partition&#032;the&#032;new&#032;flat&#032;file&#032;&#040;&#032;fdisk&#032;&#036;&#123;2&#125;&#032;&#041;&#034;&#010;&#009;echo&#010;fi&#010;&#010;if&#032;&#091;&#032;&#034;&#036;&#123;1&#125;&#034;&#032;&#061;&#061;&#032;&#034;s&#034;&#032;&#093;&#010;then&#010;&#009;if&#032;&#091;&#032;&#034;&#036;&#123;2&#125;&#034;&#032;&#061;&#061;&#032;&#034;&#034;&#032;&#093;&#010;&#009;then&#010;&#009;&#009;echo&#032;&#034;Usage&#058;&#032;&#036;0&#032;&#036;1&#032;&#060;filename&#062;&#034;&#010;&#009;&#009;exit&#032;1&#010;&#009;fi&#010;&#009;unit&#061;&#096;fdisk&#032;&#045;l&#032;&#034;&#036;&#123;2&#125;&#034;&#032;&#124;&#032;grep&#032;&#045;i&#032;&#039;&#094;Units&#039;&#032;&#124;&#032;sed&#032;&#045;e&#032;&#039;s&#047;&#094;&#046;&#042;&#032;&#092;&#040;&#091;0&#045;9&#093;&#091;0&#045;9&#093;&#042;&#092;&#041;&#032;bytes&#046;&#042;&#036;&#047;&#092;1&#047;g&#039;&#096;&#010;&#009;lase&#061;&#034;&#045;1&#034;&#010;&#009;numb&#061;0&#010;&#009;fdisk&#032;&#045;l&#032;&#034;&#036;&#123;2&#125;&#034;&#032;&#124;&#032;sed&#032;&#045;e&#032;&#039;s&#047;&#094;&#091;&#032;&#092;t&#093;&#042;&#047;&#047;g&#039;&#032;&#045;e&#032;&#039;s&#047;&#092;&#042;&#047;&#047;g&#039;&#032;&#124;&#032;grep&#032;&#045;i&#032;&#034;&#094;&#036;&#123;2&#125;&#091;0&#045;9&#093;&#091;0&#045;9&#093;&#042;&#034;&#032;&#124;&#032;while&#032;read&#032;line&#010;&#009;do&#010;&#009;&#009;curb&#061;&#096;echo&#032;&#034;&#036;&#123;line&#125;&#034;&#032;&#124;&#032;awk&#032;&#039;&#123;&#032;print&#032;&#036;2&#032;&#125;&#039;&#096;&#010;&#009;&#009;cure&#061;&#096;echo&#032;&#034;&#036;&#123;line&#125;&#034;&#032;&#124;&#032;awk&#032;&#039;&#123;&#032;print&#032;&#036;3&#032;&#125;&#039;&#096;&#010;&#009;&#009;let&#032;size&#061;&#034;&#036;&#123;cure&#125;&#032;&#045;&#032;&#036;&#123;curb&#125;&#032;&#043;&#032;1&#034;&#010;&#009;&#009;let&#032;diff&#061;&#034;&#036;&#123;curb&#125;&#032;&#045;&#032;&#036;&#123;lase&#125;&#032;&#045;&#032;1&#034;&#010;&#009;&#009;if&#032;&#091;&#032;&#036;&#123;diff&#125;&#032;&#045;gt&#032;0&#032;&#093;&#010;&#009;&#009;then&#010;&#009;&#009;&#009;let&#032;endi&#061;&#034;&#036;&#123;curb&#125;&#032;&#045;&#032;1&#034;&#010;&#009;&#009;&#009;let&#032;skip&#061;&#034;&#036;&#123;lase&#125;&#032;&#043;&#032;1&#034;&#010;&#009;&#009;&#009;echo&#032;&#034;&#091;&#036;&#123;numb&#125;&#093;&#032;Unused&#032;space&#032;&#091;&#036;&#123;skip&#125;&#032;&#045;&#032;&#036;&#123;endi&#125;&#093;&#032;&#091;&#036;&#123;diff&#125;&#032;blocks&#093;&#046;&#046;&#046;&#034;&#010;&#009;&#009;&#009;dd&#032;if&#061;&#036;&#123;2&#125;&#032;bs&#061;&#036;&#123;unit&#125;&#032;skip&#061;&#036;&#123;skip&#125;&#032;count&#061;&#036;&#123;diff&#125;&#032;of&#061;&#036;&#123;2&#125;&#036;&#123;numb&#125;&#032;&#062;&#032;&#047;dev&#047;null&#032;2&#062;&#038;1&#010;&#009;&#009;&#009;let&#032;numb&#061;&#034;&#036;&#123;numb&#125;&#032;&#043;&#032;1&#034;&#010;&#009;&#009;fi&#010;&#009;&#009;echo&#032;&#034;&#091;&#036;&#123;numb&#125;&#093;&#032;Carving&#032;partition&#032;&#091;&#036;&#123;curb&#125;&#032;&#045;&#032;&#036;&#123;cure&#125;&#093;&#032;&#091;&#036;&#123;size&#125;&#032;blocks&#093;&#046;&#046;&#046;&#034;&#010;&#009;&#009;dd&#032;if&#061;&#036;&#123;2&#125;&#032;bs&#061;&#036;&#123;unit&#125;&#032;skip&#061;&#036;&#123;curb&#125;&#032;count&#061;&#036;&#123;size&#125;&#032;of&#061;&#036;&#123;2&#125;&#036;&#123;numb&#125;&#032;&#062;&#032;&#047;dev&#047;null&#032;2&#062;&#038;1&#010;&#009;&#009;let&#032;numb&#061;&#034;&#036;&#123;numb&#125;&#032;&#043;&#032;1&#034;&#010;&#009;&#009;lase&#061;&#034;&#036;&#123;cure&#125;&#034;&#010;&#009;done&#010;&#009;fdisk&#032;&#045;l&#032;&#034;&#036;&#123;2&#125;&#034;&#032;&#124;&#032;sed&#032;&#045;e&#032;&#039;s&#047;&#094;&#091;&#032;&#092;t&#093;&#042;&#047;&#047;g&#039;&#032;&#045;e&#032;&#039;s&#047;&#092;&#042;&#047;&#047;g&#039;&#032;&#124;&#032;grep&#032;&#045;i&#032;&#034;&#094;&#036;&#123;2&#125;&#091;0&#045;9&#093;&#091;0&#045;9&#093;&#042;&#034;&#032;&#124;&#032;tail&#032;&#045;n&#032;1&#032;&#124;&#032;while&#032;read&#032;line&#010;&#009;do&#010;&#009;&#009;endi&#061;&#096;echo&#032;&#034;&#036;&#123;line&#125;&#034;&#032;&#124;&#032;awk&#032;&#039;&#123;&#032;print&#032;&#036;3&#032;&#125;&#039;&#096;&#010;&#009;&#009;let&#032;rest&#061;&#034;&#036;&#123;endi&#125;&#032;&#043;&#032;1&#034;&#010;&#009;&#009;numb&#061;&#034;9&#034;&#010;&#009;&#009;echo&#032;&#034;&#091;&#036;&#123;numb&#125;&#093;&#032;Copying&#032;ending&#032;&#091;&#036;&#123;rest&#125;&#032;&#045;&#032;&#060;end&#062;&#093;&#046;&#046;&#046;&#034;&#010;&#009;&#009;dd&#032;if&#061;&#036;&#123;2&#125;&#032;bs&#061;&#036;&#123;unit&#125;&#032;skip&#061;&#036;&#123;rest&#125;&#032;of&#061;&#036;&#123;2&#125;&#036;&#123;numb&#125;&#032;&#062;&#032;&#047;dev&#047;null&#032;2&#062;&#038;1&#010;&#009;done&#010;&#009;echo&#010;&#009;echo&#032;&#034;Create&#032;any&#032;filesystem&#032;needed&#032;&#040;&#032;mkfs&#046;&#042;&#032;&#036;&#123;2&#125;&#091;0&#045;9&#093;&#032;&#041;&#034;&#010;&#009;echo&#032;&#034;Mount&#032;any&#032;filesystem&#032;needed&#032;&#040;&#032;mount&#032;&#045;o&#032;loop&#032;&#036;&#123;2&#125;&#091;0&#045;9&#093;&#032;&#047;mnt&#047;tmp&#091;0&#045;9&#093;&#032;&#041;&#034;&#010;&#009;echo&#032;&#034;Copy&#032;any&#032;files&#032;needed&#032;&#040;&#032;cp&#032;&#045;r&#032;source&#047;&#042;&#032;&#047;mnt&#047;tmp&#091;0&#045;9&#093;&#047;&#032;&#041;&#034;&#010;&#009;echo&#032;&#034;Unmount&#032;any&#032;filesystem&#032;needed&#032;&#040;&#032;umount&#032;&#047;mnt&#047;tmp&#091;0&#045;9&#093;&#032;&#041;&#034;&#010;&#009;echo&#010;fi&#010;&#010;if&#032;&#091;&#032;&#034;&#036;&#123;1&#125;&#034;&#032;&#061;&#061;&#032;&#034;j&#034;&#032;&#093;&#010;then&#010;&#009;if&#032;&#091;&#032;&#034;&#036;&#123;2&#125;&#034;&#032;&#061;&#061;&#032;&#034;&#034;&#032;&#093;&#010;&#009;then&#010;&#009;&#009;echo&#032;&#034;Usage&#058;&#032;&#036;0&#032;&#036;1&#032;&#060;filename&#062;&#034;&#010;&#009;&#009;exit&#032;1&#010;&#009;fi&#010;&#009;echo&#032;&#034;Writing&#032;to&#032;file&#032;&#091;&#036;&#123;2&#125;&#046;join&#093;&#046;&#046;&#046;&#034;&#010;&#009;cat&#032;&#036;&#123;2&#125;&#091;0&#045;9&#093;&#042;&#032;&#062;&#032;&#036;&#123;2&#125;&#046;join&#010;&#009;echo&#010;fi&#010;