[Toybox] FreeBSD porting, removing bashisms

Rob Landley rob at landley.net
Thu Apr 21 18:22:08 PDT 2016


On 03/31/2016 11:57 AM, Ed Maste wrote:
> On 31 March 2016 at 03:07, Zack Breckenridge <zbrdge at gmail.com> wrote:
>>> How do I set up a freebsd test build environment, preferably under a VM?
>>
>> The FreeBSD project now distributes VM images for installation/testing. For
>> example you can find some development branch snapshots here (for stable
>> branches just go up a few levels and find 10.x):
>>
>> http://ftp.freebsd.org/pub/FreeBSD/snapshots/VM-IMAGES/11.0-CURRENT/amd64/20160308/
>>
>> Notice there's a qcow2 image there for easy testing with KVM. You might even
>> be able to run a live environment and use pkgng ("pkg" command) to grab
>> gcc/clang etc. and then use "fetch" to pull down toybox.
> 
> The brief instructions I put together for developers of another
> project to test on FreeBSD, on one of the snapshot VMs:
> 
> 1. Log in as root on the console
> 2. Run "ifconfig -l" to list network interfaces The virtual nic will
> likely be em0 or vtnet0 depending on the VM software.
> 3. Add to /etc/rc.conf (assuming vtnet0 interface here):
> 
> ifconfig_vtnet0="DHCP"
> sshd_enable="YES"

Editing this file did not cause the interface to magically configure
itself, but "dhclient em0" worked.

> 4. Run pkg and answer Y to install the package management tool

Hmmm, phone tether's on a data budget and I dunno how much that'll
download, so "shutdown -h now" for now...

Yay, "lock order reversal" right after "All buffers synced." in
vfs_mount.c;1222 and vfs_subr.c:2498, stack trace: witness_debugger,
witness_checkorder, __lockmgr_args, vop_stdlock, VOP_LOCK1_APV,
_vn_lock, vget, devfs_allocv, devfs_root, dounmount, vfs_unmountall,
bufshutdown, kern_reboot, sys_reboot.

> 5. Run pkg install git gcc gmake

You mentioned I could skip gcc, so I just did "pkg install git gmake".
It's downloading perl, python, curl, cvsps, expat, libffi, cvsps,
readline, gettext-runtime... This is _sad_.

> 6. Run adduser to create a user account
> 7. Run shutdown -r now to reboot
> 8. ssh to the VM as your user account

I just logged out and logged back in as my new user, git cloned toybox,
ran gmake allnoconfig, and it died with scripts/genconfig.sh command not
found, which i'm guessing means no bash. There's no sudo, but "su -"
works, to switch to root and install bash...

Bash requires fdescfs mounted on /dev/fd. What? Ok...? Mounting,
adjusting fstab...

There's still no /bin/bash? It's in /usr/local/bin. Sigh. Ok, as root
"ln -s /usr/local/bin/bash /bin/bash"

Hey, gmake allnoconfig finished! Woo! Trying the actual build... Died
telling me to PLEASE submit a bug report to freebsd.org. Well that's
nice. Lemme see if whatever shell this is understands the 2>&1 | tee
syntax to capture the log...

Ah, your sed is horked. Right, lemme see what I can do about that...

Possibly I can take it from here?

> I included gcc in the pkg command above but you can leave it out and
> just use the Clang in the base system. The brief experimentation I've
> done with toybox is on FreeBSD 10, with Clang 3.4.1. If you use a
> FreeBSD 11 snapshot from the link above you'll have Clang 3.8.

People are building it with clang so I know it basically works, and my
own clang test environment would be nice.

Thanks,

Rob


More information about the Toybox mailing list