Busybox and QEMU (20090405)

From FedoraProject

Jump to: navigation, search
@spevack we're about ready to start. I'd like to re-introduce G__81, who is setting a Fedora Classroom record by teaching 3 classes in a row. He'll be starting in the next minute or two, whenever he's ready. Just a reminder that in 75 minutes, we'll have cwickert's class on RPM Packaging 12:13
* spevack hands the microphone to G__81 12:13
... spevack changed the topic of #fedora-classroom to: Fedora Classroom -- Busybox & QEMU 12:13
... join!#fedora-classroom -> marek(n=mmahut@fedora/pyxel) 12:13
G__81 thanks for the introduction spevack and we shall start off 12:15
... signoff!#fedora-classroom -> kkolle(Read error: 110 (Connection timed out)) 12:15
G__81 ok today's session focus would be more on how to use busybox and create a basic filesystem 12:16
G__81 and before we get into qemu we would use the created file system and test it with User Mode Linux :) which we had yesterday 12:16
G__81 ok now 12:17
G__81 how many of you know whats busybox 12:17
dash123 g__81: by creating a fs, you mean we'll be creating the same thing folks at nagios.co.uk did for us? 12:17
dash123 not me...did a wiki read of course 12:18
G__81 dash123, thats a fedora file system that we used which has many packages but lets say you just want a basic file system which would boot and you could play with it and which has basic utilities 12:18
... join!#fedora-classroom -> Padhu(n=Padhu@ 12:18
G__81 so we are going to create a very basic file system and use it with user mode linux. Additions to it could be made later 12:19
dash123 ok 12:19
G__81 not sure whether we could cover everything today but i ll try my level best to cover whatever i could 12:19
G__81 ok busybox is an utility to create embedded file systems with basic utilities installed in the file system 12:20
... join!#fedora-classroom -> xyzz(n=xyzz@norkia.v3.sk) 12:20
G__81 these utilities could be some bash stuff but it basically does not include any compilers, or any other packages which come as additions 12:21
G__81 ok now let us download busybox and compile it 12:21
jcapel does busybox actually have binaries like /bin/ls, or are these interpreted by the shell? 12:21
dash123 can we jsut yum install busybox it....i saw it exists 12:21
G__81 jcapel, yes it does have 12:22
G__81 dash123, no let us not do that then you would not know how to customize it i am not sure what options you have by default 12:22
G__81 its quite similar to configuring the kernel :) 12:22
dash123 ok... 12:22
G__81 you could download the software from this link 12:22
G__81 http://busybox.net/downloads/busybox-1.13.3.tar.bz2 12:22
linuxguru so we don't use the one already packaged in fedora ? 12:23
G__81 yes 12:23
G__81 you could its not that we shouldnt 12:23
G__81 but lets take the hard route so that we get to know the options what are available :) 12:24
l0nwlf busybox downloaded and extracted 12:24
l0nwlf now what ? 12:24
G__81 good 12:25
... leave!#fedora-classroom -> so_solid_moo("Ex-Chat") 12:25
G__81 now lets first create a raw file 12:25
G__81 an image file 12:25
G__81 you could use qemu img creator for this 12:25
G__81 do you all have qemu image creator installed ? 12:25
lwh yes 12:26
jcapel no, but I imagine dd wil also work? 12:26
G__81 yeah fine if you all know about dd fine then 12:26
G__81 lets go the dd way then 12:27
... signoff!#fedora-classroom -> dash123("http://www.mibbit.com ajax IRC Client") 12:27
l0nwlf no 12:27
l0nwlf qemu > I think I should get it via Yum 12:27
G__81 any problem ? 12:27
G__81 let me tell you both then :) 12:27
l0nwlf dd will work i hope ? 12:27
G__81 i ll tell you how to create it using dd and qemu too 12:27
G__81 lets create an empty file for 320k size 12:28
G__81 dd if=/dev/zero of=rootfs.img bs=320k count=1 12:28
G__81 this would create an empty file 12:28
G__81 to know more about dd parameters you could do man dd 12:29
l0nwlf well inside the Busybox directory 12:29
G__81 no not necessary 12:29
G__81 you could do this inside your home dir 12:29
G__81 is it done? 12:30
* G__81 waits 12:30
openpercept yes 12:30
lwh yes 12:30
jcapel yes 12:30
l0nwlf yes 12:30
G__81 yeah fine 12:30
G__81 now parallely let me tell you what you would need to do if you want to use qemu image creator 12:30
G__81 example:qemu-img create rootfs.qcow 1G 12:31
l0nwlf qemu.i386 : QEMU is a FAST! processor emulator 12:31
G__81 the above command would create a rootfs.qcow file system of 1GB size 12:31
G__81 you could use anything you need 12:32
... join!#fedora-classroom -> dash123(i=dce36163@gateway/web/ajax/mibbit.com/x-c69e252ac209cbe4) 12:32
G__81 ok now you have created the rootfs.img 12:32
G__81 now lets format the file system 12:32
... join!#fedora-classroom -> ideamonk(n=ideamonk@ 12:32
G__81 i mean format the file using ext2 or ext3 12:32
jcapel the 320k one? 12:33
G__81 yes 12:33
... signoff!#fedora-classroom -> Malformation(Remote closed the connection) 12:33
G__81 mkfs.ext2 i 12:34
G__81 1024 F 12:34
G__81 rootfs.img 12:34
G__81 sorry 12:34
G__81 "mkfs.ext2 -i 12:34
G__81 1024 -F 12:34
G__81 rootfs.img" 12:34
G__81 this is the command for some reason i get line breaks :-o 12:34
G__81 you could either use ext2 or ext3 12:34
G__81 if you want ext3 you could do mkfs.ext3 12:35
* G__81 wait 12:35
* G__81 waits 12:35
jcapel is there any reason in particular for the -i 1024? 12:35
jcapel (done, btw) 12:36
lwh rootfs.img: Linux rev 1.0 ext2 filesystem data 12:36
... join!#fedora-classroom -> mahesh(n=mahesh@ 12:36
G__81 ok yeah fine 12:36
... join!#fedora-classroom -> Malformation(n=Malforma@tiesda1.lnk.telstra.net) 12:37
l0nwlf well i do not understood 1 thing 12:37
G__81 as far as i know 1 node is every 1024 bytes and hence you give it but exact reason i could refer and let you know 12:37
openpercept done, does -i refers to the block size for FS? i guess 12:37
G__81 i am not ablee to recollect it 12:38
l0nwlf dd if=/dev/zero of=rootfs.img bs=320k count=1 => after this we need to make the FS 12:38
G__81 l0nwlf, yes 12:38
G__81 you need to format it and create a file system 12:38
G__81 the dd command creates an empty file 12:38
l0nwlf and the command will be "mkfs...." 12:39
lwh mkfs.ext3 or mkfs.ext2 12:39
G__81 you could use either of those 2 12:39
l0nwlf ok , i'll go with ext3 12:40
* G__81 waits 12:40
l0nwlf well i got some odd outputs 12:41
l0nwlf pasting the log 12:41
l0nwlf http://www.mibbit.com/pb/mfnGNw 12:41
G__81 its done 12:41
G__81 its not odd thats how you get it 12:42
G__81 if you read through it it says what its doin :) 12:42
... leave!#fedora-classroom -> xyzz() 12:42
l0nwlf "Filesystem too small for a journal" -> why ? 12:42
l0nwlf and why will this FS be checked after every 30 mounts/180 days ? 12:43
thomasj l0nwlf, google will answer that for you, has nothing to do with the class right now. 12:44
linuxguru that's how ext3 works 12:44
l0nwlf ok 12:44
G__81 l0nwlf, the ext3 file system is a journalized file system and hence even if you use this mkfs.ext3 as far as i know it still gets you a ext2 file system i believe 12:44
G__81 if i am wrong someone can correct me 12:44
G__81 ok now 12:45
Padhu excuse me tutor, will you please give me an link of these logx 12:45
G__81 logs ? 12:45
G__81 what logs ? 12:45
mahesh it will be set in the fedoraproject.org/wiki/classroom later 12:45
Padhu fedora class room logs 12:45
G__81 yeah now 12:46
G__81 the above steps make sure you have a basic file system 12:46
icarus-c Padhu: it is on the classroom wiki page 12:46
G__81 now lets dive into Busybox and start playing with it 12:46
icarus-c https://fedoraproject.org/wiki/Communicate/IRC/Classroom 12:47
G__81 so whats the advantage of busybox 12:47
... nick!Marflow -> marflow_afk 12:47
G__81 or rather why at all should i use busybox 12:47
Padhu ok thanks 12:47
... nick!marflow_afk -> Marflow 12:48
G__81 if the space requirements are so tight in an embedded device where each MB matters you would need to create a file system which is so light at the same time it has basic utilities and hence you need busybox 12:48
... nick!Marflow -> Marflow_afk 12:49
G__81 ok 12:49
G__81 now 12:49
... nick!Marflow_afk -> marflow_afk 12:49
G__81 let us configure busybox 12:49
G__81 type make menuconfig in the busybox dir 12:49
Padhu ok 12:50
G__81 you would get a window which is similar to the kernel configuration window 12:50
G__81 now in the window 12:51
G__81 you see lot of options to configure what you want 12:51
G__81 you see Archival utilities, Core Utils, Console Utils, Debian Utils and so on 12:51
Padhu yes. right now 12:51
G__81 you could select what you want 12:51
jcapel wow, that's cool :) 12:52
G__81 or you could just select save alternate configuration file option and save the config file as .config 12:52
... signoff!#fedora-classroom -> Malformation(Read error: 104 (Connection reset by peer)) 12:52
* G__81 waits 12:53
jcapel ok, I went for the defaults here :) 12:53
l0nwlf cat .config 12:53
openpercept saved to .config 12:53
G__81 ok fine 12:53
G__81 now 12:54
G__81 do make 12:54
... join!#fedora-classroom -> grndplane(n=grndplan@66-215-66-17.dhcp.wsco.ca.charter.com) 12:54
G__81 and let it compile 12:54
* G__81 waits 12:54
Padhu How can i use as alternate configuration file 12:55
openpercept Padhu, look at the bottom, there is an option 12:55
l0nwlf done 12:56
... join!#fedora-classroom -> rjones(n=rjones@ 12:56
... join!#fedora-classroom -> Malformation(n=Malforma@tiesda1.lnk.telstra.net) 12:57
openpercept alright compilation done 12:57
G__81 ok 12:57
G__81 now 12:57
G__81 give make install 12:57
Padhu I got it 12:58
G__81 one sec 12:58
l0nwlf done : 'You will probably need to make your busybox binary setuid root to ensure all configured applets will work properly.' 12:58
G__81 now 12:58
G__81 after you do make 12:58
G__81 get into _install 12:58
G__81 dir 12:58
jcapel will make install overwrite the existing system utilities on my system? 12:59
dash123 we need to get into _install before issuing "make install"?? 12:59
G__81 no :) 12:59
G__81 jcapel, it will not overwrite 12:59
jcapel ok :) 12:59
dash123 jcapel:sorry for interrupting 13:00
G__81 dash123, give make and make install and then get into _install directory 13:00
dash123 g__81: ok 13:00
G__81 and now after make install is done get into _install directory and there should be a directory by name sbin 13:00
G__81 and get into it and see for your self what busybox has done for you :) 13:00
* openpercept is already in _install and can see bin sbin linuxrc and usr 13:00
G__81 get into sbin 13:00
jcapel so much nice tools included in busybox, I must say I'm impressed :) 13:00
G__81 and type ls 13:01
jcapel s/much/many >< 13:01
jcapel my resulting binary is 842K though, that probably won't fit on the 320K rootfs :P 13:01
dash123 jcapel: the resulting binary of? 13:02
jcapel make'ing busybox 13:02
G__81 good question 13:03
G__81 now the reason is 13:03
G__81 we just didnt configure busybox at all :) 13:03
G__81 we just took the default settings 13:03
G__81 you could reduce it 13:03
G__81 how ? 13:03
G__81 let us see 13:03
jcapel well it's still nice that pretty much all you need fits in under 1MB :) 13:04
G__81 or rather i would take it a little later 13:05
G__81 on reducing the size further 13:05
G__81 i dont want to confuse too much :) 13:05
dash123 mine is 660Kb(busybox binary)? does it depend on system? 13:05
... join!#fedora-classroom -> Padhu_X(i=7561b4b2@gateway/web/ajax/mibbit.com/x-722ed8d27d7b84e2) 13:05
G__81 now let us populate the root file system that we created 13:06
G__81 log in as root in your machine and create a mount point 13:06
G__81 /mnt/rootfs 13:06
G__81 then mount your file system that we created using this 13:07
jcapel ok, I'll create a slightly bigger rootfs than 320KB then, this won't fit :) 13:07
G__81 you could for sure :) 13:07
G__81 i ll tell you the reason w 13:07
G__81 why we get it a little more is because we used glibc for compilation there is something called as uClibc and if we use that we can still reduce the size to half of what you got 13:08
G__81 we ll look into it separately 13:08
jcapel cool 13:08
... join!#fedora-classroom -> maploin(n=mapleoin@fedora/maploin) 13:08
jcapel ready, btw 13:09
G__81 you could probably create something for 3 MB to be on the safest side :) 13:09
jcapel got 8MB mounted on /mnt now 13:09
G__81 oh good 13:09
G__81 now lets populate the file system with busybox data 13:09
G__81 rsync a 13:09
G__81 busybox/_install/ /mnt/rootfs/ 13:09
G__81 chown R 13:09
G__81 root:root /mnt/rootfs/ 13:09
G__81 sorry again for some reason 13:10
@spevack G__81: about 10 minutes left, maybe 15. Next class starts at :30 w/ cwickert 13:10
G__81 the commands dont get pasted 13:10
G__81 "rsync -a 13:10
G__81 busybox/_install/ /mnt/rootfs/ 13:10
G__81 chown -R 13:10
G__81 root:root /mnt/rootfs/" 13:10
G__81 give this command 13:10
jcapel done 13:11
G__81 this will copy/sync the data from the busybox to the fs 13:11
G__81 now type sync to flush all the changes to the fs 13:11
l0nwlf mount: /mnt/rootfs is not a block device 13:11
jcapel l0nwlf: mount -o loop /root/rootfs.img /mnt/rootfs 13:11
l0nwlf oops ok 13:12
G__81 you have to mount it using loop 13:12
G__81 yes 13:12
G__81 now try using this file system for User Mode Linux 13:12
jcapel ok 13:13
G__81 we gave the Fedora file system as the parameter yesterday instead of that try giving this 13:13
G__81 also make sure you unmount it 13:13
G__81 before you start UML 13:13
G__81 because this file system would be mounted 13:13
jcapel Kernel panic - not syncing: No init found. Try passing init= option to kernel. 13:13
... signoff!#fedora-classroom -> Padhu_X("http://www.mibbit.com ajax IRC Client") 13:13
G__81 is it the User Mode Linux Kernel ? 13:14
jcapel yes 13:14
G__81 kernel version ? 13:14
jcapel ./linux ubd0=/root/fs.img mem=128M 13:14
jcapel 13:14
l0nwlf [l0nwlf@l0nwlf-Arena sbin]$ sudo mount -o loop -t ext3 /mnt/rootfs ../../rootfs.img gives : "/mnt/rootfs: Is a directory" 13:14
jcapel but it's right, it does not have init, I can try init=/bin/sh I guess 13:14
Padhu jcapel: i think --loop 13:15
linuxguru l0nwlf, man mount , /mnt/rootfs comes at last 13:15
jcapel ok and that doesn't work either :p 13:15
l0nwlf ok 13:15
G__81 jcapel, it works here :o 13:16
G__81 i am on 13:16
jcapel Failed to execute /bin/sh. Attempting defaults. -- using ldd, I see that it depends on ld-linux.so and a libc 13:16
jcapel my rootfs image doesn't have that 13:16
... join!#fedora-classroom -> kkolle(n=klaus@ 13:16
lwh if we weren't here yesterday is there a one-liner to boot using UML? 13:16
... join!#fedora-classroom -> ahmed-araby(n=ahmed@unaffiliated/ahmed-araby) 13:16
G__81 you get the shell now jcapel ? 13:16
jcapel no, I think I'm missing some libraries 13:16
... join!#fedora-classroom -> padhu_x(i=7561b4b2@gateway/web/ajax/mibbit.com/x-747f0c88c81780d1) 13:17
G__81 anyone getting it ? 13:17
G__81 after its booted 13:17
G__81 the following should be done 13:17
G__81 execute "mkdir /mnt/rootfs/dev" 13:18
G__81 execute "mknod /mnt/rootfs/dev/console c 5 1 13:18
G__81 mknod /" 13:18
G__81 execute "mknod /mnt/rootfs/dev/console c 5 1" 13:18
G__81 execute "mknod /mnt/rootfs/dev/null c 1 3" 13:18
jcapel I'll try building busybox as a static binary 13:18
G__81 hmmm... 13:18
G__81 but it should work 13:18
jcapel well it's linked against libc, and I don't have a libc in my rootfs 13:19
G__81 you dont need it 13:19
l0nwlf I can't mount even : 'mount: wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program, or other error' 13:19
l0nwlf 'ext3: No journal on filesystem on loop0' -> dmesg output 13:20
G__81 why loop0? 13:20
G__81 the following is the command to mount 13:20
jcapel but it's fine, I get the idea and will google later; don't let me stall you :) 13:20
G__81 mount o 13:21
G__81 loop rootfs.img /mnt/rootfs 13:21
G__81 there are hyphens missing :o 13:21
G__81 again 13:21
G__81 now mount /proc in the busybox file system 13:21
l0nwlf ohh i gave '-t ext3' .. now it's fine 13:21
G__81 mount -t proc none /proc 13:22
G__81 and /sys 13:22
G__81 as 13:22
G__81 mount -t sysfs none /sys 13:22
... join!#fedora-classroom -> sattam(n=sattam@unaffiliated/thtoh) 13:22
G__81 and one last step is 13:22
G__81 to create an /etc/inittab file 13:22
G__81 which is the first script which would get executed 13:23
G__81 let me fpaste it 13:23
... join!#fedora-classroom -> qwp0(n=qwp0@adsl-dyn217.78-98-136.t-com.sk) 13:23
G__81 http://fpaste.org/paste/8010 13:23
G__81 this should be the inittab script 13:23
G__81 and once this is done 13:23
G__81 you are all set to play with the busybox FS 13:23
G__81 the other things that could be done are many on top of it 13:24
G__81 you could configure IP addresses, add routes, do test ping etc.......... 13:24
G__81 i am not sure whether you all understood it :) 13:24
G__81 and not sure whether i ve conveyed what i wanted to 13:24
G__81 properly 13:24
G__81  :) 13:24
jcapel I understood :) doesn't work yet, but I'll figure that out later :) 13:25
dash123 g__81: you did say you'll create a wiki for us though:) 13:25
G__81 for busybox ? 13:25
ahmed-araby sattam:it seems that we came tooo late and missed alot 13:25
... join!#fedora-classroom -> Fzza3a(i=29dd1066@gateway/web/ajax/mibbit.com/x-6ecf413d8a8c2284) 13:25
G__81 ahmed-araby, i guess right time for the next session :D 13:26
jcapel G__81: thanks, again! 13:26
@spevack G__81: thanks for teaching this session! 13:26
G__81 yeah i shall create a wiki page too on this 13:26
padhu_x thank you tutor 13:26
@spevack we'll take a short break, and cwickert will begin the RPM Packaging session at :30 13:26
padhu_x you teach me more 13:26
G__81 for busybox i guess it should be useful 13:26
G__81 thanks spevack 13:26
grndplane Thanks 13:26
dash123 please pass on the link in ML or wherever 13:26
dash123 thanks g__81 13:26
openpercept thanks G__81 13:26
... leave!#fedora-classroom -> Fzza3a() 13:27
G__81 and thanks to everyone for attending this session 13:27

Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!