While reading presentations from Free Electrons (thanks a lot !), I quickly understood I had to move to Linux.
It's not a real problem since it's something I wanted to try for a long time.
Fortunately for me, I messed a lot with MS-DOS before and 'played' with
a CentOS server, so CLI is not a nightmare for me (I even like it).
If you search for "download install linux" on Google, you'll find a lot of different answers
Slackware, Debian, Ubuntu, Lubutuntu and all of these Linux name are in fact name of Linux Distrib.
They all use the main Linux source code (with some adjustement) and add they own features.
Let be honest, it's a real mess ! The openess of Linux make it "easily" hackable by anyone who know how to untar and read man
It's why DistroWatch is a very handy website.
I so took the time to download and test a lot of LiveCD, a way to launch Linux with install it on your hardware.
For ex, I really liked Slitaz but I had to drop it because I doubt you'll find Slitaz on an embedded system.
In fact, I finally selected Debian, a raw (ie not based on another one) distro available with or w/o GUI
Since a lot of others distro are based on this one, I get the possibility to move it on any sub distro feeling at home
Enlightenment is another one to check...because it keeps small devices in mind (like the famous Freebox in France !)
Update : While Tiny Core Linux is a perfect lightweight distro, it's not the best choice for a first distro.
Start with a basic one before using a customized version of Linux.
I don't want, for now, install Linux on a dedicated machine since I'm not a Linux pro.
To use a virtualization solution has several benefits :
I'm used to VMWare so I simply look for a VMWare appliance on Google, avoiding the hassle to install Linux.
I downloaded mine from ThoughtPolice,
their appliance are generally well done and come with a little how-to.
Since I need to be able to work with CLI (embedded system rarely comes with GUI for OS), I selected the "minimal" version
The only drawback was the age of the appliance : it was not the last Debian release.
So after some times, I made my own virtual image !
This time, I used VirtualBox, since it's free, with the minimalist LiveCD of Debian (standard), available on the liveCD repo.
I was easy : create a new virtual image (VBox knows Debian), define the RAM to use, select if you need a hard drive or not (not needed for pure LiveCD) and load the ISO on the storage setup.
I so used the appliance to "feel" Linux for some weeks, based on some "10 commands you should know on Linux" or "configure your network on Linux : the easy guide" posts.
I won't explain them here, there are some many sites which already list them perfectly.
File System
The first thing to learn before you move to Linux is its file system
hierarchy .
Unfortunately, not every distro follow these architecture but, for the most of them, you won't be totally lost.
In addition, this chart is a good one to print and pin on the wall in front of your desktop for reference.
I'm still trying to figure WHAT should be installed on the opt
folder but it's a good start
Security
When I first used a Linux PC some years ago, I was totally lost because I didn't understand the security.
root / user / admin / group were nothing for me.
I usually log in as root every time because I want to be able to do everything I want but...is it REALLY the right thing to do ?
sudo
for any system related commandsudo
(even if it's possible to allow everything a root can do)sudo
usesudo visudo
to edit the rights of sudoers (users able to use the sudo command)
Let be honest, while Linux detects and initialize a lot of things for you (wired network works like a charm at first boot for ex), you ALWAYS need to adjust some settings for your needs and network environment.
You could configure anything you want, but first, you need to know how !
And it's the first bad point of Linux : not a single thing is configured the same way !
Nothing like a setup folder or a file extension to use only for configuration...
It's the counter effect of an open system : you're free to do anything you want...so software developers made anything they want !
Keymap
After a awful experience trying to tape sudo apt-get update
, I need to setup the keyboard mapping.
I use azerty fr-latin keyboards and I don't want to lose 2 minutes every times I need to press a "/" or a "|" ... which you need everytimes on Linux !
The Linux way to change the keyboard mapping is
loadkeys fr
Good try...but you first need the mapping for your keyboard to be in /usr/share/keymaps/i386/<subdir> (it depends of your release, it may or may not be available)
Let's try to download it !
ToughtPolice's quick-how-to gives the command to change your keyboard.
Unfortunately, I quickly jumped in the Linux mess :
First, it's just awesome how every distro uses its own way to charge a keyboard mapping (look at the others ways on the other "how to")
Second, the Debin way, using dpkg-reconfigure
gave me an error not found....and let me feel lost in a desert !
After some hours (hence the use of virtualization !), I finally found my answer :
If you get the error that console-data is not installed, issue this command: sudo apt-get install console-common
So I have an azerty keyboard ! Cool !
Well...not really, console-common
adds EVERY known keyboard mapping (atari, mac..!)
Do I really need to use 4 Mb for a French keyboard ?! It's not a solution for embedded device.
So I need to install it, save the fr.kmap.gz
on a shared folder, revert back my VMWare image and install back the file (a light version of apt-get console-common made manually)
For a shared folder, I have 2 solutions :
1/ install VMWare tools to support local shared folder
2/ configure my network to use a shared folder anywhere in my LAN
Since I don't want to lose +40Mb for VMWare tools and I'll need to learn to quickly setup a local network, save a snapshot on my now heavy DebianFr and let's go for the network shared folder....
Network
//TODO : SMB Share
Proxy
For one of my tests, I was under a proxy.
It's quite easy to configure the proxy on Debian...if you know how to do it !
Since I was on a LiveCD, no need to configure it the hard way, just for
the session
You have to define the env var http_proxy this way : export http_proxy="http://username:password@proxyadress_or_ip:port"
Hint: it doesn't like special char on username/password so use %<ascii_code> for any special char
This is a user env solution : env vars defined here are env vars using default user.
If you ever use sudo
, only some defined vars will passed from user to root environment.
To fix this, we'll need to add the http_proxy var to this common vars list:
launch sudo visudo
and add
Defaults env_keep += "http_proxy https_proxy ftp_proxy no_proxy"
Be sure to use a tab after Defaults
visudo
is an editor based on Vi, the best or worsteditor existing, so be sure to know how to use it !
Boot is a key feature on embedded device.
You'll quickly need to initialize a (hardware) device or a service within the boot process, not manually.
I learnt, thanks to linux openness again, there is several ways to do it
I personnaly find that using the rcX.d/Sxx file to be the best and more logic way to do it
The only difficulty is to know which rcX.d/Sxx file to update and in which rcX.d folder !
I was totally lost at first. Reason was you first need to be aware of the "run levels".
Is it normal you need to know with kind of infoto automatically launch an application after the boot successfully end ?
From my point of view, no. It's one of the (lot of) reasons why mister everyone won't move to Linux
So yes, you first need to understand what happen and what is launched on boot (or reboot or halt).
Hopefully, everyone is explained (good luck!) on the official Linux Intro documentation