From owner-freebsd-current@FreeBSD.ORG Tue Jul 20 16:07:38 2004 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id AE2F716A4CE for ; Tue, 20 Jul 2004 16:07:38 +0000 (GMT) Received: from parati.mdbrasil.com.br (parati.mdbrasil.com.br [200.210.70.4]) by mx1.FreeBSD.org (Postfix) with SMTP id 5DB0143D54 for ; Tue, 20 Jul 2004 16:07:37 +0000 (GMT) (envelope-from jmelo-lists@freebsdbrasil.com.br) Received: (qmail 74343 invoked by uid 0); 20 Jul 2004 15:40:03 -0000 Received: from jmelo-lists@freebsdbrasil.com.br by parati.mdbrasil.com.br by uid 82 with qmail-scanner-1.20rc1 (uvscan: v4.1.60/v4288. Clear:RC:1:. Processed in 3.845519 secs); 20 Jul 2004 15:40:03 -0000 Received: from unknown (HELO ?192.168.1.2?) (200.167.244.39) by parati.mdbrasil.com.br with SMTP; 20 Jul 2004 12:39:59 -0300 From: Jean Milanez Melo To: current@freebsd.org Content-Type: multipart/mixed; boundary="=-Vc74wGK27wp5eDYMr4KI" Organization: FreeBSD Brasil LTDA Message-Id: <1090338524.783.3.camel@offset.freebsdbrasil.com.br> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.4.6 Date: Tue, 20 Jul 2004 12:48:44 -0300 Subject: FreeBSD embedded: TinyBSD X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: jmelo-lists@freebsdbrasil.com.br List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Jul 2004 16:07:38 -0000 --=-Vc74wGK27wp5eDYMr4KI Content-Type: text/plain Content-Transfer-Encoding: 7bit Hello current, Please allow me to introduce myself, I'm one of the coordinators of the Brazilian FreeBSD Users group, coordinator of the official FreeBSD documentation's translation group and have been working with embedded FreeBSD systems since year 2000. I've been studying NanoBSD ever since Poul-Henning posted about it on one of the mailling lists, and I have been following this project closely. It really is a great project. However, I think it sometimes creates unnecessary partitions, takes too long to build the system due to make world and it copies lots of unneeded binaries, taking a lot of precious space. So me and Patrick Tracanelli (another active member of the Brazilian FreeBSD community) decided to write a new set of scripts to build embedded systems. We've named it TinyBSD, and its goal is to be faster at building-time, occupy less space on the target device and to ease customization like PicoBSD does. Untar/gzip the tinybsd.tgz file under /usr/src/release. # ls TINYBSD TODO tinybsd.basefiles tinybsd.sh We first take the file TINYBSD, which like in PicoBSD we can use to define or remove all kernel options to the new system. Then we have tinybsd.basefiles, where we define all binaries necessary to get the system running and anyone can edit it as they will. Finally we have the script itself, tinybsd.sh. It's a simple script, yet functional. We based it on NanoBSD's and its idea is to create a temporary work directory where the new system's directory tree will be created. Then it'll copy all files listed on tinybsd.basefiles to this tree. This copying process is essential to the speed of the building process, as we eliminate the recompiling phase. The reason for this is FreeBSD 5.1' dynamically-linked base system, which take much less space than the old statically-linked ones. This way we can also do the copying without affecting the production system in any way. After all this, we compile the kernel using the TINYBSD file and then we install the necessary libs using the dependencies' output from the binaries. We populate the /etc directory on the temp work directory and put in a few important default settings in /etc/rc.conf, like: hostname="tinybsd.freebsd.org" sendmail_enable="NONE" sshd_enable="YES" usbd_enable="NO" inetd_enable="NO" portmap_enable="NO" update_motd="NO" varsize="8192" diskless_mount="/etc/rc.d/diskless" Lastly, we create the empty image according to the specifications for the device passed in as a parameter and copy the entire temp directory to the new image. After that, the user can use dd to write the final image to the target device. Booting the system works as embedded systems do, mounting /var and /tmp as MFS filesystems. The most interesting point is the space used by default, only 19MB. As you can see, it's pretty simple. But since PicoBSD is practically unusable with the 5.x series, TinyBSD could be an interesting alternative along with NanoBSD to be put on the base system in future versions. Patrick and I have been thinking of enhancing the script and adding end-user helping tools such dialog-based menus and the likes, for more details see our TODO file. In case the FreeBSD project has any interest in our project, we can perfectly maintain TinyBSD as an embedded option for FreeBSD users. We would like that the interested parties make tests and then report bug, sends sugestions to improve the TinyBSD. Thank you for your attention Jean Milanez Melo --=-Vc74wGK27wp5eDYMr4KI Content-Type: APPLICATION/OCTET-STREAM; NAME="tinybsd.tgz" Content-ID: <20040720122920.H1332@offset.freebsdbrasil.com.br> Content-Description: Content-Disposition: ATTACHMENT; FILENAME="tinybsd.tgz" Content-Transfer-Encoding: base64 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 JZRQQgkllFBCCSWUUEIJJfx3w98B53/vTwB4AAA= --=-Vc74wGK27wp5eDYMr4KI--