On 13/04/10 5:33 PM, Neil Williams wrote: > On Tue, 13 Apr 2010 09:13:19 +1000 > Brendan Simon <bren...@brendansimon.com> wrote: > > >> The main issue I can see is _if_ the system installs binary executables >> that must be run on the target during configuration. >> Architecture independent scripts (sh, python, perl, etc) should be able >> to run on the host. >> > That gets recursive very, very quickly. I don't know of any maintainer > scripts that are truly architecture-neutral because even a shell script > ends up calling binary executables to do the work. How much can you > realistically do in a POSIX shell without calling 'cp', 'ls', 'grep', > 'echo', 'mv' or 'ldconfig'? What about the shell interpreter itself? > That's compiled. > Most of these are generic tools just compiled for a particular architecture. Can't the host tools be used to perform these activities (ehco, mv, cp, etc).
> Emdebian certainly doesn't want to encourage maintainer scripts using > perl or python because Crush won't support either interpreter. Even if > you allow perl or python, how much can the interpreter really do > without forking some compiled executables or the interpreter itself > calling internal compiled code? Why do python2.6 and perl both have > buildd logs - because each interpreter contains lots of compiled > executables. > Sure. Avoiding perl, python, etc is probably a good idea, especially for very thin systems. But some embedded systems are quite fat (have lots of memory and storage -- e.g. routers, firewalls, etc), and are quite suitable for grip packages. > The other solution is a prefix - replace the interpreter location with > one outside the foreign environment. The problem then is just when and > how do you decide which queries and instructions need to get > information from which environment? Could easily end up configuring the > foreign system to work like the desktop that created it instead of the > embedded device it needs to be at boot. > Does this mean using the host system tools and/or the host system "environment" ?? > No maintainer scripts can be safely allowed to run until after first > boot - it doesn't matter how they are written. > Why not ?? Couldn't the 'first boot' be mocked on the host system somehow ?? I'm _not_ talking about processor/system emulation (e.g. qemu). >> I would like someway to configure these on the host and have them set on >> the target, preferably with the packages believing they are already >> configured, or as an alternative, configuring using a known set of >> values (pre-seed ??) >> > Yes, pre-seeding is the answer. Create the configuration outside - > using a native chroot that can be automatically configured as close as > possible to the desired config and then tweaked to resolve corner cases > - and then just dump that config onto the foreign filesystem. > Phew. Does this also solve the 'first boot' issue above ?? >> * to build a linux embedded system based on Debian packages (and/or >> sources). >> * generate a root filesystem (or number of filesystems) that are >> fully pre-configured -- or partially configured on host with >> configuration being completed automatically (non-human >> interaction) on the target at end of installation process or on >> subsequent boot. >> * install filesystem on the target system (could be a done in a >> variety of ways. e.g. unused partition). >> * boot from installed filesystem. >> > So if you're not wanting dpkg or apt on the final system, can you give > me some idea of the packages you do want? Presumably busybox. > No, not necessarily busybox, but that is a valid option. For a networking device, things like a shell interpreter, an snmp agent, an ssh server, a web server, etc. e.g. A 'fat' networking device may have: libc6, bash, coreutils, net-snmp, openssh-server, openssl, apache. e.g. A 'thin' networking device may have: uclibc, busybox, net-snmp, dropbear, appweb. > The approach with the Crush experiments is to allow this kind of config > by providing dumb replacements for the executables/scripts called BY > maintainer scripts. i.e. adduser, dpkg-divert, update-alternatives, > install-info - these are simple no-op shell code that accepts any and > all arguments, never returns anything other than zero and never outputs > or modifies anything. What these scripts would have achieved is then > left to the developer to engineer - *without* the packages getting in > the way or undoing your config later. > > This way, we don't mind if maintainers use Debian-specific tools to do > the real work within maintainer scripts because we can replace the > tools with no-ops and our own changes are untouched. What we don't want > is more maintainers using perl or python maintainer scripts that do all > the work themselves. Not only is that duplication of effort in Debian > but it also complicates pre-seeded configurations. > > See my other email. > > >>> My current approach is to basically follow Debian, but try to interpret >>> the maintainer scripts on the host system and translate them as >>> required. >>> > I think the better way is to insulate your system from the effects of > running the scripts. > > >