This is one of my favorite distribution for servers, when I don't have enough time for a fine tuned HW optimization (Gentoo) or when I don't have so much time to spend on the installation and configuration process (Arch) I usually adopt Debian. With Debian you can do some sort of “dumb/quick installation” (Debian is not dumb!), the installation process gives you a working machine in half an hour. That's what I'm definitively using it on production servers, rock-stable, optimized and well supported. ….but, I've tried to install it in an USB stick with space constraints, read-only root partition and some customizations, you can do it but someone else gives you a better result (read below). I've tried to apply Linux Live-CD scripts for my personal read-only installation, you can do it but I've had few issues, mostly on:
startup scripts optimization, I'd like to install packages and modify startup scripts later. If you'd like to have a “prebuilt-template” to apply to it you've to manually add everything later on
Debian is not aimed to a live USB/CD environment, it's made for something else (servers for example)
root partition is not compressed (knoppix style), you may do it externally. Disk space for a tipical installation doesn't fit under 100Mb. Now “minimal” Debian installation is not so minimal
You may do something on a typical installation and then reduce it later on but it's not an automated system and you need to reproduce each step manually every time you need to change something
Sadly this is one of my favorite choices but this is not the right kind of solution to my own problem
I've not against SuSe, it even has the best tool for building a tailored distro, everything on the web in the cloud, SuSe studio is an impressive tool but:
Like Debian their minimal installation is not so minimal, you cannot go under 200Mb
You may do customizations on it after the installation but what I'm trying to do is a read-only image
Cloud computing is fine for me but I prefer to have my own virtual machines in my own environment and waste my own disk as often as possible, what happens if I don't renew my account or if I don't log often in their website ? What happens if I'd like to work on my own machine and I don't have an Internet connection ?
I want to apply patches or modify init scripts for my installation, after package selection but before installation
I like it but as Debian I think it's not aimed to Live-CD/USB creation
if you're still reading this article...
Relax, I don't want to write a review about every possible Linux distribution available in our planet, I've really made these tests before choosing the right one (the one I'm most comfortable with in this particular situation). I'd just like to tell you a simple thing:
“every distribution was made for a specific task, you may do everything you want with it but there're easier approaches to your problem every time you need something different, an easy approach with a specialized distribution is always preferred if it doesn't compromise stability, speed and optimization“
I've really spent a lot of time to find out possible solutions with all these listed distros and I've finally decided to use a distro for their unique characteristics. My final choice for this particular problem is : SLAX. If you're still reading this article and you're still interested in my decision here are topics achieved with it:
I was using LiveCD Scripts (they're very popular) with LFS and Gentoo, I think this the best approach and the simple one
You don't need to deal with targeted/specialized packages (legacy distro packages: gentoo, ubuntu, fedora, ...) to build a live appliance, you've a live distro aimed built around live CD creation
you've a modular approach, this is tipical in a live cd environment, on slax there's just one required package: “The Core” (~50Mb), everything else is an option
You've AUFS (http://aufs.sourceforge.net) ready to use and it's already there
Every “module” (a package) is compressed and easily pluggable into your own personal system, you just need to copy it into the “modules” directory
You may create your own LiveCDs or LiveUSBs in just few minutes
Documentation is simple
You may add your own scripts or alter final file system structure just by adding files to the final root dir. This is the thing I love more, SLAX is using UnionFS approach to make live customizations. If you don't know UnionFS take a look at http://en.wikipedia.org/wiki/UnionFS, this is one of the biggest benefits when dealing with live distributions
It's based on Slackware, that's one of the reasons I've never cited it in the first part of the article. Slackware has a lot benefits for this kind of system but SLAX is really focused on my own system
A lot of cool different projects are using it for live cd tools (registry editors, demos, security, auditing, ...)
I was discussing in the forum section of this site about Live CD scripts a month ago with other folks, obviously Slackware addicted guys (:-) Matthew, Eric, … thanks :-) ) were more focused on it, I was already using it but I've always used it as the “Slackware little bro”. I've ran it few times (auditor, …) and used it for a while but I've always left it in a corner.
But after spending weeks with LiveCD scripts (http://www.linux-live.org/) and other distros (mostly LFS, Gentoo and Debian) I've decided to use them in their “original environment”: SLAX.
It was damn easy to use it, customize a current Slax installation, produce my own USB install, create and port new packages to it. In just half an hour (GCC installation time on Gentoo...) I've created my Slax build station and I was ready to create USB sticks. Everything available from the original Slax environment, easy customizations, minimal footprint (my first install: 80Mb!) and no external tools involved in my process creation. Just a file manager to handle/copy files and few minutes for everything ! That's what I need and this is definitively what I need to finish my appliance.
Where's the code ? Where's the solution ?
System requirements, hardware selection and distribution choice are mandatory sections (even the boring ones) for a project like that, in the next section I'll start with hands on descriptions and I'll start publishing some code involved in this particular project. I've decided to explain my specs with these chapters so I may start a discussion with you about the overall project, I could start my articles with sentences like: “I use Slax to do that” but maybe building a custom Linux distro it's not so appealing if you don't know the reasons and initial requirements
As usual feel free to add your comments or discuss about my choices.
Andrea (Ben) Benini
Choosing the hardware
Creating a live distro for target appliance
Create a custom distro: building the build machine
Create a custom distro: building the first target machine
Building a minimal image
I'm still following base directives for creating a custom live distro for a special appliance, you've certainly read my previous considerations related to hardware and initial planning requirements. For this particular home server I've decided to stay with a common x86 device, power consumption could be a big issue if compared to low power CPU boards (MIPS and ARM devices for example) but at least I've an huge choice and many different Linux distributions.
I've decided to use an Atom based motherboard with an Intel NM10 chipset, an Atom N450 CPU is big enough (even too big...) for my designed tasks but I've decided to install a tailored Linux distro instead of installing a full blown stock distro. If you've read my previous considerations and constraints I'd like to achieve these tasks:
No further modifications are needed on this appliance after initial installation
I've already decided basic services this appliance should provide to my home network
It's not a desktop, there's no mouse, keyboard, screen or whatever, it has to work on a LAN, no direct user interaction
It must run unmanaged or without an IT specialist around for a long period, I often spend a lot of time away from where this machine is, I don't have a skilled user and I don't even need it to run this device.
It's just a stupid appliance, no frills
To avoid HW failures I'd like to reduce breaking parts, no fans, no hard drives, no SDD. This board needs to be attached to a common (and cheaper and easily replaceable) ATX PSU. Again: no moving parts or fan around. I've few power supply units with low specs and low power consumptions, I've just used one of them
Hard drives may fail, to replace them easily I've decided to run everything without an hard drive, I've decided to use a cheap and common USB Key as primary root disk. To avoid troubles with cheap USB keys I've decided to use one of them and have at least a backup of it elsewhere, if I need to replace my “main USB root disk” I only need to throw away the bad one and use a new one
To avoid troubles with USB sticks and possible breakage in the long term I've decided that my root disk has to be read only, USB sticks are excellent devices when you only need to read them, you may corrupt them easily in the long term if you write data on it (it's still a flash..., it has limited write cycles)
It has to be a thin distro so I can use cheap USB sticks, I don't need a 4Gb USB stick just for running an OS with few basic services. In my case I've decided to stay under 128Mb, there are plenty of sticks around with 128/256/512Mb and they're so cheap...
I don't want to keep basic distro behavior and I obviously need some customizations on services, networking and some special personal needs
I want to build my personal toolchain to be able to reproduce the same image and do more customizations on it
If you've carefully read my specs and you tend to keep a small footprint on tailored machines like me you've probably understood why I haven't even considered to install mainstream distributions like Ubuntu/Fedora Core/Mint/... I'm not against them but these are for a common desktop user and full of unused utilities (even bloatware sometimes...) and not really optimized for my special task so I've started to consider other distros I already use, here are my thoughts:
LFS (Linux From Scratch)
This is definitively my first choice and the approach I prefer with my personal computers, it's not even a distro (it's just a series of books). THIS IS LINUX AND GNU, nothing more. You've the GNU operating system and a Linux kernel, this is the approach (not even a distro) for the definitive geek. You can do everything you want with it: you may customize scripts, dependencies, packages makefiles, your toolchain and build scripts as well. It takes a while (!!!) to compile everything but at the end you have your own Linux system with LSB compliance as well. This is what we all need to use all the time... but.... in this case this is not what I've used, that's why:
x86 support for LFS is excellent and the base book is really something to read at least once in a lifetime. I've my own build script (a set of bash scripts and makefiles) to automate the whole process, even with this magical script my installation procedure after some changes takes at least: 6-8 hours for building the base toolchain, 4-6 hours to build my basic system. When you test it or when you make some trials to adjust your internal requirements you may spend a week on it just to make some tests, that's definitively what I don't want to do
An LFS installation process gives you a full blown GNU OS with a Linux kernel, installation takes across 300-400 Mb (for a bare bone system) or more probably around 500-600 Mb (samba, httpd server, php, DLNA, torrent, …). You may tweak it with a busybox but it requires extra steps, even binary stripping is required but this is not so easy, you may even cut unnecessary man pages as well as other things (you already have manuals somewhere...). More extra steps, more time to realize the project
It's not aimed to be a read only system, you obviously have the Live CD and some scripts but if you tend to recreate your system frequently you need extra time (again), live cd scripts (www.linux-live.org) are impressive but LFS needs a lot of care
There's no automatic HW recognition (it's not so important BTW)
Your live image it's not compressed (like knoppix or stuff like that), you may do it because you've “the father of every Linux distro” but again: it requires a lot of extra time
UnionFS, and aufs may be attached to it to support some sort of changes in a read-only environment but it's a slow process if you need to implement them
This is my best choice and my first attempt but unfortunately I'll be able to build my own system in a month or maybe more and there are even things I don't even know how to realize. I really appreciate LFS books and it's still one of my favorite “distros” (even if it's not a distro !) but I cannot use it in this moment
I've started with Gentoo in 2000-2001 when it was a young distribution, I was looking for a distribution with these requirements:
It has to be really close to LFS approach, in the beginning I've started with it because it was something like “LFS with steroids”: an LFS install with an automated build script
I'd like to have a “super-build-and-do-everything-for-me” script to create a running installation without worrying about copying and pasting instructions from the book. I don't want to read the same paragraph 100 times to discover after few hours what kind of instruction I've missed before
I've been an happy BSD user and I really love it, one of the best things about BSD is their makefile approach. When you need a program you just need to enter in their package structure, locate your favorite program (just use “find” utility), and install it with make (make clean, make, make install). Even better: you want to upgrade your whole system to current stable BSD ? Just issue “make world” and your machine will upgrade itself and install everything needed (well, it's not so simple but this is the approach). I respect monthly scheduled released distro (6 month for SuSe, Ubuntu, Fedora, …) but I'd like to have “the latest one” just with a simple upgrade command.
Gentoo and Arch are rolling update distributions, there's no version vX.xx, there's “the distribution you're using” and “current distribution”, with a simple command you switch from “your old one” to “current”. I really love rolling updates distros
Even more: do you want to make your favorite customizations to every package because you want or don't want that particular feature (doc, man pages, Xorg, Lang, ...) ? Are you looking for a special patch or an optimization for your particular CPU ? Gentoo is the way to go. This is my first distribution and what I use more at work (my main desktop) and at home, it was obvious for me to test it and adapt it to my appliance. But even if I still prefer Gentoo I've discarded it, that's why:
If you need to create a system with a limited space (my USB stick) you need to drop portage directory structure and create a system without it. There's a way to do it (read excellent Gentoo docs) but it's not so easy if you want to make frequent changes to it or do minor upgrades
You need a “build machine” with a full Gentoo installation and a special portage structure for creating your target machine, cross compilation it's one of the Gentoo specialties but it's not aimed to machine creation
There are tools like Catalyst or tools/docs for creating “stage 4” steps but these are a little bit cryptic and sometimes aimed to create other Gentoo tipical installations, most of the times you've excellent results when you need to deal with a LiveCD but it takes a lot of time. I've used catalyst a while but it's not so easy to create a live image under 200Mb ! It requires lots more
There are Live-USB methods, something with AUFS or UnionFS but it requires a lot to reproduce them all and there's no root disk compression (like Knoppix for example). You obviously may do it but it's like LFS, it takes a lot of time to do it
If you upgrade your “build station” and “toolchain” frequently you always need to make few adjustments to the build system if you've modified startup scripts for your target machine
Sadly I've discarded it due to some problems: available time, overall image size, readonly unavailability and live cd/usb compression. It's still my favorite choice for a full blown desktop or server but this time I've used something else for my installation
I really like it because it has the same rolling update approach like Gentoo, there are no “major versions” there's just the version you're using and the current stable, current stable changes every hour (depending on project activities...). Even more: it's definitively binary based so you don't have to wait ages to get something compiled (emerge, emerge, emerge, …), you may loose 0,00001% optimizations from your particular HW but someone still lives without it. But my poor Arch knowledge drove me to nothing, I'm an happy Arch user, I use it for building tailored servers for example and it's nice but it seems it's not really oriented to LiveUSB/CD creation like others (read below). You may use Arch for Servers or Desktop installations but in my particular case I've chosen to use something else
continues on the next page...
Creating a live distro for target appliance
Choosing the hardware
So I've always been a huge fan of Arch Linux. For many years it has been my weapon of choice for pretty much anything from web servers to development environments. It's incredibly lightweight, fast, stable yet up-to-date, and highly customizable.
Sure it doesn't have all the bells and whistles of other distros, nor does it take the responsibility of configuring complex areas such as Sound support or Network hot-swapping; but I think this is quite healthy... I spent years swearing at Microsoft products because they feel they have to do everything for you (no matter how complex) and then things just didn't work. Ironically if they have left things lite and transparent and left the responsibility of getting it working to best suit my requirements to me, then I wouldn't have held them responsible when something wouldn't work.
Thankfully I am out of that world now, and am taking what I have learnt from it with me.
My biggest issue with Arch was that it would take an entire evening to get everything I need installed and configured the way I like it. So I eventually decided to invest some time into creating my own derivative.
This derivative included my own custom repository, so I can install my packages I have acquired from various places (or written myself) from a single command.
It also contains configuration changes to the core platform, so it behaves the way I want it to (and sports my own branding!)
Hunting around the Arch forums, looking for people who have done something similar, I stumbled upon a set of script files called archiso. Unfortunately I couldn't get archiso working straight away, as there was some problems with the Makefile included on the Arch wiki. I began to edit it, adding my own parts so it could do extra things like branding.
To be able to create a derivative, I first needed to brush up on how a Live CD works. The best way to do this is to break the boot sequence into logical chunks:
The Boot Loader
The boot loader is the first component to be loaded. Arch CDs use the ISO version of SYSLINUX (ISOLINUX) which lives in the /boot folder. It loads up and reads the config file /boot/syslinux/syslinux.cfg which gives it a list of boot configurations (eg. which partition, initrd, kernel, kernel boot options etc..) that can be loaded. Once one of these is chosen, the kernel is executed using the chosen options.
Initial Ram Disk
Also known as "early user space", the initial ram disk is an image which contains the kernel and a super lite root filesystem which is just enough to prepare the system for the real root system to be mounted. This involves running kernel hooks and hardware detection.
You can create an initrd by using mkinitcpio with a config file which contains a list of the kernel hooks that need to be run during this early boot stage.
One of the hooks for Arch's Live CDs reads a file on the root of the CD called isomounts. This is an fstab file for the CD. It mounts the root file system and the Init scripts gets run.
The init scripts begin with inittab. This is a file which determines which runlevel should be ran (these tend to be different for each distribution, but 3 generally means a multi-user environment with networking, which is the default for arch). 5 means the same, but with a desktop manager (eg. GNOME, KDE, OpenBox, FLuxbox, wmii, dwm etc..). inittab is also the script which is responsible for respawning the login manager if you kill Xorg.
Arch also has a load more init scripts for various purposes, you can read more about them here. rc.sysinit runs on boot; it does more hardware configuration, logs to dmesg, starts the daemons etc.. Followed by rc.multi and rc.local which contains any finish up code before the login is displayed.
So I now have a working Arch derivative with all these steps configured. You can check it out at: http://www.tommed.co.uk/ldr. Obviously, as Arch is GPL based, I have open sourced by build scripts and packages here. I hope it is of good use to people who want to do the same, or use as a learning tool!
I released LDR recently as an ISO image, but didn't quite realise the impact of doing so... I was added to Distrowatch and quickly started receiving thousands or hits per day, which quickly destroyed my little home web server! :(
I managed to get the ISO mirrored (BIG thanks to Neil Bright of Georgia Tech) which deferred the bandwidth load from my home server, which runs quite happily again now!
I didn't released LDR Linux planning on turning it into the next big distro, it was more about being able to quickly install Arch with all my custom trimmings in less than 1hr and also sharing my code and my work to inspire others, but from the feedback I have received, it's plain to see that others want LDR on their machines + they want it supported too!
I am happy to do this, but could use a bit of help from anyone in any capacity (even if it's just spell checking on the wiki, or general testing) any help or donations would be greatly appreciated!
Google Chrome, wmii, OSDBattery (run battery-status or Mod4+B), Adobe Flash, and PulseAudio all work out-of-the-box when testing in VirtualBox!
We are pleased to announce our openSUSE Weekly News #172
In this Issue:
You can download it there:
We hope you enjoy the reading :-)
If you want to help us collecting interesting articles for the openSUSE Weekly News, so you can all your stuff into our new ietherpad: http://os-news.ietherpad.com/2.
Found Bugs? Please place it in our Bugtracker: http://developer.berlios.de/bugs/?group_id=12095
Features, Ideas and Improvements can placed in our Featuretracker: http://developer.berlios.de/feature/?group_id=12095
Older content can be found there.
If you've followed my previous article (http://www.linux.com/component/content/article/130-distributions/430530) you know what I'm trying to do. This project aims to create an home server, requirements have already been described, I've few mods in my mind (X10 automation, SMS gateway and few more) but basically this is what I'm trying to do. As I've told you before I've already decided to use an Atom motherboard but there were other architectures involved in the decision process, here are few personal considerations with pros/cons:
SX (STM) and derived architectures.
Pros: really really cheap, really reduced power consumption
Cons: limited I/O, not enough I/O port available or “high level” devices linkable to them
Atmel ATMega architecture (and Arduino clones as well)
Pros: quite cheap, easy customization, reliable hw, good programming (related to my skills), close to the real world (digital I/O, analog I/O, measurements), RT OS available for “bigger” CPUs, really reduced power consumption
Cons: Nice objects for controlling limited appliances, even if they've a really good CPU processing power they're not suitable for a full blown home server with an USB controller. They've the capability to connect to USB drives/peripherals but they're too limited for some cool stuff or if I'd like to have a strong OS on it (read Linux)
Note: I'll probably use some custom created PCBs with Atmel devices on it for controlling little things like lights, sensors, LCD panels and so on
Pros: reduced power consumption, “high level” interfacing with buses and peripherals (if compared with atmega/sx/pic chips) like: micro-pci bus, usb. RT OS (real time operating systems) available as well as a compact Linux OS (generally with uclibc and busybox), also check OpenWRT. I can find these kind of CPUs into a lot of small hardware devices (Access Points, DSL Routers, few switches, …). You may find them at cheaper prices (20-30-40-50$) inside ready made appliances. Power consumption is limited
Cons: USB is available and you may connect external drives to it (if you find the proper device) but heavy disk operations may affect heavily this kind of CPU (if you don't have a DSP and a southbridge-like controller). Heavy CPU operations (P2P software) may be a problem for them. Realizing a custom made project with these devices may cost you a lot of bucks
Pros: Same benefits of MIPS devices and even something more: ARM CPUs performs really well, I cannot compare them to a Pentium class device but they've enough power for a lot of heavy disk operations. There's a lot of efforts around Linux ARM community and there are a lot patches and features for an autonomous device (uclibc+busybox+linux are a must). There're even some ARM distro with good performances. Ready made devices may be found into high class routers, switches, access points and so on; if you like them remember: OpenWRT (http://www.openwrt.org) could be your best friend. Power consumption is limited
Cons: It's not easy to find a ready made device with an USB controller and an affordable price; multiple USB connections may affect machine performances (without a DSP or a Southbridge), I need few USB devices connected to my machine (USB disks, webcams, an audio card, …) dealing all of them may be challenging. Heavy disk operations (file transfer or P2P for example) may affect your machine a little bit. ARM has enough CPU power to solve these problems but even if I can realize or buy a custom made motherboard it could be a problem: they may cost you a lot of money and it's not so easy to run under 100$. ARM chips are reliable, have a lot of CPU power, they don't absorb so much (more than MIPS btw) but they're not so cheap in the industrial market. You may find something in the consumer market but motherboard are limited (1eth, 1usb and few more)
Note: This is my second choice and unfortunately they're to expensive for me
Geode/Intel Atom/Via C3 devices
As I've already told you in my last article this is my current choice, that's why:
Pros: they're not so cheap (like an MPU: micro processor units like ATMega's, PIC Microchips or STM SX's) but Intel an Via (especially Intel) are cutting down prices a lot, in some cases they're even less expensive than MIPS or ARM based cards. I may find a CPU+Motherboard for 50-70$ and use it as a common PC (with limited CPU power if compared to a Pentium Class device). You generally have a complete micro motherboard around it, pains like adding external devices are solved, you've: audio sound card, a bunch of USB ports (4-8), ethernet (wireless or wired), RS232, Parallel port, … You've a southbridge on the motherboard, no more troubles with heavy USB I/O operations (for a really small server, not suitable for a medium sized corp.). If you want an efficient system you may create an optimized OS, use a common Linux distro (if you don't have skills or time) or install a full blown MS Windows (if you want to leave dangerously). Passive cooling is available on low end systems
Cons: CPU intensive tasks and I/O may affect your power absorption a lot (even 40W or more) but if you tune it a little while and if you turn off what you don't use you may save a lot (I'm now using 15W in idle, 20-25W when streaming some video), this is my first problem with these devices: I'd like to absorb like an ARM card but have this class of CPU. I've found a lot of dual cores atom but they've too much CPU power for my needs and absorb a lot, in this case a CPU fan is required, I'd better stay with a low end system with passive cooling (just a radiator)
“Pentium Class” devices (Pentium/P. Mobile/Core 1,2,3,4,.../Core i3,5,7,1000)
Pros: They're marvelous devices, huge cpu power, you can do everything you want with them.... but I don't care... I just need a bare bone machine and nothing more. Expansion boards available: pci, usb, eth, lots of ports everywhere
Cons: Active cooling is needed (at least 1 CPU fan). They absorb an huge amount of power, too much for a 24/7 machine (at least until I'll pay my electricity bill), even underpowered you cannot cut a lot of watts from them (desktop or laptop machine doesn't care). Their cost is adequate to their CPU processing but decisively too classy if you compare them with an Atom board. You've a cheap hardware with moving parts (CPU fan: 10$), if you break it you lost your entire system, you cannot leave it unattended for a long period.
Grandmas computer or something cheap from your roof
Pros: It's cheap because you already have it (but please read the cons as well), you've a ready made machine for an unbeatable price (free)
Cons: Is it reliable ? How many years does it have ? What about spare parts ? Again, if this device is a pentium class object you may need to read Cons section for pentium based devices. If you look at your electricity bill you may pay a brand new atom board with the same amount of money spent on extra Watts with these platforms
Consoles, consumer products (TiVo, …), DVD players
Pros: you may find something good in this category but please consider these two constraints: power absorption and price, you have to stay under 50W and 100$. If you find something good please let me know, I'm interested in it as well.... :-)
Cons: You may spend time on hacking it but how much does it cost a new fully loaded Atom device if you compare to it ? But again: if you've a 50W machine (or below) and a 100$ price please let me know
So after this considerations you may know why I'm now using Atom devices, I've used hacked MIPS/ARM machines (before this replacement) but I've switched from them due to CPU requirements, if you've a viable solution like an Atom device and an ARM power absorption I'm really interested in it
You've read about my basic requirements, we've just passed the HW selection, now it's time to take a look at the software selection: small intro, a lot of testing, distro selection and customization will follow in the next article
Creating a custom live distro for a target appliance
Create a custom distro, choice of the right base
Create a custom distro: building the build machine
Create your first target image
Building a minimal image
After a long period of absence from the site I'm back with a lot of work done on custom embedded appliances and Linux custom live CD creation. This is the first article of an hopefully good series of topics related to custom CD/USB creation, but before entering into too much details on it I'd like to answer a common question about this: “why do you go there ?”
Here is the short version:
I'd like to have a minimal system without too much software dependencies
It has to be really small and run on tailored devices with memory and CPU constraints
It's not a desktop system, software and general requirements don't change, no additional software installation is needed after initial startup
Startup configuration and installation has to be quick (no user interaction)
I'm a geek and I tend to revert/control everything I've around me
Because it's fun and it's nice to learn something
Here's the long version:
I'd like to learn more from a live CD/USB creation
I'd like to have a small footprint installation
this appliance has to run without external user interaction, no administration needed or available for it; it has to be reliable and survive to: power losses, HD malfunction, general HW failures, bad usage or tough environment temperatures, holy bible plagues, …
the appliance has to be replaceable quickly, something like a swap with an identical device. Linux OS “boot media” has to be exchangeable and easily upgradeable by a common user without IT skills
It has to run completely on RAM (ram disk and configuration), if something goes wrong I'd like to “fix” my problems with just a reboot (restore factory defaults)
No video/console available, this device has: a power cable, an ethernet cable
low spec CPU power needed, I just need to run few apps on it (Samba and few more), I don't need 1000 cores for basic things
Because it's fun and it's nice to learn something
So you're may wondering about what kind of task I'd like to achieve, it's pretty simple: an home server NAS with just few custom constraints, here are:
Has to run from RAM (disk+memory) as previously reported, I don't want to configure or modify my needs too quickly (after first installation)
It has to be cheap, at least until I don't get enough money for a custom made ARM device, for the entire project I've spent 80$ / 60€
I pay my electricity bill so it has to adsorb less watts as possible (a pentium class device is not my choice for a 24/7 machine)
It has to have enough CPU power to sustain few CPU intensive jobs (asterisk, P2P programs, online UPnP video/audio decoding and streaming, samba), I've used MIPS/ARM devices for this particular task but even if they're more appealing when you talk about power usage you've few troubles with CPU intensive tasks (UPnP, video/audio streaming or torrent for example)
I need USB ports
Hardware may fail, heat and dust are big problems, I'd like to have a machine without moving parts, I don't want to use an HD for the Linux installation, I don't want to have a fan over the CPU or the power supply, I'd like to rely on removable media so if there's something wrong I may move my installation to a similar machine
Linux root system resides in an USB stick, it has to be read only and load the system on boot. USB sticks have an “infinite life” (a sort of) if you use them as read only devices, they're even cheap and easily replaceable for an average user without IT skills
If you've an HW failure you may recover everything with just these swap parts: a standard ATX power supply, a similar mobo+cpu, a cheap usb stick
Linux installation in just 100Mb or maybe something more, I've a lot of 128Mb usb sticks to waste so I've cut my distro to stay around 100Mb
I'd like to attach an external USB drive with my own media (photo, films, music, …), this media is just read from “home clients” (read: media stations connected to TVs), sometimes someone (me) uploads contents on it or does entire backups of it
It has to be expandable easily: adding a web cam, a sound card, an Internet audio/video streaming with icecast should be possible without too much troubles
It has to be close to x86 architecture to be cheap, believe me: I'm an embedded specialist and I'd like to stay with ARM/MIPS devices when they're available, I like to deal with toolchains and cross compile installations but my device has to be really cheap, it's hard to beat the price I've mentioned
I don't wanna waste too much time on it, it has to be ready as soon as possible
It's not just a NAS, it's an “home server”, I've web apps, Internet audio/video streams, files, UPnP (and more...) on it, I've used a lot of NAS-like distro but I'd like to have something more
For this particular project I've chosen to use an ATOM CPU: single board, single core, desktop, no particular peripherals (I only need the USB bus and the ethernet card), no frills and damn cheap. There are plenty of them available everywhere, I've just chosen the cheaper one with USB ports and 1 Ethernet, overall cost: 80$ (you may find something cheaper across 50-60$)
The Plan (Plan 9 from outer space)
This is just an intro for a series of articles describing my own initial project, now I've expanded it to something else but at least I'd like to describe why I'm doing this and what kind of results I'd like to have, when I've started it I've wasted a lot of time on research (hw/sw) but now I've a more clear path to my own personal appliances. Here's what I've did:
- Building a minimal image
Trying to use a RAM disk
Run the entire distro from a RAM disk (so read only media)
Trim it to minimal memory (user memory) consumption, XOrg is not needed
Packaged and automated it (some scripting)
Build the installation media (my USB stick)
Follow all these chapters to read the entire post
I'd like to interact with you and have your opinions as well, feel free to collaborate and discuss my own opinions, especially if they're different from mine
We are pleased to announce our openSUSE Weekly News #168.
In this Issue:
- openSUSE 11.4 still going strong
Linux Foundation 20th Anniversary of Linux Campaign and Video Contest
Adrian Schröter: Policy proposal for Factory: Make source of tar balls trackable
Frédéric Crozat: GNOME 3 live image release 0.2.0 is out
- and many more ...
You can download it there:
We hope you enjoy the reading :-)
Older content can be found there.
We are pleased to announce our new Issue 167 of openSUSE Weekly News.
- Mingle today is an interesting Article about connect.opensuse.org
- SUSE Studio: Upgrade your older appliances to 11.4
- Virtual Releaseparty
- Lord of the Rings Online with wine
- and many more ...
Available under: http://en.opensuse.org/Archive:Weekly_news_other_sources#Issue_167
No we hope you enjoy the reading :-)
Comments, News and Wishes can send to
We are pleased to announce our new Issue 166 of openSUSE Weekly News.
No we hope you enjoy the reading :-)
Comments, News and Wishes can send to
To add new library path, create new file in /etc/ld.so.conf.d folder and open it in your favorite editor
$ sudo gedit /etc/ld.so.conf.d/newlib.conf
Add the path to file and save it
Run 'ldconfig' to update the necessary links and cache
$ sudo ldconfig
If this error/warning appears, means the terminal is dumb. It can be verified by executing following command at terminal:
$ echo $TERM
update the following packages from 1:0.26.0-ubuntu1 to 1:0.26.0-ubuntu2, and restart application:
I found this solution at http://guake.org/ticket/249 and it solves my problem related to Guake.
In ubuntu make sure you have selected Important security and Recommended updates at
System > Administration > Synaptic Package Manager > Settings > Repositories > Updates
Otherwise latest packages will not be available for installing and update.