Difference between pages "Awk by Example, Part 3" and "Installation (Tutorial)"

From Funtoo
(Difference between pages)
Jump to: navigation, search
m (spam removal)
 
(typo)
 
Line 1: Line 1:
{{WikiArticle}}
+
{{fancynote|If you want to do a standard Funtoo Linux installation, I recommend you use the shorter, official [[Funtoo Linux Installation]] Instructions instead. -Daniel}}
  
== String functions and ... checkbooks? ==
+
__TOC__
  
=== Formatting output ===
+
== Introduction ==
While awk's print statement does do the job most of the time, sometimes more is needed. For those times, awk offers two good old friends called printf() and sprintf(). Yes, these functions, like so many other awk parts, are identical to their C counterparts. printf() will print a formatted string to stdout, while sprintf() returns a formatted string that can be assigned to a variable. If you're not familiar with printf() and sprintf(), an introductory C text will quickly get you up to speed on these two essential printing functions. You can view the printf() man page by typing "man 3 printf" on your Linux system.
+
 
 +
This HowTo aims to give the experienced GNU/Linux User a quick way to install Funtoo Linux in a nice and fast way. Also we will give you all the necessary steps for installing Funtoo GNU/Linux in this guide, but we won't go deeper into the details of them as need
 +
 
 +
There are two ways of installing Funtoo GNU/Linux on your PC:
 +
 
 +
# using an already installed GNU/Linux System or
 +
# using a LiveCD
 +
 
 +
If you plan to use a LiveCD, we recommend you to use [http://www.sysresccd.org/ SystemRescueCd].
 +
 
 +
All the commands in this guide are performed as "root", unless we indicate it otherwise.
 +
 
 +
This HowTo will cover the following four setups:
 +
 
 +
# a standard Installation (MBR, HDD not encrypted),
 +
# a standard secure Installation (MBR, HDD encrypted),
 +
# a modern Installation (GPT/GUID partition table, HDD not encrypted) and
 +
# a modern secure Installation (GPT/GUID partition table, HDD encrypted).
 +
 
 +
These four approaches have the following Pros and Cons:
 +
 
 +
 
 +
{| border="1" cellpadding="4"
 +
|-
 +
! Setup !! Pro !! Contra
 +
|-
 +
| 1
 +
|
 +
* Easy method mostly used by all distributions
 +
* Well documented everywhere
 +
* Time saving method
 +
* No special EFI-partition needed
 +
* Dualbootable with Microsoft® Windows™
 +
|
 +
*Partition table limited 4 primary ones only
 +
* Needs special 4th partition for more than 4 partitions
 +
* HDD not encrypted, can easily be cloned
 +
|-
 +
| 2
 +
|
 +
* Easy method mostly used by all distributions
 +
* Well documented everywhere
 +
* No special EFI-partition needed
 +
* HDD encrypted
 +
* Dualbootable with Microsoft® Windows™
 +
* Logical volume groups for GNU/Linux
 +
|
 +
*Partition table limited 4 primary ones only
 +
* Need special 4th partition for more than 4 partitions
 +
* Needs lot of time for preparing the HDD to be encrypted
 +
|-
 +
| 3
 +
|
 +
* Easy method but nearly not used by other distributions
 +
* No special partiton needed for more than 4 partitions
 +
* Time saving method
 +
|
 +
* Need special EFI-partition for boot-manager
 +
* Special kernel attributes are needed
 +
* Not compatible with Microsoft® Windows™
 +
* Not supported on all platforms especially for the system volume
 +
* HDD not encrypted, can easily be cloned from other linux systems
 +
|-
 +
| 4
 +
|
 +
* Easy method but nearly not used by other distributions
 +
* No special partition needed for more than 4 partitions
 +
* HDD encrypted
 +
* Logical volume groups
 +
|
 +
* Need special EFI-partition for boot-manager
 +
* Special kernel attributes are needed
 +
* Not compatible with Microsoft® Windows™
 +
* Not supported on all platforms especially for the system volume
 +
* Needs lot of time for preparing the HDD to be encrypted
 +
|}
 +
 
 +
With the help of the the above table you should be able to select your future Hard Disk (HDD) partitioning scheme. In the further guide we will go through every single step for all four schemes.
 +
 
 +
For booting your old/other GNU/Linux System we won't give you a special detailed howto guide, as you should know how to do so, as concerning the booting with [http://www.sysresccd.org SystemRescueCd], we will give you a short step-by-step guide on how to boot up the system.
 +
 
 +
This guide will only be split into subparts for the installation process if concerning the four above mentioned steps, here the split points will be MBR vs. GPT/GUID-partitioning and encrypted vs. unencrypted HDD. So be aware of these parts if you want to use them.
 +
 
 +
== Booting the Installation System ==
 +
 
 +
=== Booting old/other GNU/Linux ===
 +
 
 +
This step is really simple, as you know your old GNU/Linux System and you need simply start your Computer, select in the boot-loader your GNU/Linux System, let it start up, log in as always and start a root-terminal.
 +
 
 +
=== Booting with SystemRescueCd ===
 +
 
 +
First step is to download [http://www.sysresccd.org SystemRescueCd], an overview of the actual version can be found at [http://www.sysresccd.org/Download http://www.sysresccd.org/Download], just follow there the link to the Sourceforge Download, you will download then about 300 MB to your HDD. If finished burn this ISO-image with your favorite burning tool like ''burn-cd, bashburn, K3B, GNOMEbaker'' on a GNU/Linux Box or ''NERO Burning ROM, CDBurnerXP Pro, and many more'' on a Microsoft® Windows™ box.
 +
[[Image:fqi-001.png|center]]
 +
 
 +
Next insert this CD into your CD-ROM-Drive and boot up the PC with it where you want to install Funtoo GNU/Linux. Make sure you boot from the CD when booting. The Booting process with [http://www.sysresccd.org SystemRescueCd] will follow the next steps:
 +
 
 +
# Selecting your Kernel to boot [http://www.sysresccd.org/ SystemRescueCd] with:
 +
[[Image:fqi-002.png|center]]
 +
In that screen you will be greeted with all the power of [http://www.sysresccd.org/ SystemRescueCd], depending on your CPU we use the boot option 1) for a 32-bit CPU or a 64-bit CPU that should run in 32-bit mode and 6) for a 64-bit CPU in 64-bit mode. If this boot option fails, use the boot option A) or B), will will lead to the following screen:
 +
[[Image:fqi-003.png|center]]
 +
That menu will give you more boot options. If you select 1. here, it would be the same kernel option like in the previous screen 1) and 6). The next step is to select your keyboard layout for installation.
 +
# Selecting your Installation Keyboard Layout
 +
[[Image:fqi-004.png|center]]
 +
That step requires a bit of your atention, as it only gives you 20 seconds time to choose your keyboard layout, if you are OK with the US keymap, just press Enter to accept the default setting.
 +
# Being ready
 +
Seconds later [http://www.sysresccd.org/ SystemRescueCd] welcomes you wit a short message and is ready fo you to be used to perform your installation.
 +
[[Image:fqi-005.png|center]]
 +
 
 +
= HDD Preparation =
 +
As mentioned earlier in this guide we cover four different installation variations, the could be displayed in an installation matrix as below:
 +
 
 +
{| cellpadding="4"
 +
|-
 +
!  !! '''MBR''' !! '''GPT'''
 +
|-
 +
| '''unencrypted''' || See [[#MBR|MBR]] || See [[#GPT/GUID partition table|GPT/GUID partition table]]
 +
|-
 +
| '''encrypted''' || See [[#MBR|MBR]] || See [[#GPT/GUID partition table|GPT/GUID partition table]]
 +
|}
 +
 
 +
If you are going to plan to install Funtoo GNU/Linux on a machine where another O/S is already installed, you have to make some free space available on your HDD in order to do so. A resize of most existing filesystems can be done with [http://www.sysresccd.org/ SystemRescueCd] too. You just need to enter the graphical environment and use gparted. We will give you a short example on how to do so with a sample HDD that might hold windows, so you get a feeling what to do, but be aware that a resize can be a dangerous part, so please keep a backup of your data, as Funtoo Technologies wouldn't take any responsibility for a loss of data that could happen by the process of shrinking a partition.
 +
 
 +
Starting the graphical environment in [http://www.sysresccd.org/ SystemRescueCd] is really simple, just execute the following command:
  
Here's some sample awk sprintf() and printf() code. As you can see in the following script, everything looks almost identical to C.
 
 
<pre>
 
<pre>
#!/usr/bin/awk -f
+
root@sysresccd /root % wizard
BEGIN {
+
x=1
+
b="foo"
+
printf("%s got a %d on the last test\n","Jim",83)
+
myout=sprintf("%s-%d",b,x)
+
print myout
+
}
+
 
</pre>
 
</pre>
This code will print:
+
 
 +
and it will start a dialog for the graphical environment setup, for most users the default options should be OK. Both the dialog and the graphical environment (Xfce) are shown in the next two images.
 +
 
 +
[[Image:fqi-006.png|center]]
 +
[[Image:fqi-007.png|center]]
 +
 
 +
=== Resize of HDD partitions ===
 +
 
 +
The above screen shows us that there is the tool called GParted right on the frontpanel. That tool will be used to resize our HDD partitions. The following screen shows us an example of how the tool looks if you start it.
 +
[[Image:fqi-008.png|center]]
 +
By clicking on the partion you want to resize you make it active right-click on it and use the point resize and you will see the Resize/Move dialog, here you can edit the resize options for that partiton.
 +
[[Image:fqi-009.png|center]]
 +
When you finished setting the resize options, you will see that the grey-green hook in the menu got green, that means you have jobs added to the working list. If you have all actions done on the partition, click on the green hook and your resize action will run by giving you the following feedback window:
 +
[[Image:fqi-010.png|center]]
 +
when that has finished you will see the resized result and it should look like that:
 +
[[Image:fqi-011.png|center]]
 +
we are finished with resizing the dis partitions, exit the Tool and close Xfce by clicking the running exit man in the down right. We are back on the command line and are ready to partitions our disk. to our needs, for a unified way we will show it with an empty partition table, so if you have resized some partitions, they will be listed in the MBR menu, as if you want to use an GPT/GUID partition table we will start from a clean table anyway.
 +
 
 +
=== Partitioning scheme ===
 +
 
 +
{{fancywarning|If you are partitioning the hard drive of a SPARC machine, please see [[Funtoo Linux Installation on SPARC]]. Also, note that '''OpenBoot has no support for GPT volumes and you won't be able to boot on the system volume if that later has been partitioned with GPT.''' }}
 +
 
 +
For partitioning we suggest the following schemes:
 +
* MBR unencrypted
 +
 
 +
{| cellpadding="4"
 +
|-
 +
! Partition !! Size !! fdisk option !! Filesystem (FS)
 +
|-
 +
| /boot || 200 MB || 83 || ext2
 +
|-
 +
| swap || 2x RAM if 1024 MB or less, otherwise 2 GB || 82 || sw (default)
 +
|-
 +
| / || 20-50 GB || 83 || ext4
 +
|-
 +
| /usr/portage || ~10 GB || 83 || ext4
 +
|-
 +
| /home || As much as possible. || 83 || xfs
 +
|}
 +
 
 +
* MBR encrypted
 +
 
 +
{| cellpadding="4"
 +
|-
 +
! Partition !! Size !! fdisk option !! FS
 +
|-
 +
| /boot || 200 MB || 83 || ext2
 +
|-
 +
| cryptoroot || Rest of the Disc || 83 || none
 +
|}
 +
 
 +
* GPT unencrypted
 +
 
 +
{| cellpadding="4"
 +
|-
 +
! Partition !! Size !! gdisk option !! FS
 +
|-
 +
| /boot || 200 MB || 0700 || ext2
 +
|-
 +
| EFI-Boot || 512 kB || EF02 || none
 +
|-
 +
| swap || 2x RAM if 1024 MB or less, otherwise 2 GB || 8200 || swap (default)
 +
|-
 +
| / || 20 - 50 GB || 0700 || ext4
 +
|-
 +
| /usr/portage || ~10 GB || 0700 || ext4
 +
|-
 +
| /home || Rest of the Disc || 0700 || xfs
 +
|}
 +
 
 +
* GPT encrypted
 +
 
 +
{| cellpadding="4"
 +
|-
 +
! Partition !! Size !! gdisk option !! FS
 +
|-
 +
| /boot || 200 MB || 0700 || ext2
 +
|-
 +
| EFI-Boot || 512 kB || EF02 || none
 +
|-
 +
| cryptoroot || Rest of the Disc || 0700 || none
 +
|}
 +
 
 +
=== MBR ===
 +
 
 +
Now we will partition the HDD using the above scheme with a disk partitioning tool named "fdisk". So just invoke it with the following command:
 +
 
 
<pre>
 
<pre>
Jim got a 83 on the last test
+
# fdisk /dev/sda
foo-1
+
 
</pre>
 
</pre>
  
=== String functions ===
+
it will greet you like this
Awk has a plethora of string functions, and that's a good thing. In awk, you really need string functions, since you can't treat a string as an array of characters as you can in other languages like C, C++, and Python. For example, if you execute the following code:
+
[[Image:fqi-012.png|center]]
 +
by pressing <tt>`m`</tt> you will get a help context menu that will give you the following options:
 +
 
 
<pre>
 
<pre>
mystring="How are you doing today?"
+
  a  toggle a bootable flag
print mystring[3]
+
  b  edit bsd disklabel
 +
  c  toggle the dos compatibility flag
 +
  d  delete a partition
 +
  l  list known partition types
 +
  m  print this menu
 +
  n  add a new partion
 +
  o  create a new empty DOS partition table
 +
  p  print the partition table
 +
  q  quit without saving changes
 +
  s  create a new empty Sun disklabel <--- SPARC specific, see Funtoo installation notes for SPARC
 +
  t  change a partition's system id
 +
  u  change display/entry units
 +
  v  verify the partition table
 +
  w  write table to disk and exit
 +
  x  extra functionality (experts only)
 
</pre>
 
</pre>
You'll receive an error that looks something like this:
+
 
 +
The partitioning scheme is created with the following commands inside of fdisk:
 +
 
 +
==== unencrypted ====
 +
 
 
<pre>
 
<pre>
awk: string.gawk:59: fatal: attempt to use scalar as array
+
Command (m for help): n
 
</pre>
 
</pre>
Oh, well. While not as convenient as Python's sequence types, awk's string functions get the job done. Let's take a look at them.
 
  
First, we have the basic length() function, which returns the length of a string. Here's how to use it:
+
it will ask you now if you want to add a primary or extended partition, we choose primary by pressing
 +
 
 
<pre>
 
<pre>
print length(mystring)
+
Command action
 +
  e  extended
 +
  p  primary partition (1-4)
 +
p
 
</pre>
 
</pre>
This code will print the value:
+
 
 +
and use for the next 2 steps the default options and add as the Last Sector for the first partition the following:
 +
 
 
<pre>
 
<pre>
24
+
Partition number (1-4, default 1): (default)
 +
Using default value 1
 +
First sector: (Use default)
 +
Using default value
 +
Last sector, ...: +200M
 
</pre>
 
</pre>
OK, let's keep going. The next string function is called index, and will return the position of the occurrence of a substring in another string, or it will return 0 if the string isn't found. Using mystring, we can call it this way:
+
 
 +
your input should look like that right now:
 +
[[Image:fqi-013.png|center]]
 +
next we need to make the partition bootable and add then the rest of the partitions:
 +
 
 
<pre>
 
<pre>
print index(mystring,"you")
+
Command (m for help): a
 +
Partition number (1-4): 1
 +
 
 +
Command (m for help): t
 +
Selected partition 1
 +
Hex code (type L to list codes): 83
 +
 
 +
Command (m for help): n
 +
Command action
 +
  e  extended
 +
  p  primary partition (1-4)
 +
p
 +
Partition number (1-4, default 2): (default)
 +
Using default value 2
 +
First sector: (Use default)
 +
Using default value
 +
Last sector, ...: +2G
 +
 
 +
Command (m for help): t
 +
Partition number (1-4): 2
 +
Hex code (type L to list codes): 82
 +
Changed system type of partition 2 to 82 (Linux swap / Solaris)
 +
 
 +
Command (m for help): n
 +
Command action
 +
  e  extended
 +
  p  primary partition (1-4)
 +
p
 +
Partition number (1-4, default 3): (default)
 +
Using default value 3
 +
First sector: (Use default)
 +
Using default value
 +
Last sector, ...: +20G
 +
 
 +
Command (m for help): t
 +
Partition number (1-4): 3
 +
Hex code (type L to list codes): 83
 +
 
 +
Command (m for help): n
 +
Command action
 +
  e  extended
 +
  p  primary partition (1-4)
 +
e
 +
Selected partition 4
 +
First sector: (Use default)
 +
Using default value
 +
Last sector, ...: (Use default)
 +
Using default value
 +
 
 +
Command (m for help): n
 +
First sector: (Use default)
 +
Using default value
 +
Last sector, ...: +10G
 +
 
 +
Command (m for help): t
 +
Partition number (1-5): 5
 +
Hex code (type L to list codes): 83
 +
 
 +
Command (m for help): n
 +
First sector: (Use default)
 +
Using default value
 +
Last sector, ...: (Use default)
 +
 
 +
Command (m for help): t
 +
Partition number (1-6): 6
 +
Hex code (type L to list codes): 83
 +
 
 +
Command (m for help): p
 
</pre>
 
</pre>
Awk prints:
+
 
 +
this will result in the following output
 +
[[Image:fqi-014.png|center]]
 +
now just write the partition table to your disk by using <tt>`w`</tt>, this will result in the following output:
 +
 
 
<pre>
 
<pre>
9
+
Command (m for help): w
 +
The partition table has been altered!
 +
 
 +
Calling ioctl() to re-read partition table.
 +
Syncing disks.
 
</pre>
 
</pre>
We move on to two more easy functions, tolower() and toupper(). As you might guess, these functions will return the string with all characters converted to lowercase or uppercase respectively. Notice that tolower() and toupper() return the new string, and don't modify the original. This code:
+
 
 +
If that was your scheme, you are now so far to get to the partition formatting section.
 +
 
 +
==== encrypted ====
 +
 
 
<pre>
 
<pre>
print tolower(mystring)
+
Command (m for help): n
print toupper(mystring)
+
print mystring
+
 
</pre>
 
</pre>
....will produce this output:
+
 
 +
it will ask you now if you want to add a primary or extended partition, we choose primary by pressing
 +
 
 
<pre>
 
<pre>
how are you doing today?
+
Command action
HOW ARE YOU DOING TODAY?
+
  e  extended
How are you doing today?
+
  p  primary partition (1-4)
 +
p
 
</pre>
 
</pre>
So far so good, but how exactly do we select a substring or even a single character from a string? That's where substr() comes in. Here's how to call substr():
+
 
 +
and use for the next 2 steps the default options and add as the Last Sector for the first partition the following:
 +
 
 
<pre>
 
<pre>
mysub=substr(mystring,startpos,maxlen)
+
Partition number (1-4, default 2): (default)
 +
Using default value 1
 +
First sector: (Use default)
 +
Using default value
 +
Last sector, ...: +200M
 
</pre>
 
</pre>
mystring should be either a string variable or a literal string from which you'd like to extract a substring. startpos should be set to the starting character position, and maxlen should contain the maximum length of the string you'd like to extract. Notice that I said maximum length; if length(mystring) is shorter than startpos+maxlen, your result will be truncated. substr() won't modify the original string, but returns the substring instead. Here's an example:
+
 
 +
Next we need to make the partition bootable and add then the rest of the partition:
 +
 
 
<pre>
 
<pre>
print substr(mystring,9,3)
+
Command (m for help): a
 +
Partition number (1-4): 1
 +
 
 +
Command (m for help): t
 +
Selected partition 1
 +
Hex code (type L to list codes): 83
 +
 
 +
Command (m for help): n
 +
Command action
 +
  e  extended
 +
  p  primary partition (1-4)
 +
p
 +
Partition number (1-4, default 2): (default)
 +
Using default value 2
 +
First sector: (Use default)
 +
Using default value
 +
Last sector, ...: (use default)
 +
 
 +
Command (m for help): p
 
</pre>
 
</pre>
Awk will print:
+
 
 +
this will result in the following output
 +
[[Image:fqi-015.png|center]]
 +
now just write the partition table to your disk by using <tt>w</tt>, this will result in the following output:
 +
 
 
<pre>
 
<pre>
you
+
Command (m for help): w
 +
The partition table has been altered!
 +
 
 +
Calling ioctl() to re-read partition table.
 +
Syncing disks.
 
</pre>
 
</pre>
If you regularly program in a language that uses array indices to access parts of a string (and who doesn't), make a mental note that substr() is your awk substitute. You'll need to use it to extract single characters and substrings; because awk is a string-based language, you'll be using it often.
 
  
Now, we move on to some meatier functions, the first of which is called match(). match() is a lot like index(), except instead of searching for a substring like index() does, it searches for a regular expression. The match() function will return the starting position of the match, or zero if no match is found. In addition, match() will set two variables called RSTART and RLENGTH. RSTART contains the return value (the location of the first match), and RLENGTH specifies its span in characters (or -1 if no match was found). Using RSTART, RLENGTH, substr(), and a small loop, you can easily iterate through every match in your string. Here's an example match() call:
+
next we need to prepare our cryto-container that will keep all the encrypted stuff in it. For that, go to the [[#Cryptocontainer|Cryptocontainer]] section.
 +
 
 +
=== GPT/GUID partition table ===
 +
 
 +
This setup is for most users more intuitive, since we don't need to care about extended partitions. We only need to setup an extra partition for our bootloader. So let us do it for unencrypted and encrypted partitions.
 +
 
 +
For setting up the GPT partition table we use the tool "gdisk", that is the GPT equivalent of fdisk.
 +
 
 +
Just start it with the following command:
 +
 
 
<pre>
 
<pre>
print match(mystring,/you/), RSTART, RLENGTH
+
gdisk /dev/sda
 
</pre>
 
</pre>
Awk will print:
+
 
 +
it will greet you with the following screen
 +
[[Image:fqi-016.png|center]]
 +
 
 +
==== unencrypted ====
 +
 
 +
Next we will create the partitions for our unencrypted setup:
 +
 
 
<pre>
 
<pre>
9 9 3
+
Command (? for help): n
 +
Partition number (1-128, default 1): (Use default)
 +
First sector (34-..., default = 34) or ...: (Use default)
 +
Information: Moved requested sector from 34 to 2048 in
 +
order to align on 2048-sector boundaries.
 +
Use 'l' on the experts' menu to adjust alignment
 +
Last sector (2048-..., default = ...) or ...: +200M
 +
Current type is 'Linux/Windows data'
 +
Hex code or GUID (L to show codes, Enter = 0700): (ENTER)
 +
Changed type of partition to 'Linux/Windows data'
 +
 
 +
Command (? for help): n
 +
Partion number (2-128, default 2): (Use default)
 +
First sector (...) or ...: (Use default)
 +
Last sector (...) or (...): +512K
 +
Current type is 'Linux/Windows data'
 +
Hex code or GUID (L to show codes, Enter = 0700): ef02
 +
Changed type of partition to 'BIOS boot partition'
 +
 
 +
Command (? for help): n
 +
Partition number (3-128, default 3): (Use default)
 +
First sector (...) or ...: (Use default)
 +
Last sector (...) or (...): +2G
 +
Current type is 'Linux/Windows data'
 +
Hex code or GUID (L to show codes, Enter = 0700): 8200
 +
Changed type of partition to 'Linux swap'
 +
 
 +
Command (? for help): n
 +
Partition number 4-128, default 4): (Use default)
 +
First sector (...) or ...: (Use default)
 +
Last sector (...) or (...): +20G
 +
Current type is 'Linux/Windows data'
 +
Hex code or GUID (L to show codes, Enter = 0700): (ENTER)
 +
Changed type of partition to 'Linux/Windows data'
 +
 
 +
Command (? for help): n
 +
Partition number 5-128, default 5): (Use default)
 +
First sector (...) or ...: (Use default)
 +
Last sector (...) or (...): +10G
 +
Current type is 'Linux/Windows data'
 +
Hex code or GUID (L to show codes, Enter = 0700): (ENTER)
 +
Changed type of partition to 'Linux/Windows data'
 +
 
 +
Command (? for help): n
 +
Partition number 6-128, default 6): (Use default)
 +
First sector (...) or ...: (Use default)
 +
Last sector (...) or (...): (Use default)
 +
Current type is 'Linux/Windows data'
 +
Hex code or GUID (L to show codes, Enter = 0700): (ENTER)
 +
Changed type of partition to 'Linux/Windows data'
 +
 
 +
Command (? for help): p
 
</pre>
 
</pre>
  
=== String substitution ===
+
will now show you a disk partitioning like that one:
Now, we're going to look at a couple of string substitution functions, sub() and gsub(). These guys differ slightly from the functions we've looked at so far in that they actually modify the original string. Here's a template that shows how to call sub():
+
[[Image:fqi-017.png|center]]
 +
now write the table to your disk with <tt>w</tt>;
 +
 
 
<pre>
 
<pre>
sub(regexp,replstring,mystring)
+
Command (? for help): w
 +
 
 +
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!!
 +
 
 +
Do you want to proceed, possibly destroying your data? (Y/N): Y
 +
OK; writing new GUID partition table (GPT).
 +
The operation has completed successfully.
 
</pre>
 
</pre>
When you call sub(), it'll find the first sequence of characters in mystring that matches regexp, and it'll replace that sequence with replstring. sub() and gsub() have identical arguments; the only way they differ is that sub() will replace the first regexp match (if any), and gsub() will perform a global replace, swapping out all matches in the string. Here's an example sub() and gsub() call:
+
 
 +
Now go the section about creating the filesystem on MBR.
 +
 
 +
==== encrypted ====
 +
 
 +
Next we will create the partitions for our encrypted setup:
 +
 
 
<pre>
 
<pre>
sub(/o/,"O",mystring)
+
Command (? for help): n
print mystring
+
Partition number (1-128, default 1): (Use default)
mystring="How are you doing today?"
+
First sector (34-..., default = 34) or ...: (Use default)
gsub(/o/,"O",mystring)
+
Information: Moved requested sector from 34 to 2048 in
print mystring
+
order to align on 2048-sector boundaries.
 +
Use 'l' on the experts' menu to adjust alignment
 +
Last sector (2048-..., default = ...) or ...: +200M
 +
Current type is 'Linux/Windows data'
 +
Hex code or GUID (L to show codes, Enter = 0700): (ENTER)
 +
Changed type of partition to 'Linux/Windows data'
 +
 
 +
Command (? for help): n
 +
Partion number (2-128, default 2): (Use default)
 +
First sector (...) or ...: (Use default)
 +
Last sector (...) or (...): +512K
 +
Current type is 'Linux/Windows data'
 +
Hex code or GUID (L to show codes, Enter = 0700): ef02
 +
Changed type of partition to 'BIOS boot partition'
 +
 
 +
Command (? for help): n
 +
Partition number (3-128, default 3): (Use default)
 +
First sector (...) or ...: (Use default)
 +
Last sector (...) or (...): (Use default
 +
Current type is 'Linux/Windows data'
 +
Hex code or GUID (L to show codes, Enter = 0700): (ENTER)
 +
Changed type of partition to 'Linux/Windows data'
 +
 
 +
Command (? for help): p
 
</pre>
 
</pre>
We had to reset mystring to its original value because the first sub() call modified mystring directly. When executed, this code will cause awk to output:
+
 
 +
will now show you a disk partitioning like that one:
 +
[[Image:fqi-018.png|center]]
 +
now write the table to your disk with <tt>w</tt>;
 +
 
 
<pre>
 
<pre>
HOw are you doing today?
+
Command (? for help): w
HOw are yOu dOing tOday?
+
 
 +
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!!
 +
 
 +
Do you want to proceed, possibly destroying your data? (Y/N): Y
 +
OK; writing new GUID partition table (GPT).
 +
The operation has completed successfully.
 
</pre>
 
</pre>
Of course, more complex regular expressions are possible. I'll leave it up to you to test out some complicated regexps.
 
  
We wrap up our string function coverage by introducing you to a function called split(). split()'s job is to "chop up" a string and place the various parts into an integer-indexed array. Here's an example split() call:
+
Now go to the Cryptocontainer setup.
 +
 
 +
=== Cryptocontainer ===
 +
 
 +
Setting up the cryptocontainer for our encrypted system is in both cases nearly identically, but for the easier showing effect we will give both examples in a seperate subsection.
 +
 
 +
==== MBR ====
 +
 
 +
First we will prepare the HDD for being encrypted, if you use [http://www.sysresccd.org/ SystemRescueCd] in version 2.0.1 or higher just execute the following commands:
 +
 
 +
{{fancynote|If you want to see progress of dd than you have to open another terminal and execute: <tt>kill -s USR1 `pidof dd`</tt>}}
 +
 
 
<pre>
 
<pre>
numelements=split("Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",mymonths,",")
+
# dd if=/dev/zero of=/dev/sda2 bs=100M
 +
# dd if=/dev/urandom of=/dev/sda2 bs=100M
 
</pre>
 
</pre>
When calling split(), the first argument contains the literal string or string variable to be chopped. In the second argument, you should specify the name of the array that split() will stuff the chopped parts into. In the third element, specify the separator that will be used to chop the strings up. When split() returns, it'll return the number of string elements that were split. split() assigns each one to an array index starting with one, so the following code:
+
 
 +
This part is optional but for security reason we advise you to do so if you like to have a secure encrypted disk. This part takes a lot of time, let your Computer run and get out to sleep and work, as it might take a day or two depending on your HDD size. :)
 +
 
 +
You should also be aware that you will get a hint about reaching the end of your HDD. That's intended and desired in this case so that the command can work without knowing your disk-size.
 +
 
 +
If you ran the above commands you should see an output similar to the one shown in the screenshot:
 +
[[Image:fqi-019.png|center]]
 +
 
 +
Next we need to encrypt our HDD, that will be done with the following commands:
 +
 
 
<pre>
 
<pre>
print mymonths[1],mymonths[numelements]
+
# cryptsetup -c aes-xts-plain luksFormat /dev/sda2
 +
 
 +
WARNING!
 +
========
 +
This will overwrite data on /dev/sda2 irrevocably.
 +
 
 +
Are you sure (Type uppercase yes): YES
 +
Enter LUKS passphrase: (Your paranoid passphrase)
 +
Verify passphrase: (Your paranoid passphrase again)
 
</pre>
 
</pre>
....will print:
+
Then we need to mount our HDD:
 
<pre>
 
<pre>
Jan Dec
+
# cryptsetup luksOpen /dev/sda2 dmcrypt_root
 +
Enter passphrase for /dev/sda2: (your paranoid passphrase)
 
</pre>
 
</pre>
  
=== Special string forms ===
+
Next we will creat the logical volumes for our setup, so have a look at the subsection about logical volumes.
A quick note -- when calling length(), sub(), or gsub(), you can drop the last argument and awk will apply the function call to $0 (the entire current line). To print the length of each line in a file, use this awk script:
+
 
 +
==== GPT/GUID ====
 +
 
 +
This section is nearly the same as above, so if you read the text in one you will reread the MBR section again only with the GPT enabled stuff.
 +
 
 +
{{fancynote|If you want to see progress of dd than you have to open another terminal and execute: <tt>kill -s USR1 `pidof dd`</tt>}}
 +
 
 +
First we will prepare the HDD for being encrypted, if you use [http://www.sysresccd.org/ SystemRescueCd] in version 2.0.1 or higher just execute the following commands:
 +
 
 
<pre>
 
<pre>
{
+
# dd if=/dev/zero of=/dev/sda3 bs=100M
    print length()
+
# dd if=/dev/urandom of=/dev/sda3 bs=100M
}
+
 
</pre>
 
</pre>
  
=== Financial fun ===
+
This part is optional but for security reason we advise you to do so if you like to have a secure encrypted disk. This part takes a lot of time, let your Computer run and get out to sleep and work, as it might take a day or two depending on your HDD size. :)
A few weeks ago, I decided to write my own checkbook balancing program in awk. I decided that I'd like to have a simple tab-delimited text file into which I can enter my most recent deposits and withdrawals. The idea was to hand this data to an awk script that would automatically add up all the amounts and tell me my balance. Here's how I decided to record all my transactions into my "ASCII checkbook":
+
 
 +
You should also be aware that you will get a hint about reaching the end of your HDD. That's intended and desired in this case so that the command can work without knowing your disk-size.
 +
 
 +
If you ran the above commands you should see an output similiar to the one shown in the screenshot:
 +
[[Image:fqi-020.png|center]]
 +
 
 +
Next we need to encrypt our HDD, that will be done with the following commands:
 +
 
 
<pre>
 
<pre>
23 Aug 2000    food    -   -   Y    Jimmy's Buffet    30.25
+
# cryptsetup -c aes-xts-plain luksFormat /dev/sda3
 +
 
 +
WARNING!
 +
========
 +
This will overwrite data on /dev/sda3 irrevocably.
 +
 
 +
Are you sure? (Type uppercase yes): YES
 +
Enter LUKS passphrase: (your paranoid passphrase)
 +
Verify passphrase: (your paranoid passphrase again)
 
</pre>
 
</pre>
Every field in this file is separated by one or more tabs. After the date (field 1, $1), there are two fields called "expense category" and "income category". When I'm entering an expense like on the above line, I put a four-letter nickname in the exp field, and a "-" (blank entry) in the inc field. This signifies that this particular item is a "food expense" :) Here's what a deposit looks like:
+
Then we need to mount our HDD:
 
<pre>
 
<pre>
23 Aug 2000    -    inco    -    Y    Boss Man        2001.00
+
# cryptsetup luksOpen /dev/sda3 dmcrypt_root
 +
Enter passphrase for /dev/sda3: (your paranoid passphrase)
 
</pre>
 
</pre>
In this case, I put a "-" (blank) in the exp category, and put "inco" in the inc category. "inco" is my nickname for generic (paycheck-style) income. Using category nicknames allows me to generate a breakdown of my income and expenditures by category. As far as the rest of the records, all the other fields are fairly self-explanatory. The cleared? field ("Y" or "N") records whether the transaction has been posted to my account; beyond that, there's a transaction description, and a positive dollar amount.
 
  
The algorithm used to compute the current balance isn't too hard. Awk simply needs to read in each line, one by one. If an expense category is listed but there is no income category (denoted by "-"), then this item is a debit. If an income category is listed, but no expense category (denoted by "-") is present, then the dollar amount is a credit. And, if there is both an expense and income category listed, then this amount is a "category transfer"; that is, the dollar amount will be subtracted from the expense category and added to the income category. Again, all these categories are virtual, but are very useful for tracking income and expenditures, as well as for budgeting.
+
next we will creat the logical volumes for our setup, so have a look at the following subsection.
 +
 
 +
==== logical volumes ====
 +
 
 +
Feel free to adjust your sizes here, we will follow our given advices above for that. First we need to creat the the physical volume, then the volume group and at last the logical volumes. doing so is really easy, just do the following for if you want to follow our advices above:
  
=== The code ===
 
Time to look at the code. We'll start off with the first line, the BEGIN block and a function definition:
 
 
<pre>
 
<pre>
#!/usr/bin/awk -f
+
# pvcreate /dev/mapper/dmcrypt_root
BEGIN {
+
Physical volume "/dev/mapper/dmcrypt_root" successfully created
    FS="\t+"
+
# vgcreate vg /dev/mapper/dmcrypt_root
    months="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec"
+
Volume group "vg" successfully created
}
+
# lvcreate -L20G -nroot vg
 +
Logical volume "root" created
 +
# lvcreate -L2G -nswap vg
 +
Logical volume "swap" created
 +
# lvcreate -L10G -n portage vg
 +
Logical volume "portage" created
 +
# lvcreate -l 100%FREE -nhome vg
 +
Logical volume "home" created
 +
</pre>
 +
 
 +
=== filesystem creation ===
 +
 
 +
Now that we have created our partitioning scheme, we can go on to create the filesystems needed for our partitions. Here differences only occur between the unencrypted setups. Encrypted volumes are handled the same way, no matter whether MBR and GPT, so there is no need to split them up in two seperate parts:
 +
 
 +
==== MBR unencrypted ====
 +
 
 +
For the unencrypted partions in the MBR setup just use the following regarding to our above given adives, you may feel free to change some parts of it if you like:
 +
 
 +
<pre>
 +
# mkfs.ext2 /dev/sda1
 +
# mkswap /dev/sda2
 +
# mkfs.ext4 /dev/sda3
 +
# mkfs.ext4 /dev/sda5
 +
# mkfs.xfs /dev/sda6
  
function monthdigit(mymonth) {
 
    return (index(months,mymonth)+3)/4
 
}
 
 
</pre>
 
</pre>
Adding the first "#!..." line to any awk script will allow it to be directly executed from the shell, provided that you "chmod +x myscript" first. The remaining lines define our BEGIN block, which gets executed before awk starts processing our checkbook file. We set FS (the field separator) to "\t+", which tells awk that the fields will be separated by one or more tabs. In addition, we define a string called months that's used by our monthdigit() function, which appears next.
 
  
The last three lines show you how to define your own awk function. The format is simple -- type "function", then the function name, and then the parameters separated by commas, inside parentheses. After this, a "{ }" code block contains the code that you'd like this function to execute. All functions can access global variables (like our months variable). In addition, awk provides a "return" statement that allows the function to return a value, and operates similarly to the "return" found in C, Python, and other languages. This particular function converts a month name in a 3-letter string format into its numeric equivalent. For example, this:
+
That was all for having your filesystem created. now go to the System Setup.
 +
 
 +
==== GPT unencrypted ====
 +
 
 +
Now let us create the filesystem for our GUID partition table. It is as easy as above, just see the difference in the jump of partition name:
 +
 
 
<pre>
 
<pre>
print monthdigit("Mar")
+
# mkfs.ext2 /dev/sda1
 +
# mkswap /dev/sda3
 +
# mkfs.ext4 /dev/sda4
 +
# mkfs.ext4 /dev/sda5
 +
# mkfs.xfs /dev/sda6
 
</pre>
 
</pre>
....will print this:
+
 
 +
Next step is to mount our partitons, for that go to the System Setup.
 +
 
 +
==== MBR/GPT encrypted ====
 +
 
 +
If you choose to encrypt your HDD, you will in both cases follow the next steps to setup your filesystems:
 +
 
 
<pre>
 
<pre>
3
+
# mkfs.ext2 /dev/sda1
 +
# mkswap /dev/mapper/vg-swap
 +
# mkfs.ext4 /dev/mapper/vg-root
 +
# mkfs.ext4 /dev/mapper/vg-portage
 +
# mkfs.xfs /dev/mapper/vg-home
 
</pre>
 
</pre>
Now, let's move on to some more functions.
 
  
=== Financial functions ===
+
So far we prepared the disk and will now mount our partitions.
Here are three more functions that perform the bookkeeping for us. Our main code block, which we'll see soon, will process each line of the checkbook file sequentially, calling one of these functions so that the appropriate transactions are recorded in an awk array. There are three basic kinds of transactions, credit (doincome), debit (doexpense) and transfer (dotransfer). You'll notice that all three functions accept one argument, called mybalance. mybalance is a placeholder for a two-dimensional array, which we'll pass in as an argument. Up until now, we haven't dealt with two-dimensional arrays; however, as you can see below, the syntax is quite simple. Just separate each dimension with a comma, and you're in business.
+
  
We'll record information into "mybalance" as follows. The first dimension of the array ranges from 0 to 12, and specifies the month, or zero for the entire year. Our second dimension is a four-letter category, like "food" or "inco"; this is the actual category we're dealing with. So, to find the entire year's balance for the food category, you'd look in mybalance[0,"food"]. To find June's income, you'd look in mybalance[6,"inco"].
+
== System Setup ==
<pre>      
+
 
function doincome(mybalance) {
+
=== Mounting filesystem ===
    mybalance[curmonth,$3] += amount
+
 
    mybalance[0,$3] += amount       
+
As we need to have a mountpoint for our system, we now create it with
 +
<pre>
 +
# install -d /mnt/funtoo
 +
</pre>
 +
 
 +
{{fancynote|The in the following used <tt>install -d</tt> command just creats all the needed folders for later mountpoints for us. If you like you can control it by using <tt>ls /mnt/funtoo</tt> after the <tt>install -d</tt> part. Now you are ready to install your base system, read on in Downloading the System.}}
 +
 
 +
==== MBR unencrypted ====
 +
 
 +
Now mount your system partitions like that if you used our above advice:
 +
 
 +
<pre>
 +
# swapon /dev/sda2
 +
# mount /dev/sda3 /mnt/funtoo
 +
# install -d /mnt/funtoo/{boot,usr/portage,home}
 +
# mount /dev/sda1 /mnt/funtoo/boot
 +
# mount /dev/sda5 /mnt/funtoo/usr/portage
 +
# mount /dev/sda6 /mnt/funtoo/home
 +
</pre>
 +
 
 +
{{fancynote|The <tt>install -d</tt> command just creats all the needed folders for later mountpoints for us. If you like you can control it by using <tt>ls /mnt/funtoo</tt> after the <tt>install -d</tt> part. Now you are ready to install your base system, read on in Downloading the System.}}
 +
 
 +
==== GPT unencrypted ====
 +
 
 +
That part is really similiar to the unencrypted MBR, but see for yourself:
 +
 
 +
<pre>
 +
# swapon /dev/sda3
 +
# mount /dev/sda4 /mnt/funtoo
 +
# install -d /mnt/funtoo/{boot,usr/portage,home}
 +
# mount /dev/sda1 /mnt/funtoo/boot
 +
# mount /dev/sda5 /mnt/funtoo/usr/portage
 +
# mount /dev/sda6 /mnt/funtoo/home
 +
</pre>
 +
 
 +
==== MBR/GPT encrypted ====
 +
 
 +
Now mount the system so we can setup the system in the next step.
 +
 
 +
<pre>
 +
# swapon /dev/mapper/vg-swap
 +
# mount /dev/mapper/vg-root /mnt/funtoo
 +
# install -d /mnt/funtoo/{boot,usr/portage,home}
 +
# mount /dev/sda1 /mnt/funtoo/boot
 +
# mount /dev/mapper/vg-portage /mnt/funtoo/usr/portage
 +
# mount /dev/mapper/vg-home /mnt/funtoo/home
 +
</pre>
 +
 
 +
=== Downloading the System ===
 +
 
 +
The next step is to download the base system and portage tree and set up both. Here a list of packages we have:
 +
 
 +
{| cellpadding="4"
 +
|-
 +
! Arch (32/64 bit) !! Processors !! Stable Release !! Current Release
 +
|-
 +
| 64-bit Install Images for PC-compatible processors
 +
|-
 +
| 64 || Generic Intel and Amd 64-bit Processors || [http://ftp.osuosl.org/pub/funtoo/funtoo-stable/x86-64bit/generic_64/ generic_64] || [http://ftp.osuosl.org/pub/funtoo/funtoo-current/x86-64bit/generic_64/ generic_64]
 +
|-
 +
| 64 || Intel Core2 Series and most Atom Processors || [http://ftp.osuosl.org/pub/funtoo/funtoo-stable/x86-64bit/core2_64/ core2_64] || [http://ftp.osuosl.org/pub/funtoo/funtoo-current/x86-64bit/core2_64/ core2_64]
 +
|-
 +
| 64 || Intel Core i3, i5, i7 || N/A || [http://ftp.osuosl.org/pub/funtoo/funtoo-current/x86-64bit/corei7/ corei7]
 +
|-
 +
| 64 || AMD Athlon 64 and Opteron Processors (K8 Family or higher) || [http://ftp.osuosl.org/pub/funtoo/funtoo-stable/x86-64bit/amd64-k8/ amd64-k8] || [http://ftp.osuosl.org/pub/funtoo/funtoo-current/x86-64bit/amd64-k8/ amd64-k8]
 +
|-
 +
| 32-bit Install Images for PC-compatible processors
 +
|-
 +
| 32 || Intel Core2 Series, i3, i5, i7 and Atom Processors || N/A || [http://ftp.osuosl.org/pub/funtoo/funtoo-current/x86-32bit/core2_32/ core2_32]
 +
|-
 +
| 32 || AMD Athlon64 and Opteron Processors (K8 Family or higher)| N/A || [http://ftp.osuosl.org/pub/funtoo/funtoo-current/x86-32bit/amd64-k8_32/ amd64-k8_32]
 +
|-
 +
| 32 || Generic x86 processors (intel80486+) || [http://ftp.osuosl.org/pub/funtoo/funtoo-stable/x86-32bit/i486/ i486] || [http://ftp.osuosl.org/pub/funtoo/funtoo-current/x86-32bit/i486/ i486]
 +
|-
 +
| 32 || Generic P6-class (Pentium Pro/Pentium II compatible) || [http://ftp.osuosl.org/pub/funtoo/funtoo-stable/x86-32bit/i686/ i686] || [http://ftp.osuosl.org/pub/funtoo/funtoo-current/x86-32bit/i686/ i686]
 +
|-
 +
| 32 || Athlon XP and Athlon 64-based CPU (32-bit mode) || N/A || [http://ftp.osuosl.org/pub/funtoo/funtoo-current/x86-32bit/athlon-xp/ athlon-xp]
 +
|-
 +
| 32 || Intel Pentium 4 Processors || N/A || [http://ftp.osuosl.org/pub/funtoo/funtoo-current/x86-32bit/pentium4/ pentium4]
 +
|-
 +
| OpenVZ Templates for PC-Compatible Systems
 +
|-
 +
| 32 || 32-bit OpenVZ Images || [http://ftp.osuosl.org/pub/funtoo/funtoo-stable/openvz/x86-32bit OpenVZ x86-32bit] || [http://ftp.osuosl.org/pub/funtoo/funtoo-current/openvz/x86-32bit OpenVZ x86-64bit]
 +
|-
 +
| 64 || 64-bit OpenVZ Images || [http://ftp.osuosl.org/pub/funtoo/funtoo-stable/openvz/x86-64bit OpenVZ x86-64bit] || [http://ftp.osuosl.org/pub/funtoo/funtoo-current/openvz/x86-64bit OpenVZ x86-64bit]
 +
|-
 +
| SPARC processor Images
 +
|-
 +
| 32/64 || Generic SPARC v9 processors (use this one if the ultrasparc I/II stages are inadequate for you) || N/A || [http://ftp.osuosl.org/pub/funtoo/funtoo-current/sparc-64bit/sparc_v9/ sparc_v9]
 +
|-
 +
| 32/64 || UltraSPARC I & UltraSPARC II series (choose this one in doubt) || N/A || [http://ftp.osuosl.org/pub/funtoo/funtoo-current/sparc-64bit/ultrasparc/ ultrasparc]
 +
|-
 +
| 32/64 || UltraSPARC III and UltraSPARC IV series || N/A || [http://ftp.osuosl.org/pub/funtoo/funtoo-current/sparc-64bit/ultrasparc3/ ultrasparc3]
 +
|-
 +
| 32/64 || Niagara (UltraSPARC T1) || N/A || [http://ftp.osuosl.org/pub/funtoo/funtoo-current/sparc-64bit/niagara/ niagara]
 +
|-
 +
| 32/64 || Niagara 2 (UltraSPARC T2/ UltraSPARC T2+) || N/A || [http://ftp.osuosl.org/pub/funtoo/funtoo-current/sparc-64bit/niagara2/ niagara2]
 +
|}
 +
 
 +
If you found your desired image above, just change to <tt>/mnt/funtoo</tt> and download the stage3 and portage-tree images.
 +
 
 +
<pre>
 +
# cd /mnt/funtoo
 +
# elinks http://ftp.osuosl.org/pub/funtoo/funtoo-current/x86-64bit/generic_64/
 +
</pre>
 +
 
 +
[[Image:fqi-021.png|center]]
 +
this shows you the site presented and by going down with the arrow keys to stage3-latest.tar.xz until it is highlighted you can download it by pressing <tt>D</tt>. Then move up in the directory structure (<tt>..</tt>-link) and go to the snapshot directory or quit elinks after downloading finished and start it again with like that
 +
 
 +
<pre>
 +
# elinks http://ftp.osuosl.org/pub/funtoo/funtoo-current/snapshots/
 +
</pre>
 +
 
 +
here you will now download the portage tree (portage-latest.tar.xz). The Download dialog will look in both cases like that:(Note outdated image, 'stage3-current.tar.xz' is now 'stage3-latest.tar.xz')
 +
[[Image:fqi-022.png|center]]
 +
 
 +
When both downloads have finished quit elinks by typing <tt>q</tt>. The downloaded files should be located in <tt>/mnt/funtoo</tt>. Now that this is done, let us move on to installing your base system.
 +
 
 +
=== Installing the base system ===
 +
 
 +
Now that we have the base system and the portage tree downloaded, we will install it. First install the stage3. it is really easy.
 +
 
 +
<pre>
 +
# tar xfvpJ stage3-latest.tar.xz
 +
</pre>
 +
 
 +
That will output many lines, and return a command-prompt line when finished.
 +
 
 +
Next we need to extract the funtoo-portage-tree. For that we need to change to the future <tt>/usr</tt> dir, and extract there the portage.
 +
 
 +
<pre>
 +
# cd /mnt/funtoo/usr
 +
# tar xfvpJ ../portage-latest.tar.xz
 +
</pre>
 +
 
 +
This time there will be no output, but when the unpacking has finished, the result will be an empty command prompt. We still need to checkout the tree, but this can only be done from inside the chroot environment.
 +
 
 +
At this state of the setup we have setup most of our system. If you choose to use the fast genkernel method later on, the hardest part is already done. If you choose to manually configure the kernel, you still have quite a bit work ahead of you.
 +
 
 +
=== Chrooting ===
 +
 
 +
Before we can finally chroot into your system, there are a couple of things that need to be done before, like mounting the proc and dev filesystem.
 +
 
 +
<pre>
 +
# mount -t proc none /mnt/funtoo/proc
 +
# mount --bind /dev /mnt/funtoo/dev
 +
</pre>
 +
 
 +
to have a working network inside of your chrooted system later you need to copy the <tt>resolv.conf</tt> file too:
 +
 
 +
<pre>
 +
# cp -L /etc/resolv.conf /mnt/funtoo/etc
 +
</pre>
 +
 
 +
Now we can chroot into your Funtoo system
 +
 
 +
<pre>
 +
# env -i HOME=/root TERM=$TERM SHELL=/bin/bash
 +
# chroot /mnt/funtoo /bin/bash
 +
</pre>
 +
 
 +
Now that we are inside your new system, you'll need to update your environment, use the following commands to do so:
 +
 
 +
<pre>
 +
# source /etc/profile
 +
# env-update
 +
</pre>
 +
 
 +
We also recommend you to change the default command prompt while you are inside the chroot, as it will avoid confusions if you have to change terminals for anything. To do so use the following command:
 +
 
 +
<pre>
 +
# export PS1="(chroot) $PS1"
 +
</pre>
 +
 
 +
Congratulations! You are now inside your new Funtoo Linux operating system.
 +
 
 +
==== Updating the Portage tree ====
 +
 
 +
As we have installed the Portage snapshot during the installation, we now need to "activate" the Portage tree by selecting the <tt>funtoo.org</tt> branch.
 +
 
 +
By default, the master branch is enabled, which saves space when storing the tree inside a tarball, but that branch only contains a README with the same instructions as the ones given here.
 +
 
 +
To activate the funtoo.org branch, do the following:
 +
 
 +
<pre>
 +
# cd /usr/portage/
 +
# git checkout funtoo.org
 +
 
 +
  Checking out files: 100% (85007/85007), done.
 +
  Switched to branch "funtoo.org"
 +
</pre>
 +
 
 +
You'll now be able to see thousands of glorious ebuilds inside your Portage tree :)
 +
 
 +
After activating the funtoo.org branch you need to sync your tree to the newest glorious funtoo ebuilds. Run:
 +
 
 +
<pre>
 +
# emerge --sync
 +
</pre>
 +
 
 +
This will now update the tree to the current state, which normally changes twice a day.
 +
 
 +
==== Setting the default options ====
 +
 
 +
Like any other Linux Distribution, Funtoo Linux has it's share of configuration files, that need to be edited by you. The following table gives you an overview of these files and for what they are there:
 +
 
 +
{| cellpadding="4"
 +
|-
 +
! File !! Description
 +
|-
 +
| /etc/make.conf || Parameters used by <tt>gcc</tt> compiler
 +
|-
 +
| /etc/fstab || Device to mountpoint definitions
 +
|-
 +
| /etc/conf.d/hostname || Setting your hostname
 +
|-
 +
| /etc/rc.conf || OpenRC configuration file.
 +
|-
 +
| /etc/conf.d/keymaps || Keyboard configuration file.
 +
|-
 +
| /etc/conf.d/hwclock || System clock to use.
 +
|-
 +
| /etc/conf.d/consolefont || Fonts to be used in console display. This doesn't affect GUI terminal emulators.
 +
|-
 +
| /etc/env.d/99editor || Default editor.
 +
|-
 +
| /etc/localtime || Your timezone.
 +
|-
 +
| /etc/make.profile || Type of installation (desktop, server...).
 +
|-
 +
| /etc/conf.d/modules || Kernel modules to load
 +
|-
 +
| /etc/locale.gen || Localization.
 +
|-
 +
| /etc/env.d/02locales || Localization for old programs.
 +
|}
 +
 
 +
If you are installing an english Funtoo, you are lucky, as you won't need to edit many of the files above, if not, don't be afraid, we will walk through the configuration of these files in the following together.
 +
 
 +
First we will get a mighty editor with great syntax highlighting as it is not provided in our main system we will merge it, if you don't like to please replace in the following edit sections the part <tt>vim <path/filename></tt> with your <tt>editor <path/filename></tt> where editor is replaced by <tt>vi</tt> or <tt>nano -w</tt>.
 +
 
 +
First let us get <tt>vim</tt> so we have the perfect highlighting from it for our personal help.
 +
 
 +
<pre>
 +
# emerge -avt vim
 +
</pre>
 +
 
 +
that will result in an output like that
 +
[[Image:fqi-023.png|center]]
 +
just accept the output with <tt>Enter</tt> and it will install vim for you, while you wait for vim to get emerged, here are the some basic usage instructions for ViM. ViM has a multimode interface, if you start it, it is in <tt>Command mode</tt>, the second mode is the <tt>Edit mode</tt> which you will enter from the <tt>Command mode</tt> by pressing <tt>i</tt>, to go back into the <tt>Command mode</tt> press <tt>ESC</tt>. After you have edited a config file, you want to save it, for that you have to be in <tt>Command mode</tt> and then simple press <tt>:w<ENTER></tt>, it will save the file, a closing is done with <tt>:q<ENTER></tt>, if you changed content in the file that shouldn't be saved use <tt>:q!</tt> and for saving and closing the file <tt>:wq</tt>, thats all, the visual mode is in that context not very useful, so we leave it out. Now that you know the basic usage of ViM and it has emerged we will now start configuring the config files.
 +
 
 +
===== /etc/make.conf =====
 +
 
 +
First open that file
 +
 
 +
<pre>
 +
# vim /etc/make.conf
 +
</pre>
 +
 
 +
This file contains something similar to the following. You may or may not have a CFLAGS variable set already depending on what stage 3 tarball you used:
 +
 
 +
<pre>
 +
ACCEPT_KEYWORDS="~amd64"
 +
SYNC="git://github.com/funtoo/portage-mini-2010.git"
 +
CHOST="x86_64-pc-linux-gnu"
 +
</pre>
 +
 
 +
{{fancynote|In ACCEPT_KEYWORDS, ~amd64 is used for current 64-bit builds; There is no tilde for the stable build. The default value is (~)x86 for 32 bit. The ACCEPT_KEYWORDS line should not be altered. Keep it as supplied in the default file. It is also important to not change the CHOST line.}}
 +
 
 +
====== CFLAGS ======
 +
 
 +
If you're only building packages for your host processor and not any others then the recommended CFLAGS setting is:
 +
 
 +
<pre>
 +
CFLAGS="-march=native -O2 -pipe"
 +
</pre>
 +
 
 +
Since [http://gcc.gnu.org/gcc-4.2/changes.html gcc-4.2], -mtune=native and -march=native will produce code optimized for the host processor. -mtune=native has no effect if GCC does not recognize the processor. More information can be found in the [http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options GCC online docs].
 +
 
 +
{{fancynote|The value <tt>native</tt> selects the best architecture option for the host processor, so this should not be used if you intend to compile packages for a different CPU.}}
 +
 
 +
====== CXXFLAGS ======
 +
 
 +
Normally, this flag is set to the same values as CFLAGS:
 +
 
 +
<pre>
 +
CXXFLAGS="${CFLAGS}"
 +
</pre>
 +
 
 +
====== MAKEOPTS ======
 +
 
 +
With <tt>MAKEOPTS</tt> you define how many parallel compilations should occur when you compile a package. A good choice is the number of CPUs (or CPU threads) in your system plus one (Note: this guideline isn't always perfect). If for example you have a dual core processor without hyperthreading, then you would set MAKEOPTS to 3:
 +
 
 +
<pre>
 +
MAKEOPTS="-j3"
 +
</pre>
 +
 
 +
If you're unsure of how many processors/threads you have, then use /proc/cpuinfo to help you.
 +
 
 +
<pre>
 +
# cat /proc/cpuinfo  | grep "model name" | wc -l
 +
16
 +
</pre>
 +
 
 +
Set MAKEOPTS to this number plus one:
 +
 
 +
<pre>
 +
MAKEOPTS="-j17"
 +
</pre>
 +
 
 +
====== USE ======
 +
 
 +
<tt>USE</tt> flags define what functionality is enabled when ebuilds are built. It is not recommended to add a lot of them during installation. You should wait until you have a working, bootable system to do so. The following USE flags are a recommended starting point for new systems:
 +
 
 +
<pre>
 +
USE="-gnome -gtk -kde -kdeenablefinal -ldap nls -qt3 -qt3support -qt4 userlocales"
 +
</pre>
 +
 
 +
The minus(-) sign tells gcc not to use the flag when compiling. <tt>USE</tt> flags <tt>gnome</tt>, <tt>gtk</tt>, <tt>kde</tt>, <tt>qt3</tt>, <tt>qt3support</tt>, and <tt>qt4</tt> will be set later if you install a desktop envrionment.
 +
 
 +
A Funtoo guide to <tt>USE</tt> flags will be available in the future. For now, you can find out more information about USE flags in the [http://www.gentoo.org/doc/en/handbook/handbook-amd64.xml?part=2&chap=2 Gentoo Handbook].
 +
 
 +
====== GENTOO_MIRRORS ======
 +
 
 +
This is the mirror from which emerge gets a lot of the source files. It is usually not necessary to set this flag. In the following ewxample, the Waterloo University is used (a fast and reliable Canadian mirror). Please set this variable to a mirror local to your country.
 +
 
 +
<pre>
 +
GENTOO_MIRRORS="ftp://mirror.csclub.uwaterloo.ca/gentoo-distfiles/ http://distfiles.gentoo.org"
 +
</pre>
 +
 
 +
====== LINGUAS ======
 +
 
 +
<tt>LINGUAS</tt> tells Portage which local language to compile the system and applications in (those who use LINGUAS variable like OpenOffice). It is not usually necessary to set this if you use English. Otherwise, if you want another language, replace fr (French) for the code of your mother language, e.g. de for German.
 +
 
 +
<pre>
 +
LINGUAS="fr"
 +
</pre>
 +
 
 +
or for multiple language support you might also use:
 +
 
 +
<pre>
 +
LINGUAS="en de fr"
 +
</pre>
 +
 
 +
====== /etc/make.conf example ======
 +
 
 +
An example of a <tt>/etc/make.conf</tt> file could look like that:
 +
 
 +
<pre>
 +
# These settings were set by the metro build script that automatically built this stage.
 +
# Please consult /etc/make.conf.example for a more detailed example.
 +
 
 +
ACCEPT_KEYWORDS="x86"
 +
FEATURES="mini-manifest"
 +
SYNC="git://github.com/funtoo/portage-mini-2010.git"
 +
CHOST="i686-pc-linux-gnu"
 +
CFLAGS="-march=i686 -O2 -pipe"
 +
CXXFLAGS="${CFLAGS}"
 +
MAKEOPTS="-j2"
 +
USE="-gnome -gtk -kde -kdeenablefinal -ldap nls -qt3 -qt3support -qt4 userlocales"
 +
GENTOO_MIRRORS="ftp://mirror.csclub.uwaterloo.ca/gentoo-distfiles/ http://distfiles.gentoo.org"
 +
LINGUAS="fr"
 +
INPUT_DEVICES="evdev synaptics"
 +
VIDEO_CARDS="vesa radeon"
 +
PORT_LOGDIR="/var/log/portage"
 +
PORTAGE_ELOG_CLASSES="log warn error info"
 +
PORTAGE_ELOG_SYSTEM="echo:log,warn save:log,warn,error,info syslog:error"
 +
</pre>
 +
 
 +
===== /etc/fstab =====
 +
 
 +
This file is used for the configuration of the mountpoints for the system. As we have two different setups described above, here are the two examples for these.
 +
 
 +
<pre>
 +
# vim /etc/fstab
 +
</pre>
 +
 
 +
====== unencrypted MBR ======
 +
 
 +
<pre>
 +
# The root filesystem should have a pass number of either 0 or 1.
 +
# All other filesystems should have a pass number of 0 or greater than 1.
 +
#
 +
# NOTE: If your BOOT partition is ReiserFS, add the notail option to opts.
 +
#
 +
# See the manpage fstab(5) for more information.
 +
#
 +
# <fs>          <mountpoint>    <type>  <opts>              <dump/pass>
 +
 
 +
/dev/sda1      /boot          ext2    noauto,noatime      1 2
 +
/dev/sda2      none            swap    sw                  0 0
 +
/dev/sda3      /              ext4    noatime            0 1
 +
/dev/sda5      /usr/portage    ext4    noatime            0 1
 +
/dev/sda6      /home          xfs    defaults,noatime    0 1
 +
#/dev/cdrom    /mnt/cdrom      auto    noauto,ro          0 0
 +
none            /dev/shm        tmpfs  nodev,nosuid,noexec 0 0
 +
</pre>
 +
 
 +
====== unencrypted GPT ======
 +
 
 +
<pre>
 +
# The root filesystem should have a pass number of either 0 or 1.
 +
# All other filesystems should have a pass number of 0 or greater than 1.
 +
#
 +
# NOTE: If your BOOT partition is ReiserFS, add the notail option to opts.
 +
#
 +
# See the manpage fstab(5) for more information.
 +
#
 +
# <fs>          <mountpoint>    <type>  <opts>              <dump/pass>
 +
 
 +
/dev/sda1      /boot          ext2    noauto,noatime      1 2
 +
/dev/sda3      none            swap    sw                  0 0
 +
/dev/sda4      /              ext4    noatime            0 1
 +
/dev/sda5      /usr/portage    ext4    noatime            0 1
 +
/dev/sda6      /home          xfs    defaults,noatime    0 1
 +
#/dev/cdrom    /mnt/cdrom      auto    noauto,ro          0 0
 +
none            /dev/shm        tmpfs  nodev,nosuid,noexec 0 0
 +
</pre>
 +
 
 +
====== encrypted ======
 +
 
 +
That time the setup is the same for both MBR and GPT partition layout:
 +
 
 +
<pre>
 +
# The root filesystem should have a pass number of either 0 or 1.
 +
# All other filesystems should have a pass number of 0 or greater than 1.
 +
#
 +
# NOTE: If your BOOT partition is ReiserFS, add the notail option to opts.
 +
#
 +
# See the manpage fstab(5) for more information.
 +
#
 +
# <fs>                  <mountpoint>    <type>  <opts>              <dump/pass>
 +
 
 +
/dev/sda1              /boot          ext2    noauto,noatime      1 2
 +
/dev/mapper/vg-swap    none            swap    sw                  0 0
 +
/dev/mapper/vg-root    /              ext4    noatime            0 1
 +
/dev/mapper/vg-portage  /usr/portage    ext4    noatime            0 1
 +
/dev/mapper/vg-home    /home          xfs    defaults,noatime    0 1
 +
#/dev/cdrom            /mnt/cdrom      auto    noauto,ro          0 0
 +
none                    /dev/shm        tmpfs  nodev,nosuid,noexec 0 0
 +
</pre>
 +
 
 +
===== /etc/conf.d/hostname =====
 +
 
 +
Here you will set up your hostname for the PC. So choose a name for your PC and set it up in that file:
 +
 
 +
<pre>
 +
# vim /etc/conf.d/hostname
 +
 
 +
# Set to the hostname of this machine
 +
hostname="<your-hostname>"
 +
</pre>
 +
 
 +
===== /etc/rc.conf =====
 +
 
 +
You may use this file as-is. However, it is a good idea to set <tt>rc_logger</tt> to yes. That will create a log file which is handy when problems are encountered with OpenRC scripts. Very helpful for fixing things.
 +
 
 +
Another good option here is the <tt>rc_interactive</tt> flag, if you are playing around with a new graphical display manager or aren't that used with the upgrade procedure of the graphical environement. if <tt>rc_interactive</tt> is set to yes, you will be able to interactively manipulate the boot process, what means you can decide what you want to start or not, like the graphical environment for example.
 +
 
 +
Other options have really good explainations inside of the <tt>/etc/rc.conf</tt> file.
 +
 
 +
===== /etc/conf.d/keymaps =====
 +
 
 +
You do not have to alter that file if you have a US English keyboard. Otherwise, edit file and set <tt>keymap</tt> to your keyboard model. For example, cf for French Canadian keyboard, fr for French Azerty and de for German Qwertz.
 +
 
 +
===== /etc/conf.d/hwclock =====
 +
 
 +
If you dual boot with Windows, you'll need to edit this file and change clock to local. Otherwise you should not normally need to edit this file.
 +
 
 +
You should define your timezone in <tt>/etc/timezone</tt>:
 +
 
 +
<pre>
 +
# vim /etc/timezone
 +
Europe/Berlin
 +
</pre>
 +
 
 +
anoteher value might be
 +
 
 +
<pre>
 +
America/Denver
 +
</pre>
 +
 
 +
so you might get an idea how it should look like, if not have a look at <tt>/usr/share/zoneinfo</tt> it will give you the entry after the path like <tt>/usr/share/zoneinfo/<Content of /etc/timezone></tt> like for Germany you will find a path in there that looks like <tt>/usr/share/zoneinfo/Europe/Berlin</tt>.
 +
 
 +
===== /etc/conf.d/consolefont =====
 +
 
 +
There is nothing to edit in that file.
 +
 
 +
===== /etc/env.d/99editor =====
 +
 
 +
Create and edit that file to instruct your system about the default editor it should use.
 +
 
 +
<pre>
 +
vim /etc/env.d/99editor
 +
</pre>
 +
 
 +
Type in :
 +
 
 +
<pre>
 +
EDITOR="/usr/bin/vim"
 +
</pre>
 +
 
 +
Replace the above line with the editor of your choice, if you had been happy so far with ViM just paste it in as is, if not use <tt>nano</tt>, <tt>vi</tt> or what else you like.
 +
 
 +
===== /etc/localtime =====
 +
 
 +
If you came here from Gentoo, it was advised to copy the file from the zoneinfo dir to here. We advise you to create a symbolic link from the zoneinfo dir to <tt>/etc/localtime</tt>. As in the hwclock section above, we need your timezone parted in LAND/TOWN like for Germany Europe/Berlin. Now, create the symbolic link. More info about it can be found in the <tt>/usr/share/zoneinfo</tt> dir.
 +
 
 +
<pre>
 +
ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime
 +
</pre>
 +
 
 +
That command sets the timezone to Central European Time.
 +
 
 +
===== /etc/make.profile =====
 +
 
 +
Here you select which type of environment you want the gcc-compiler to take into account. That will dress up an environment with a list of pre-defined USE flags.
 +
 
 +
To list all available profiles run:
 +
 
 +
<pre>
 +
eselect profile list
 +
</pre>
 +
 
 +
The output will look like that:
 +
 
 +
<pre>
 +
[1]  default/linux/x86/2008.0 *
 +
[2]  default/linux/x86/2008.0/desktop
 +
[3]  default/linux/x86/2008.0/developer
 +
[4]  default/linux/x86/2008.0/server
 +
</pre>
 +
 
 +
Profile defaults to 2008.0 (See the star). To create a profile for DE (Desktop Environment) run:
 +
 
 +
<pre>
 +
eselect profile set 2
 +
</pre>
 +
 
 +
{{fancywarning|Funtoo only supports the 2008.0 profile and the 2008.0 profile children. Use one of these profiles until 'funtoo-1.0' is ready.}}
 +
 
 +
===== /etc/conf.d/modules =====
 +
 
 +
With Funtoo, OpenRC loads modules from <tt>/etc/conf.d/modules</tt> using the line:
 +
 
 +
<pre>
 +
modules_2_6="list of modules"
 +
</pre>
 +
 
 +
With Funtoo, define module arguments as follows:
 +
 
 +
<pre>
 +
module_module-name_args_2_6="module arg=value"
 +
</pre>
 +
 
 +
===== Localization =====
 +
 
 +
<tt>/etc/locale.gen</tt> and <tt>/etc/env.d/02locales</tt> are used to support your local language. The last one is required just in case there still are old programs installed.
 +
 
 +
You do not need to amend anything if your locales are US English. The following are examples for German. You can look in /usr/share/i18n/SUPPORTED for the default list of supported combinations or look in /usr/share/i18n/locales to determine values to use.
 +
 
 +
<pre>
 +
# vim /etc/locale.gen
 +
</pre>
 +
 
 +
Put this value into the file for German support:
 +
 
 +
<pre>
 +
de_DE.UTF-8 UTF-8
 +
</pre>
 +
 
 +
for a multiple language support it might look like that:
 +
 
 +
<pre>
 +
de_DE.UTF-8 UTF-8
 +
fr_CA.UTF-8 UTF-8
 +
en_US.UTF-8 UTF-8
 +
</pre>
 +
 
 +
Edit <tt>/etc/env.d/02locales</tt> according to that layout:
 +
 
 +
<pre>
 +
# vim /etc/env.d/02locales
 +
</pre>
 +
 
 +
and put in these lines:
 +
 
 +
<pre>
 +
LANG="de_DE.UTF-8"
 +
LANGUAGE="de_DE.UTF-8"
 +
</pre>
 +
 
 +
Finally after we editet all the localization files generate the localized environment:
 +
 
 +
<pre>
 +
locale-gen && source /etc/profile
 +
</pre>
 +
 
 +
==== Kernel ====
 +
 
 +
Now that you have the base system running, you need to install a kernel. If you decided to use a standard setup with an unencrypted GPT disc layout or the old unencrypted MBR disc layout, a fast solution would be to use the [[Funtoo Quick Install#genkernel|genkernel]] solution. If you used the standard setup with an encrypted GPT disc layout or the old encrypted MBR disc layout, you have to use the [[Funtoo Quick Install#manual kernel|manual kernel]] steps.
 +
 
 +
===== choosing a kernel =====
 +
 
 +
First, you need to choose a kernel version you would like to install on your system. The following table will give you an overview of which kernels are available and who should use them.
 +
 
 +
{| border="0" cellpadding="4"
 +
|-
 +
! Kernel ebuild !! Description !! masked !! Prefered Users !! eselect kernel set
 +
|-
 +
! sys-kernel/*
 +
 +
!
 +
!
 +
! generates symlink
 +
|-
 +
| cell-sources
 +
| Full sources including the cell/ps3 patchset for the 2.6 kernel tree
 +
| <span style="color:red">[ Masked ]</span>
 +
|
 +
| <span style="color:orange">unsure</span>
 +
|-
 +
| ck-sources
 +
| Con Kolivas' high performance patchset + Gentoo patchset sources
 +
|
 +
|
 +
| <span style="color:orange">unsure</span>
 +
|-
 +
| debian-sources
 +
| Debian Sources - with optional OpenVZ support
 +
|
 +
|
 +
| <span style="color:red">NO</span>
 +
|-
 +
| gentoo-sources
 +
| Full sources including the Gentoo patchset for the 2.6 kernel tree
 +
|
 +
| <span style="color:green">default for most users</span>
 +
| <span style="color:green">YES</span>
 +
|-
 +
| git-sources
 +
| The very latest -git version of the Linux kernel
 +
|
 +
| for the versed user
 +
| <span style="color:green">YES</span>
 +
|-
 +
| hardened-sources
 +
| Hardened kernel sources (kernel series 2.6)
 +
|
 +
| <span style="color:red">not supported atm</span>
 +
| <span style="color:green">YES</span>
 +
|-
 +
| mips-sources
 +
| Linux-Mips GIT sources for MIPS-based machines, dated 20110207
 +
| <span style="color:red">[ Masked ]</span>
 +
|
 +
| <span style="color:orange">unsure</span>
 +
|-
 +
| mm-sources
 +
| Andrew Morton's kernel, mostly fixes for 2.6 vanilla, some vm stuff too
 +
|
 +
|
 +
| <span style="color:orange">unsure</span>
 +
|-
 +
| openvz-sources
 +
| Full sources including OpenVZ patchset for the 2.6.18 kernel tree
 +
|
 +
| For users that want to build a OpenVZ server
 +
| <span style="color:orange">unsure</span>
 +
|-
 +
| pf-sources
 +
| Linux kernel fork with new features, including the -ck patchset (BFS), BFQ, TuxOnIce and LinuxIMQ
 +
|
 +
|
 +
| <span style="color:orange">unsure</span>
 +
|-
 +
| rhel5-openvz-binaries
 +
| RHEL5 kernel with OpenVZ patchset - initrd and bzImage
 +
|
 +
|
 +
| <span style="color:green">YES</span>
 +
|-
 +
| rhel5-openvz-sources
 +
| Full Linux kernel sources - RHEL5 kernel with OpenVZ patchset
 +
|
 +
|
 +
| <span style="color:orange">unsure</span>
 +
|-
 +
| rhel6-openvz-binaries
 +
| RHEL6 kernel with OpenVZ patchset - initrd and bzImage
 +
|
 +
|
 +
| <span style="color:orange">unsure</span>
 +
|-
 +
| rhel6-openvz-sources
 +
| Full Linux kernel sources - RHEL5 kernel with OpenVZ patchset
 +
|
 +
|
 +
| <span style="color:orange">unsure</span>
 +
|-
 +
| sparc-sources
 +
| Full sources for the Gentoo Sparc Linux kernel
 +
| <span style="color:red">[ Masked ]</span>
 +
|
 +
| <span style="color:green">YES</span>
 +
|-
 +
| sysrescue-std-binaries
 +
| System Rescue CD Full sources for the Linux kernel, including gentoo and sysresccd patches - initrd and bzImage
 +
| <span style="color:red">[ Masked ]</span>
 +
|
 +
| <span style="color:orange">unsure</span>
 +
|-
 +
| sysrescue-std-sources
 +
| System Rescue CD Full sources for the Linux kernel, including gentoo and sysresccd patches.
 +
|
 +
|
 +
| <span style="color:orange">unsure</span>
 +
|-
 +
| tuxonice-sources
 +
| TuxOnIce + Gentoo patchset sources
 +
|
 +
|
 +
| <span style="color:orange">unsure</span>
 +
|-
 +
| usermode-sources
 +
| Full sources for the User Mode Linux kernel
 +
| <span style="color:red">[ Masked ]</span>
 +
|
 +
| <span style="color:orange">unsure</span>
 +
|-
 +
| vanilla-sources
 +
| Full sources for the Linux kernel
 +
|
 +
|
 +
| <span style="color:green">YES</span>
 +
|-
 +
| vserver-sources
 +
| Full sources including Gentoo and Linux-VServer patchsets for the 2.6 kernel tree.
 +
|
 +
|
 +
| <span style="color:orange">unsure</span>
 +
|-
 +
| xbox-sources
 +
| Full sources for the Xbox Linux kernel
 +
| <span style="color:red">[ Masked ]</span>
 +
|
 +
| <span style="color:orange">unsure</span>
 +
|-
 +
| xen-sources
 +
| Full sources for a dom0/domU Linux kernel to run under Xen
 +
|
 +
|
 +
| <span style="color:orange">unsure</span>
 +
|-
 +
| zen-sources
 +
| The Zen Kernel Sources v2.6
 +
|
 +
|
 +
| <span style="color:orange">unsure</span>
 +
|}
 +
 
 +
For the next section, we will assume that you selected gentoo-sources for your kernel setup. If not, please replace gentoo-sources in the next section with your selection. If you are unsure, please follow our suggestion to use the gentoo-sources.
 +
 
 +
===== genkernel =====
 +
 
 +
That part would be fast done in general, we will now guide you through that process. First, we need to install the needed tools for it. So, let's do it!
 +
 
 +
<pre>
 +
# emerge -avt genkernel gentoo-sources
 +
Calculating dependencies... done!
 +
 
 +
These are the packages that would be merged, in reverse order:
 +
 
 +
[ebuild  N    ] sys-kernel/gentoo-sources-2.6.38-r4  USE="-build -deblob -symlink" 134 kB
 +
[ebuild  N    ] sys-kernel/genkernel-3.4.12.6-r2  USE="-bash-completion (-ibm) (-selinux)" 11,556 kB
 +
 
 +
Total: 2 packages (2 new), Size of downloads: 11,690 kB
 +
 
 +
Would you like to merge these packages? [Yes/No]
 +
</pre>
 +
 
 +
After answering the above question with "Yes", it will download and install the packages for you. Next, you need to set the symlink from /usr/src/linux to the /usr/src/linux-version directory. There are two ways to do so. If you have selected a version that is supported by eselect, it would be really simple for you, just do:
 +
 
 +
<pre>
 +
# eselect kernel list
 +
# eselect kernel set 1
 +
</pre>
 +
 
 +
The first command should list the kernel you have selected. If that isn't the case, the second command to set this kernel version isn't needed, else the second one sets the symlink automatically for you. As <tt>eselect kernel command</tt> will scan your <tt>/usr/src</tt> directory, it should list every kernel-sources listed above, if that isn't the case, please report the failing to the [http://groups.google.com/group/funtoo-dev funtoo-dev mailing list], [http://forums.funtoo.org  Funtoo Forums] or contact us directly in IRC at [irc://irc.freenode.net/funtoo #funtoo]. As a workaround you could use the following steps to make your kernel-sources usable:
 +
 
 +
<pre>
 +
# cd /usr/src
 +
# rm linux
 +
# ls
 +
linux-sources
 +
# ln -s linux-sources linux
 +
</pre>
 +
 
 +
where linux-sources is the directory that the <tt>ls</tt> command above showed you.
 +
 
 +
When you finished the selection of your kernel you will now bake your first kernel, using the genkernel or fast way. Execute for that the following command:
 +
 
 +
<pre>
 +
# genkernel --menuconfig all
 +
</pre>
 +
 
 +
if you have a special config predefined use
 +
 
 +
<pre>
 +
# genkernel --kernel-config=config-name --menuconfig all
 +
</pre>
 +
 
 +
else if you have choosen an encrypted setup, use the following command to include all the tools you need for bootup:
 +
<pre>
 +
# genkernel --lvm --luks --menuconfig all
 +
</pre>
 +
the above used options are doing the following:
 +
 
 +
* --kernel-config: use the given name located in the kernel source tree (/usr/src/linux by default is taken unless overridden by --kerndir)  
 +
* all: rebuild the kernel image and the initramfs ramdisk image (aside of kernel modules, the ramdisk image contains tools such as BusyBox and some generic startup scripts, depending on options you use on the command line several additional tools like lvm or raid volume management can be incorporated as well).
 +
* --lvm: Includes support for storage using via Logical Volume Management (LVM2) from static binaries, if available to the system. Relevant (static) LVM2 binaries are compiled if they are unavailable. Be sure to install the lvm2 package on your system with emerge lvm2 before enabling this flag.
 +
* --luks: Includes support for Linux Unified Key Setup or LUKS. This will allow you to use a device encrypted by LUKS which contains the root filesystem. On the bootloader, you then set that encrypted device as the value of crypt_root (and real_root shall be the unencrypted device LUKS creates).
 +
* --menuconfig: lets you set options for kernel compile manual
 +
 
 +
The --menuoption will present you the following screen:
 +
[[Image:fqi-024.png|center]]
 +
 
 +
====== default options for unencrypted/encrypted setup ======
 +
 
 +
We advised you above to use a partitioning scheme based on the following file system types:
 +
 
 +
* ext2
 +
* swap
 +
* ext4
 +
* xfs
 +
 
 +
You now need to activate all of them so you can boot your system later, these options can be found at:
 +
 
 +
{{kernelop|title=File systems|desc=
 +
<*>  Second extended fs support
 +
<*>  The Extended 4 (ext4) filesystem
 +
[*]      Ext4 extended attributes (NEW)
 +
[ ]        Ext4 POSIX Access Control Lists (NEW)
 +
[ ]        Ext4 Security Labels (NEW)
 +
[ ]        EXT4 debugging support (NEW)
 +
<*>  XFS filesystem support
 +
[ ]        XFS Quota support (NEW)
 +
[ ]        XFS POSIX ACL support (NEW)
 +
[*]        XFS Realtime subvolume support
 +
[ ]        XFS Debugging support (EXPERIMENTAL) (NEW)}}
 +
 
 +
If you furthermore decided to follow our advice and to use a GPT-Partitioning scheme, which will be your default, you will need to activate it in your kernel by using the following options:
 +
 
 +
{{kernelop|title=File systems,Partition Types|desc=
 +
[*]   Advanced Partition Selection (PARTITION_ADVANCED)
 +
[*]  EFI GUID Partition Support (EFI_PARTITION)}}
 +
 
 +
====== additional encrypted options ======
 +
 
 +
It is very important to add the following parts in your kernel setup, when you used the above GPT or MBR encrypted setup. Under
 +
{{kernelop|title=General setup|desc=
 +
[*]  Initial RAM filesystem and RAM disk (initramfs/initrd) support}}
 +
 
 +
and {{kernelop|title=Device Drivers|desc=
 +
[*] Multiple devices driver support
 +
<*>  Device Mapper Support
 +
<*>      Crypt target support}}
 +
 
 +
and finally {{kernelop|title=Cryptographic API|desc=
 +
<*>  XTS support (EXPERIMENTAL)
 +
 
 +
-*-  AES cipher algorithms}}
 +
 
 +
Finally exit the menuconfig for your kernel and get a coffee.  You have done a good bit of work so far... :)
 +
 
 +
===== manual kernel =====
 +
 
 +
You can use genkernel to automatically compile your kernel, but this tends to create a bloated kernel,  compatible with just about any computer, anyplace, any time.
 +
On the other hand,  you can manually configure and compile your kernel,  to give you complete control,  for the smallest and fastest kernel(s) that you can build for your specific computer.
 +
However,  manual kernel configuration is often called by many users, the hardest step in installing Funtoo.  But it is also very worth learning how to do it.
 +
Be warned that it make take several reconfigurations, compiles and reboots, until you have a working system.  Plus, for the encrypted hdd version,  you will have to do a bit more work than above, but if you have gotten this far,  you should be able to handle it.
 +
 
 +
====== install and config ======
 +
 
 +
First you will have to install the kernel image you selected above. In the following we again use the kernel we think might be the default choice of you, gentoo-sources, but you can feel free to replace it with any of the above ones. So now install your kernel-sources:
 +
 
 +
<pre>
 +
# emerge -avt gentoo-sources
 +
</pre>
 +
 
 +
After answering the above question with Yes,  emerge will download and install the kernel-sources for you. Next you need to set the symlink from /usr/src/linux to the /usr/src/linux-version directory. There are two ways to do so, the default way would be to use the following command sequence:
 +
 
 +
<pre>
 +
# eselect kernel list
 +
# eselect kernel set 1
 +
</pre>
 +
 
 +
The first command will list the kernel or kernels for which you have used emerge to install the corresponding source code packages.  The character * is used to indicate the currently selected default kernel package.  In other words,  the command  <tt> eselect kernel list </tt> will scan and list directories in your <tt> /usr/src directory </tt>,  each named after a different kernel source code.  It will then show with a * the directory currently pointed to by the <tt> /usr/src/linux </tt> link.
 +
The second command is not needed,  as long as the correct kernel source has been selected.  Otherwise, use this command and the number of the corresponding kernel directory, to set your <tt> /usr/src/linux </tt> link.
 +
 
 +
If the  <tt> eselect kernel  </tt> command does not work correctly, please report the failing to the [http://groups.google.com/group/funtoo-dev funtoo-dev mailing list], [http://forums.funtoo.org  Funtoo Forums] or contact us directly in IRC at [irc://irc.freenode.net/funtoo #funtoo].
 +
 
 +
As a workaround or for educational purposes,  you could use the following equivalent commands.  For example,  to make gentoo-sources available for compiling your kernel,  enter:
 +
 
 +
<pre>
 +
# cd /usr/src
 +
# rm linux
 +
# ls
 +
gentoo-sources-3.5.4
 +
# ln -s gentoo-sources-3.5.4 linux
 +
</pre>
 +
 
 +
where gentoo-sources is the directory that the <tt>ls</tt> command above showed you.
 +
 
 +
Now you are nearly ready to configure your kernel.  First switch to a second terminal with <tt>Alt+F2</tt> and execute <tt>lspci</tt> and copy the output,  most importantly the names of the VGA, Ethernet and Network devices currently in your system. Knowing these device names will be needed if you need help for default options at the [http://kmuto.jp/debian/hcl/ Debian GNU/Linux device driver check page]. Some options there aren't in your kernel or may have other names but it is a good source for getting default options help for devices.
 +
[[Image:fqi-025.png|center]]
 +
Now move back to your chrooted system (<tt>Alt+F1</tt>) and start the configure process with
 +
 
 +
<pre>
 +
# cd /usr/src/linux
 +
# make menuconfig
 +
</pre>
 +
 
 +
This will present you a screen similar to the following:
 +
[[Image:fqi-024.png|center]]
 +
start setting the options you know about or the ones the page above gave you. You need to at least set the following options:
 +
 
 +
Here are some more sources you may like to read for configuring your kernel the old fashioned manual way:
 +
 
 +
* [http://kernel-seeds.org/ http://kernel-seeds.org]
 +
* [http://swift.siphos.be/linux_sea/ch07.html http://swift.siphos.be/linux_sea/ch07.html]
 +
* [http://www.gentoo.org/doc/en/kernel-config.xml http://www.gentoo.org/doc/en/kernel-config.xml]
 +
 
 +
====== default options for unencrypted/encrypted setup ======
 +
 
 +
We advised above to use a partitioning scheme based on the following filesystemtypes:
 +
 
 +
* ext2
 +
* swap
 +
* ext4
 +
* xfs
 +
 
 +
You now need to activate all of them so you can boot your system later, these options can be fount at:
 +
 
 +
{{kernelop|File Systems --->|<*>&nbsp;&nbsp;&nbsp;Second extended fs support<br><*>&nbsp;&nbsp;&nbsp;The Extended 4 (ext4) filesystem<br>[*]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext4 extended attributes (NEW)<br>[&nbsp;&nbsp;&nbsp;]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext4 POSIX Access Control Lists (NEW)<br>[&nbsp;&nbsp;&nbsp;]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext4 Security Labels (NEW)<br>[&nbsp;&nbsp;&nbsp;]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EXT4 debugging support (NEW)<br><*>&nbsp;&nbsp;&nbsp;XFS filesystem support<br>[&nbsp;&nbsp;&nbsp;]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XFS Quota support (NEW)<br>[&nbsp;&nbsp;&nbsp;]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XFS POSIX ACL support (NEW)<br>[*]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XFS Realtime subvolume support<br>[&nbsp;&nbsp;&nbsp;]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XFS Debugging support (EXPERIMENTAL) (NEW)}}
 +
 
 +
If you furthermore decided to follow our advice and use a GPT-Partitioning scheme, what will be our default, you need to activate it in your kernel by using the following options:
 +
 
 +
{{kernelop|File Systems ---> (or Enable the block layer --->)<br>&nbsp;&nbsp;&nbsp;Partition Types --->|[*]&nbsp;&nbsp;&nbsp;Advanced Partition Selection (PARTITION_ADVANCED)<br>[*]&nbsp;&nbsp;&nbsp;EFI GUID Partition Support (EFI_PARTITION)}}
 +
 
 +
====== additional encrypted options ======
 +
 
 +
It is very important to add the following parts in your kernel setup, when you used the above GPT or MBR encrypted setup. Under
 +
{{kernelop|General setup --->|[*]&nbsp;&nbsp;&nbsp;Initial RAM filesystem and RAM disk (initramfs/initrd) support}}
 +
 
 +
and under
 +
{{kernelop
 +
|Device Drivers ---><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[*] Multiple devices driver support
 +
|<*>&nbsp;&nbsp;&nbsp;Device Mapper Support<br><*>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Crypt target support}}
 +
 
 +
and finaly under
 +
{{kernelop|-*-&nbsp;&nbsp;&nbsp;Cryptographic API --->|<*>&nbsp;&nbsp;&nbsp;XTS support (EXPERIMENTAL)<br><br>-*-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AES cipher algorithms}}
 +
 
 +
====== building the kernel the manual way ======
 +
 
 +
Now that all the options are set exit <tt>menuconfig</tt> and answer the question about saving your config with <tt>YES</tt>. That already was the hardest part, now bake your kernel.
 +
 
 +
<pre>
 +
# make
 +
# make modules_install
 +
# cp arch/<architecture>/boot/bzImage /boot/bzImage-<versionnumber>
 +
</pre>
 +
 
 +
This code-sequence will need to be explained, the first command <tt>make</tt> will bake your kernel, it will take some time, so feel free to get a coffee. :) if you don't have one available here is one from us |_|). <tt>make modules_install</tt> generates the modules for the kernel and builds them, the third command in the sequence needs to be adjusted by you, if you use a 32bit system replace <architecture> with x86 and for 64bit systems with x86_64, finally replace the <versionnumber>-string with a for you readable and unique versionnumber like <tt>2.6.38-rc7-mykernel-v1</tt> or something like that, then the command copies over your baked kernel to /boot and you are ready to get to the next step....
 +
 
 +
==== Bootloader ====
 +
===== boot-update =====
 +
 
 +
<tt>boot-update</tt> is the default boot-loader configuration tool in funtoo.  You need to install it with
 +
 
 +
<pre>
 +
# emerge -avt boot-update
 +
</pre>
 +
 
 +
This will install boot-update and grub2 for you.  Next you need to configure it.  That is done in <tt>/etc/boot.conf</tt>:
 +
 
 +
<pre>
 +
# vim /etc/boot.conf
 +
</pre>
 +
 
 +
/etc/boot.conf will look somewhat like the following:
 +
 
 +
<pre>
 +
boot {
 +
generate grub
 +
default "Funtoo Linux 64-bit"
 +
timeout 10
 
}
 
}
  
function doexpense(mybalance) {
+
display {
    mybalance[curmonth,$2] -= amount
+
gfxmode 1440x900
    mybalance[0,$2] -= amount       
+
#background /boot/
 
}
 
}
  
function dotransfer(mybalance) {
+
color {
    mybalance[0,$2] -= amount
+
normal cyan/black
    mybalance[curmonth,$2] -= amount
+
highlight black/cyan
    mybalance[0,$3] += amount
+
}
    mybalance[curmonth,$3] += amount
+
 
 +
default {
 +
scan /boot
 +
kernel bzImage[-v] kernel[-v] vmlinuz[-v]
 +
initrd initramfs[-v]
 +
 
 +
# root=auto will cause the parameter
 +
# from your /etc/fstab. rootfstype=
 +
 
 +
params video=vesafb root=auto rootfstype=auto
 +
 
 +
# an alternate graphics mode can be set
 +
# default is inherited from display:
 +
 
 +
# gfxmode 1024x768
 +
}
 +
 
 +
"altboot" {
 +
params += init=/bin/bash
 +
}
 +
 
 +
"Funtoo Linux 64-bit gpt" {
 +
        kernel bzImage[-v]
 +
}
 +
 
 +
"Funtoo Linux genkernel" {
 +
        kernel kernel[-v]
 +
        initrd initramfs[-v]
 +
        params += real_root=auto
 +
}
 +
 
 +
"Funtoo Linux 64-bit encrypted gpt/mbr manual kernel" {
 +
kernel bzImage[-v]
 +
initrd /initramfs.cpio.gz
 +
params += enc_root=/dev/sda3 lvm luks root=/dev/mapper/vg-root rootfstype=ext4 resume=swap:/dev/mapper/vg-swap quiet
 
}
 
}
 
</pre>
 
</pre>
When doincome() or any of the other functions are called, we record the transaction in two places -- mybalance[0,category] and mybalance[curmonth, category], the entire year's category balance and the current month's category balance, respectively. This allows us to easily generate either an annual or monthly breakdown of income/expenditures later on.
 
  
If you look at these functions, you'll notice that the array referenced by mybalance is passed in by reference. In addition, we also refer to several global variables: curmonth, which holds the numeric value of the month of the current record, $2 (the expense category), $3 (the income category), and amount ($7, the dollar amount). When doincome() and friends are called, all these variables have already been set correctly for the current record (line) being processed.
+
If you decided to do a manual kernel,  with an encrypted HDD, you will need to read the next section after you made the changes to your config. If you decided to use genkernel or a manual kernel with unencrypted HDD, all is OK and it is now safe for you to go to the [[Funtoo Quick Install#setting up grub2|Grub2 setup]].
 +
 
 +
====== encrypted disk with manual kernel ======
 +
 
 +
As you decided to make an encrypted disk setup with a manual kernel, you need to instal slashbeast's [http://github.com/slashbeast/better-initramfs better-initrmafs]. It is very simple to do.  First clone the git-repository. If you aren't confident with git, feel free to have a look at our [[Git Guide]].
  
=== The main block ===
 
Here's the main code block that contains the code that parses each line of input data. Remember, because we have set FS correctly, we can refer to the first field as $1, the second field as $2, etc. When doincome() and friends are called, the functions can access the current values of curmonth, $2, $3 and amount from inside the function. Take a look at the code and meet me on the other side for an explanation.
 
 
<pre>
 
<pre>
{
+
# install -d /root/.git
    curmonth=monthdigit(substr($1,4,3))
+
# cd /root/.git
    amount=$7
+
# git clone git://github.com/slashbeast/better-initramfs.git
     
+
# cd better-initramfs
    #record all the categories encountered
+
# git checkout v0.3
    if ( $2 != "-" )
+
# less README.rst
        globcat[$2]="yes"
+
# echo "sys-apps/busybox static" >> /etc/portage/package.use/busybox && echo "sys-fs/cryptsetup static" >> /etc/portage/package.use/cryptsetup && echo "sys-fs/lvm2 static" >> /etc/portage/package.use/lvm2
    if ( $3 != "-" )
+
# emerge -avt busybox cryptsetup lvm2
        globcat[$3]="yes"
+
# make
 +
>>> New better-initramfs is not backward compatible, read ChangeLog file.
  
    #tally up the transaction properly
+
>>> Preparing binary files...
    if ( $2 == "-" ) {
+
>>> Adding /bin/busybox...
        if ( $3 == "-" ) {
+
>>> Adding /sbin/cryptsetup...
            print "Error: inc and exp fields are both blank!"
+
>>> Adding /sbin/lvm.static...
            exit 1
+
>>> Building image...
        } else {
+
>>> initramfs.cpio.gz is ready.
            #this is income
+
# cp initramfs.cpio.gz /boot
            doincome(balance)
+
            if ( $5 == "Y" )
+
                doincome(balance2)
+
        }
+
    } else if ( $3 == "-" ) {
+
        #this is an expense
+
        doexpense(balance)
+
        if ( $5 == "Y" )
+
            doexpense(balance2)
+
    } else {
+
        #this is a transfer
+
        dotransfer(balance)
+
        if ( $5 == "Y" )
+
            dotransfer(balance2)
+
    }                       
+
}
+
 
</pre>
 
</pre>
In the main block, the first two lines set curmonth to an integer between 1 and 12, and set amount to field 7 (to make the code easier to understand). Then, we have four interesting lines, where we write values into an array called globcat. globcat, or the global categories array, is used to record all those categories encountered in the file -- "inco", "misc", "food", "util", etc. For example, if $2 == "inco", we set globcat["inco"] to "yes". Later on, we can iterate through our list of categories with a simple "for (x in globcat)" loop.
 
  
On the next twenty or so lines, we analyze fields $2 and $3, and record the transaction appropriately. If $2=="-" and $3!="-", we have some income, so we call doincome(). If the situation is reversed, we call doexpense(); and if both $2 and $3 contain categories, we call dotransfer(). Each time, we pass the "balance" array to these functions so that the appropriate data is recorded there.
+
Now you are ready to setup grub2. Just go to the next section.
  
You'll also notice several lines that say "if ( $5 == "Y" ), record that same transaction in balance2". What exactly are we doing here? You'll recall that $5 contains either a "Y" or a "N", and records whether the transaction has been posted to the account. Because we record the transaction to balance2 only if the transaction has been posted, balance2 will contain the actual account balance, while "balance" will contain all transactions, whether they have been posted or not. You can use balance2 to verify your data entry (since it should match with your current account balance according to your bank), and use "balance" to make sure that you don't overdraw your account (since it will take into account any checks you have written that have not yet been cashed).
+
======= Updating better-initramfs =======
 +
 
 +
As the [http://github.com/slashbeast/better-initramfs better-initrmafs] project isn't controlled at the moment by an ebuild, you will need to take care of updating it by yourself, but it is very easy to do so:
  
=== Generating the report ===
 
After the main block repeatedly processes each input record, we now have a fairly comprehensive record of debits and credits broken down by category and by month. Now, all we need to do is define an END block that will generate a report, in this case a modest one:
 
 
<pre>
 
<pre>
END {
+
# git checkout master
    bal=0
+
# git pull
    bal2=0       
+
# less ChangeLog
    for (x in globcat) {
+
# git checkout vx.x
        bal=bal+balance[0,x]
+
# make
        bal2=bal2+balance2[0,x]   
+
    }
+
    printf("Your available funds: %10.2f\n", bal)
+
    printf("Your account balance: %10.2f\n", bal2)       
+
}
+
 
</pre>
 
</pre>
This report prints out a summary that looks something like this:
+
where x.x is a version announced in the ChangeLog. At the moment the stable is 0.3.
 +
 
 +
====== setting up grub2 ======
 +
 
 +
This step is easy.  It is done with two commands;
 +
 
 
<pre>
 
<pre>
Your available funds:    1174.22
+
# grub-install --no-floppy /dev/sda
Your account balance:    2399.33
+
# boot-update
 
</pre>
 
</pre>
In our END block, we used the "for (x in globcat)" construct to iterate through every category, tallying up a master balance based on all the transactions recorded. We actually tally up two balances, one for available funds, and another for the account balance. To execute the program and process your own financial goodies that you've entered into a file called '''mycheckbook.txt''', put all the above code into a text file called '''balance''' and do <span style="color:green;">"chmod +x balance"</span>, and then type <span style="color:green;">"./balance mycheckbook.txt"</span>. The balance script will then add up all your transactions and print out a two-line balance summary for you.
 
  
=== Upgrades ===
+
A successful run of boot-update might will look like this:
I use a more advanced version of this program to manage my personal and business finances. My version (which I couldn't include here due to space limitations) prints out a monthly breakdown of income and expenses, including annual totals, net income and a bunch of other stuff. Even better, it outputs the data in HTML format, so that I can view it in a Web browser :) If you find this program useful, I encourage you to add these features to this script. You won't need to configure it to record any additional information; all the information you need is already in balance and balance2. Just upgrade the END block, and you're in business!
+
  
I hope you've enjoyed this series. For more information on awk, check out the resources listed below.
+
<pre>
 +
boot-update 1.5.2 / Copyright 2009-2011 Funtoo Technologies
 +
 
 +
[use option "-l" for license info, "-h" for help]
 +
 
 +
* Generating config for grub...
 +
 
 +
DEFAULT > Funtoo Linux 64-bit - bzImage-2.6.39-rc7-git-a2b9c1f
 +
          Funtoo Linux 64-bit - bzImage-2.6.39-rc7-git-446cc63
 +
          Funtoo Linux 64-bit - bzImage-2.6.39-rc7-git-df8d06a
 +
 
 +
* WARN : multiple matches found for default "Funtoo Linux 64-bit" - most recent used.
 +
* Completed successfully with warnings.
 +
</pre>
 +
 
 +
===== Extlinux =====
 +
 
 +
For Extlinux you will find a guide for setup at [[Extlinux]].
 +
 
 +
== finalize Setup ==
 +
 
 +
=== Necessary System Tools ===
 +
 
 +
As some tools are providing the same functionality, it is up to you to choose which ones you like to use. The next sections are giving you an overview of tools you might like to use and install, but all are optional.
 +
 
 +
==== System Logger ====
 +
 
 +
Linux and Unix have an excellent history of logging capabilities, if you want you can log from only special stuff up to everything that happens on your system in logfiles, for that behavior is a system logger the reason.
 +
 
 +
There are several in our repository from which you can choose:
 +
* sysklogd, which is a traditional set of system logging daemons,
 +
* syslog-ng, which is an advanced system logger and
 +
* metalog, which is a highly-configurable system logger,
 +
* rsyslog, seems to be a popular choice, default syslog of Fedora, RHEL, openSUSE, Debian and Ubuntu
 +
* there might be others available too, but at the moment we aren't aware of them.
 +
 
 +
We advice you to install next to sysklogd or syslog-ng the logrotate tool, as those system loggers don't provide a rotation machanism for the log files.
 +
 
 +
Just install the desired one like the example shows:
 +
 
 +
<pre>
 +
# emerge syslog-ng
 +
# rc-update add syslog-ng default
 +
</pre>
 +
 
 +
==== Optional: Cron Daemon ====
 +
 
 +
Although this is optional it is in our opinion very handy and wise to install one. But you might ask yourself now "What the hell is a cron daemon?" A cron daemon just executes scheduled commands, so you see it can be very handy if you need to execute commands regularly.
 +
 
 +
In our tree there are three possible cron daemons; dcron, fcron and vixie-cron. We would like to advise you to use fcron, but it depends on what you like. also vixie-cron might be easier, as you don't need to execute <tt>crontab /etc/crontab</tt>, fcron might be more powerful.
 +
 
 +
<pre>
 +
# emerge fcron
 +
# rc-update add fcron default
 +
# crontab /etc/crontab
 +
</pre>
 +
 
 +
==== Optional: File Indexing ====
 +
 
 +
If you like to index your files for a fast search, you need to install mlocate so you can use the locate command to quickly search for them:
 +
 
 +
<pre>
 +
# emerge mlocate
 +
# updatedb
 +
</pre>
 +
 
 +
==== File System Tools ======
 +
 
 +
As we used some special filesystems above you need to at least install xfsprogs, but there might be some others too, the following table gives you an overview:
 +
{| border="0" cellpadding="4"
 +
|-
 +
! File System !! Tool !! install command !! needed
 +
|-
 +
| XFS
 +
| xfsprogs
 +
| emerge xfsprogs
 +
| X
 +
|-
 +
| JFS
 +
| jfsprogs
 +
| emerge jfsprogs
 +
|
 +
|-
 +
| reiserfs
 +
| reiserfsprogs
 +
| emerge reiserfsprogs
 +
|
 +
|-
 +
| btrfs
 +
| btrfs-progs
 +
| emerge btrfs-progs
 +
|
 +
|-
 +
|}
 +
 
 +
=== Networkconfig ===
 +
 
 +
==== The Easy (Dynamic) Way ====
 +
 
 +
When configuring your network, one option is to skip traditional network configuration and simply rely on DHCP. This is by far the simplest method of configuring your network. If you are on a wired network, no other steps are typically required beyond enabling a DHCP client, and Funtoo Linux includes dhcpcd 5.x by default. To enable DHCP at system startup, you would add dhcpcd to your default runlevel as follows:
 +
 
 +
<pre>
 +
# rc-update add dhcpcd default
 +
</pre>
 +
 
 +
{{note|If your going to use a third party package such as Network Manager or Wicd to manage your network then do not add dhcpcd to any runlevel. These packages handle DHCP for you.}}
 +
 
 +
==== The Modular Way ====
 +
 
 +
DHCP isn't always an option, and for these situations, Funtoo Linux offers its own modular, template-based network configuration system. This system offers a lot of flexibility for configuring network interfaces, essentially serving as a "network interface construction kit." This system can be used by itself, or even combined with dhcpcd -- if you limit dhcpcd to only manage certain network interfaces.
 +
 
 +
Here are the key components of the template-based network configuration system:
 +
<ol style="list-style-type: decimal;">
 +
<li><p><tt>/etc/init.d/netif.lo</tt> -- An init script that configures the localhost interface.</p></li>
 +
<li><p><tt>/etc/netif.d</tt> -- This is a directory that contains various network configuration templates. Each of these templates is focused on configuring a particular type of network interface, such as a general static IP-based interface, a bridge interface, a bond interface, etc.</p></li>
 +
<li><p><tt>/etc/init.d/netif.tmpl</tt> -- This is the master init script for the template-based network configuration system. New interfaces are added to your system by creating symbolic links to this file in /etc/init.d.</p></li></ol>
 +
 
 +
So, if you wanted to use this system to configure eth0 with a static IP address, you would create a netif.eth0 symlink to netif.tmpl as follows:
 +
<pre>
 +
# cd /etc/init.d
 +
# ln -s netif.tmpl netif.eth0
 +
</pre>
 +
 
 +
Then, you would create an /etc/conf.d/netif.eth0 configuration file that would specify which template to use from the /etc/netif.d directory:
 +
<pre>
 +
template="interface"
 +
ipaddr="10.0.1.200/24"
 +
gateway="10.0.1.1"
 +
nameservers="10.0.1.1 10.0.1.2"
 +
domain="funtoo.org"
 +
</pre>
 +
 
 +
To complete our static IP network configuration we would need to:
 +
<pre>
 +
# rc-update add netif.eth0 default
 +
</pre>
 +
 
 +
When configuring your own static network interface, one of ipaddr or ipaddrs is required and should specify the IP address(es) to configure for this interface, in "a.b.c.d/netmask" format. Optional parameters include gateway, which defines a default gateway for your entire network, and if set should specify the gateway's IP address. In addition, domain and nameservers (space-separated if more than one) can be used to specify DNS information for this interface.
 +
 
 +
===== Configuration Variables =====
 +
 
 +
====== Interface Variables ======
 +
 
 +
The following variables are supported by the interface and bridge templates:
 +
 
 +
* ipaddr or ipaddrs: specify IPv4 or IPv6 address(es) for the interface. IP addresses should be specified in "IP/netmask" format, such as "10.0.0.1/24". Multiple IP addresses can be specified like this:
 +
<pre>
 +
ipaddrs="10.0.0.1/24 10.0.0.2/24"
 +
</pre>
 +
 
 +
Note that in some cases, you may choose to not specify ipaddr or ipaddrs for a bridge template. That is allowed. If you don't want to specify an IP address for a regular interface, you can choose to use the interface template without an IP address specified in the config, or use the interface-noip template instead, for the sake of clarity.
 +
 
 +
Also note that if you specify multiple IP addresses, ifconfig will only show the first IP address. To view all IP addresses associated with the interface, use the ip addr show command.
 +
 
 +
===== General Variables =====
 +
 
 +
The following variables are enabled by default for all network scripts, and if specified will trigger a corresponding configuration action:
 +
nameservers: Set DNS nameservers using OpenResolv. Specify multiple nameservers like this: "1.2.3.4 1.2.3.5 1.2.3.6"
 +
* domain: Set DNS domain using OpenResolv.
 +
* gateway: Define a default IP gateway.
 +
* route: Specify a semi-colon delimited list of routes to apply when this interface is brought up. Will be appended to ip route add.
 +
* mtu: Set Maximum Transmit Unit for the interface
 +
* slaves: Set slave interfaces of this interface (for bridges, etc.) All slaves will automatically be depended upon, and will also automatically have their mtu set to that of the current interface, if an mtu is specified for the current interface. This setting is required for the bond template and optional for the bridge template.
 +
 
 +
==== VLAN Variables ====
 +
 
 +
VLAN support is enabled by default for all network configuration scripts. If a network script has a name in the format netif.ethX.Y, then it is assumed to be a VLAN interface referencing trunk ethX and VLAN ID Y. If you desire a custom name for your VLAN interface, you can name your interface whatever you'd like and specify the following variables in your interface config [file: file:]
 +
* trunk: VLAN trunk interface, e.g. "eth0"
 +
* vlan: VLAN id, e.g. "32"
 +
 
 +
==== OpenResolv and resolv.conf ====
 +
 
 +
For the network configuration above, OpenResolv will be used to set DNS information when the netif.eth0 is brought up. The OpenResolv framework will add entries to /etc/resolv.conf, and will also handle removing these entries when the interface is brought down. This way, /etc/resolv.conf should always contain current information and should not need to be manually edited by the system administrator. dhcpcd will use OpenResolv for updating system DNS information as well.
 +
 
 +
==== Network-Dependent Services ====
 +
 
 +
One important difference between Gentoo Linux and Funtoo Linux is that, in Funtoo Linux, network-dependent services only strictly depend on netif.lo. This means that if another network service requires an interface to be up, such as samba requiring eth0, then the system administrator must specify this relationship by adding the following line to /etc/conf.d/samba:
 +
<pre>
 +
rc_need="netif.eth0"
 +
</pre>
 +
 
 +
This will have the effect of ensuring that netif.eth0 is started prior to samba and that samba is stopped prior to stopping netif.eth0.
 +
 
 +
Many network services, especially those that listen on all network intefaces, don't need an rc_need line in order to function properly. Avoiding the use of rc_need when required will optimize boot times and allow more network services to remain available when network interfaces are brought up and down by the system administrator.
 +
 
 +
 
 +
==== Multiple Network Configurations ====
 +
 
 +
For information on how to have multiple, independent network configurations, please see Stacked Runlevels.
 +
 
 +
===== Alternate Configs =====
 +
 
 +
If you need to run the same service with different configuration parameters depending upon runlevel, then you'll be happy to know that you can specify runlevel-specific conf.d files by appending a . <runlevel> suffix. In this particular example, we could imagine a situation where we had two child runlevels named home and work:
 +
<pre>
 +
/etc/conf.d/netif.eth0.home
 +
/etc/conf.d/netif.eth0.work
 +
</pre>
 +
Note that this feature works for all init scripts, not just network configuration scripts.
 +
 
 +
===== Interface Renaming =====
 +
 
 +
Funtoo network scripts now support interface renaming, so you can create an interface called lan if you would like. To so this, simply specify the MAC address of the interface you would like to rename using the macaddr variable:
 +
macaddr="00:15:17:19:b6:a3"
 +
If this MAC address is part of the netif.lan configuration file, then when this interface starts, whatever interface currently has the MAC address of 00:15:17:19:b6:a3 (i.e. eth5) will be renamed to lan prior to the interface being brought up, and will show up in ifconfig and ip commands as being an interface named lan.
 +
 
 +
===== Basic VLAN Configuration =====
 +
 
 +
The standard interface template supports VLANs. To use VLAN support, first configure the trunk interface using the interface-noip template. Assuming eth1 is trunked, you would create the file /etc/conf.d/netif.eth1 with the following contents:
 +
<pre>
 +
template="interface-noip"
 +
</pre>
 +
 
 +
Then, create a network interface symlink for the trunk and add it to your default runlevel:
 +
<pre>
 +
# cd /etc/init.d
 +
# ln -s netif.tmpl netif.eth1
 +
# rc-update add netif.eth1 default
 +
</pre>
 +
 
 +
Now, assuming you wanted to configure a VLAN of 32, you would create a config file named /etc/conf.d/netif.eth1.32 that looks something like this:
 +
<pre>
 +
template="interface"
 +
ipaddr="1.2.3.4/24"
 +
gateway="1.2.3.1"# etc...
 +
</pre>
 +
 
 +
Then, create a VLAN network interface symlink and add it to your default runlevel:
 +
<pre>
 +
# cd /etc/init.d
 +
# ln -s netif.tmpl netif.eth1.32# rc-update add netif.eth1.32 default
 +
</pre>
 +
 
 +
The Funtoo network configuration scripts will automatically recognize the filename netif.eth1.32 as being VLAN 32 of trunk interface netif.eth1.
 +
 
 +
When the VLAN interface is brought up, it will be named eth1.32.
 +
 
 +
===== Custom VLAN Names =====
 +
 
 +
However, sometimes you may want to turn off automatic file-based VLAN naming and give your VLAN interface a custom name, such as mgmt. To do this, you would set up the trunk interface in the exact same way as described above, but instead of creating a netif.eth1.32 interface, you would create a netif.mgmt interface, and specify vlan and trunk in the /etc/conf.d/netif.mgmt config file, as follows:
 +
<pre>
 +
template="interface"
 +
vlan="32"
 +
trunk="eth1"
 +
ipaddr="1.2.3.4/24"
 +
gateway="1.2.3.1"
 +
# etc...
 +
</pre>
 +
 
 +
When you specify trunk and vlan in the interface config file, filename-based auto-detecting of VLAN ID and trunk is disabled. Both trunk and vlan must be specified -- you can't specify just one.
 +
 
 +
Then you would simply create a VLAN network interface symlink for netif.mgmt:
 +
<pre>
 +
# cd /etc/init.d
 +
# ln -s netif.tmpl netif.mgmt
 +
# rc-update add netif.mgmt default
 +
</pre>
 +
 
 +
When the VLAN interface is brought up, it will be named mgmt.
 +
 
 +
==== More Complex Network Configuration ====
 +
 
 +
If the standard templates don't work for your needs, simply create a new template -- I recommend starting from the interface template for most things:
 +
<pre>
 +
# cd /etc/netif.d
 +
# cp interface custom
 +
</pre>
 +
 
 +
You can now call whatever commands you need to /etc/netif.d/custom. The following shell functions can be defined in a network script:
 +
 
 +
==== netif_create ====
 +
 
 +
In netif_create, you should call any commands to create the interface if it does not yet exist.
 +
 
 +
==== netif_depend ====
 +
 
 +
In netif_depend, you can define dependencies, using the functions need and use.
 +
 
 +
==== netif_pre_up ====
 +
 
 +
In netif_pre_up, you can define network configuration actions to perform prior to bringing the interface up. You can also ensure certain variables are specified by calling require var1 [var2...] here.
 +
 
 +
==== netif_post_up ====
 +
 
 +
In netif_post_up, you can define network configuration actions to perform after bringing the interface up.
 +
 
 +
==== netif_pre_down ====
 +
 
 +
In netif_pre_down, you can define network configuration actions to perform prior to bringing the interface down.
 +
 
 +
==== netif_post_down ====
 +
 
 +
In netif_post_down, you can define network configuration actions to perform after bringing the interface down.
 +
 
 +
==== netif_destroy ====
 +
 
 +
In netif_destroy, you can call any commands necessary to destroy/delete the interface if it is dynamic in nature (tun/tap, etc.)
 +
 
 +
==== How It Works ====
 +
 
 +
You do not specify a function for actually bringing up the interface, because the template-based system does this for you. The template-based system also performs all normal actions for required for bringing an interface down, so only need to specify atypical actions that must be performed - such as removing child interfaces or destroying a bridge using brctl.
 +
 
 +
When you create your own network configuration template, the following capabilities are available for use automatically, as long as the appropriate variables are set in the /etc/conf.d/netif.<ifname> file,, without requiring any explicit steps on your part:
 +
* DNS configuration using domain and nameservers config settings. OpenResolv is used automatically.
 +
* VLAN configuration using auto-naming (netif.ethX.Y) or via custom naming with trunk and vlan config settings.
 +
* Default gateway and route configuration using the gateway and route settings.
 +
* MTU configuration using the mtu setting.
 +
* Auto-depend (and auto-MTU configuration) of slave interfaces specified using slaves setting.
 +
* Renaming of existing network interface (specify MAC address using macaddr setting).
 +
 
 +
To take advantage of this functionality, simply enable the appropriate variables.
 +
 
 +
All other necessary network configuration and dependency behavior should be defined using the netif_-prefix functions described above.
 +
 
 +
==== Wireless Configuration ====
 +
 
 +
Wireless network configuration requires additional steps to the ones outlined above.
 +
 
 +
For wireless networks, you will need to enable wireless extensions in your kernel, the appropriate wireless modules, and emerge wireless-tools:
 +
<pre>
 +
# emerge wireless-tools
 +
</pre>
 +
 
 +
I also recommend you emerge wpa_supplicant. wpa_supplicant implements modern WPA/WPA2 wireless link-layer encryption, which is necessary for connecting to most modern password-protected wireless networks:
 +
 
 +
<pre>
 +
# emerge wpa_supplicant
 +
</pre>
 +
 
 +
After emerging, add to your default runlevel as follows:
 +
<pre>
 +
# rc-update add wpa_supplicant default
 +
</pre>
 +
 
 +
==== 802.11 Passphrases ====
 +
 
 +
The only remaining step is to use the wpa_passphrase utility to store hashed keys (passwords) that wpa_supplicant can use to connect to your favorite wireless networks. This is done as follows:
 +
<pre>
 +
# wpa_passphrase jims-netgear >> /etc/wpa_supplicant/wpa_supplicant.conf
 +
<enter your passphrase>
 +
</pre>
 +
 
 +
Now, when wpa_supplicant encounters an SSID of jims-netgear, it will use the password you entered to authenticate with this access point.
 +
 
 +
At this point, ensure that dhcpcd has been enabled in your current runlevel and type rc to start everything up. wpa_supplicant should be able to automatically associate with SSIDs in its config file, at which point dhcpcd will take over and acquire an IP address from a DHCP server. This should all happen seamlessly. Use the iwconfig command to see if you have successfully associated with an access point.
 +
 
 +
 
 +
 
 +
==== Wireless Firmware ====
 +
 
 +
Many wireless adapters will now have everything they need to work. However, if you have an Intel wireless adapter, then you may need to install the proper microcode for your device in addition to ensuring that the proper Intel Wireless kernel drivers are available. For my Intel Corporation PRO/Wireless AGN [Shiloh] Network Connection, I need to do the following:
 +
<pre>
 +
# emerge net-wireless/iwl5000-ucode
 +
</pre>
 +
 
 +
udev (running by default) and the Linux kernel firmware loader support (CONFIG_FW_LOADER) will automatically load the microcode when needed.
 +
 
 +
Note that Gentoo and Funtoo provide different versions of the Intel microcode because the version you need will depend on the kernel you are using. For my RHEL5-based kernel, I had emerge an older version of the microcode to match what my kernel wireless driver was expecting by typing:
 +
# emerge =net-wireless/iwl5000-ucode-5.4.0.11
 +
 
 +
This installed this file iwlwifi-5000-1.ucode which was required by my RHEL5-based kernel. Just typing emerge net-wireless-iwl5000-ucode installed iwlwifi-500-2.ucode, which my kernel could not use. Before I had the right version of the microcode, I saw an error like this when I viewed the kernel messages by typing dmesg:
 +
iwl5000: iwlwifi-5000-1.ucode firmware file req failed: Reason -2
 +
 
 +
This error message generally means "I can't find this file iwlwifi-5000-1.ucode that I'm looking for in /lib/firmware." With the proper firmware in place, then the wireless driver will be happy and wpa-supplicant can then bring the wireless interface up.
 +
 
 +
=== Set your root password ===
 +
 
 +
It's imperative that you set your root password before rebooting:
 +
<pre>
 +
# passwd
 +
</pre>
 +
 
 +
=== Create a user account ===
 +
 
 +
Logging in as root is a bad idea on a Linux system. Before rebooting, create a user account for everyday use. Adjust the groups in the example below to match your needs. Some of them may not exist yet on your system. Replace '<user_name>' with the name your going to use for your everyday user. The '-m' option instructs useradd to create a home directory for your user. See the useradd manpage for more info.
 +
<pre>
 +
useradd -m -G audio,cdrom,cdrw,floppy,usb,users,video,wheel -s /bin/bash <user_name>
 +
</pre>
 +
 
 +
Don't forget to set a password for your new user:
 +
<pre>
 +
passwd <user_name>
 +
</pre>
 +
 
 +
=== Verify boot time services ===
 +
 
 +
You should verify that all of your needed services have been added to the appropriate runlevel.
 +
<pre>
 +
eselect rc list | less
 +
</pre>
 +
 
 +
Scroll though the list and check. Example of things you might need to add:
 +
* lvm if you use logical volumes
 +
* Your system logger if you installed one
 +
* hibernate-cleanup if you use tuxonice
 +
* iptables
 +
* dbus
 +
 
 +
Add anything you need with the following command:
 +
<pre>
 +
eselect rc add <script> <runlevel>
 +
</pre>
 +
 
 +
=== First boot ===
 +
 
 +
Now is the time to leave chroot, to unmount Funtoo Linux partitions and files and to restart your PC. If you installed GRUB, you will get an option to launch Funtoo Linux. Otherwise you will get to your already installed Linux and you will have to update your GRUB menu.
 +
 
 +
Leave the chroot, change directory to /, and unmount your funtoo partitions. Adjust the unmount command to match your setup
 +
<pre>
 +
exit
 +
cd /
 +
umount /mnt/funtoo/home /mnt/funtoo/boot /mnt/funtoo/dev /mnt/funtoo/proc /mnt/funtoo/usr/portage /mnt/funtoo
 +
</pre>
 +
 
 +
{{fancynote|In case of LVM2 also: <tt>swapoff /dev/mapper/vg-swap</tt>, <tt>vgchange -a n</tt> , if not You will see: Device dmcrypt_root is busy. In case of luks: <tt>cryptsetup luksClose dmcrypt_root</tt> to close the container.}}
 +
 
 +
 
 +
Restart
 +
<pre>
 +
shutdown -r now
 +
</pre>
  
== Resources ==
+
== What's next ==
* Read Daniel's other awk articles on Funtoo: Awk By Example, [[Awk by example, Part1|Part 1]] and [[Awk by example, Part2|Part 2]].
+
* [[Funtoo Linux First Steps]]
* If you'd like a good old-fashioned book, [http://www.oreilly.com/catalog/sed2/ O'Reilly's sed & awk, 2nd Edition] is a wonderful choice.
+
* Be sure to check out the [http://www.faqs.org/faqs/computer-lang/awk/faq/ comp.lang.awk FAQ]. It also contains lots of additional awk links.
+
* Patrick Hartigan's [http://sparky.rice.edu/~hartigan/awk.html awk tutorial] is packed with handy awk scripts.
+
* [http://www.tasoft.com/tawk.html Thompson's TAWK Compiler] compiles awk scripts into fast binary executables. Versions are available for Windows, OS/2, DOS, and UNIX.
+
* [http://www.gnu.org/software/gawk/manual/gawk.html The GNU Awk User's Guide] is available for online reference.
+
  
[[ Category:Linux Core Concepts ]]
+
[[Category:HOWTO]]
[[Category:Articles]]
+
[[Category:Install]]
 +
[[Category:Tutorial]]

Latest revision as of 07:05, 21 February 2014

Note: If you want to do a standard Funtoo Linux installation, I recommend you use the shorter, official Funtoo Linux Installation Instructions instead. -Daniel

Contents


[edit] Introduction

This HowTo aims to give the experienced GNU/Linux User a quick way to install Funtoo Linux in a nice and fast way. Also we will give you all the necessary steps for installing Funtoo GNU/Linux in this guide, but we won't go deeper into the details of them as need

There are two ways of installing Funtoo GNU/Linux on your PC:

  1. using an already installed GNU/Linux System or
  2. using a LiveCD

If you plan to use a LiveCD, we recommend you to use SystemRescueCd.

All the commands in this guide are performed as "root", unless we indicate it otherwise.

This HowTo will cover the following four setups:

  1. a standard Installation (MBR, HDD not encrypted),
  2. a standard secure Installation (MBR, HDD encrypted),
  3. a modern Installation (GPT/GUID partition table, HDD not encrypted) and
  4. a modern secure Installation (GPT/GUID partition table, HDD encrypted).

These four approaches have the following Pros and Cons:


Setup Pro Contra
1
  • Easy method mostly used by all distributions
  • Well documented everywhere
  • Time saving method
  • No special EFI-partition needed
  • Dualbootable with Microsoft® Windows™
  • Partition table limited 4 primary ones only
  • Needs special 4th partition for more than 4 partitions
  • HDD not encrypted, can easily be cloned
2
  • Easy method mostly used by all distributions
  • Well documented everywhere
  • No special EFI-partition needed
  • HDD encrypted
  • Dualbootable with Microsoft® Windows™
  • Logical volume groups for GNU/Linux
  • Partition table limited 4 primary ones only
  • Need special 4th partition for more than 4 partitions
  • Needs lot of time for preparing the HDD to be encrypted
3
  • Easy method but nearly not used by other distributions
  • No special partiton needed for more than 4 partitions
  • Time saving method
  • Need special EFI-partition for boot-manager
  • Special kernel attributes are needed
  • Not compatible with Microsoft® Windows™
  • Not supported on all platforms especially for the system volume
  • HDD not encrypted, can easily be cloned from other linux systems
4
  • Easy method but nearly not used by other distributions
  • No special partition needed for more than 4 partitions
  • HDD encrypted
  • Logical volume groups
  • Need special EFI-partition for boot-manager
  • Special kernel attributes are needed
  • Not compatible with Microsoft® Windows™
  • Not supported on all platforms especially for the system volume
  • Needs lot of time for preparing the HDD to be encrypted

With the help of the the above table you should be able to select your future Hard Disk (HDD) partitioning scheme. In the further guide we will go through every single step for all four schemes.

For booting your old/other GNU/Linux System we won't give you a special detailed howto guide, as you should know how to do so, as concerning the booting with SystemRescueCd, we will give you a short step-by-step guide on how to boot up the system.

This guide will only be split into subparts for the installation process if concerning the four above mentioned steps, here the split points will be MBR vs. GPT/GUID-partitioning and encrypted vs. unencrypted HDD. So be aware of these parts if you want to use them.

[edit] Booting the Installation System

[edit] Booting old/other GNU/Linux

This step is really simple, as you know your old GNU/Linux System and you need simply start your Computer, select in the boot-loader your GNU/Linux System, let it start up, log in as always and start a root-terminal.

[edit] Booting with SystemRescueCd

First step is to download SystemRescueCd, an overview of the actual version can be found at http://www.sysresccd.org/Download, just follow there the link to the Sourceforge Download, you will download then about 300 MB to your HDD. If finished burn this ISO-image with your favorite burning tool like burn-cd, bashburn, K3B, GNOMEbaker on a GNU/Linux Box or NERO Burning ROM, CDBurnerXP Pro, and many more on a Microsoft® Windows™ box.

Fqi-001.png

Next insert this CD into your CD-ROM-Drive and boot up the PC with it where you want to install Funtoo GNU/Linux. Make sure you boot from the CD when booting. The Booting process with SystemRescueCd will follow the next steps:

  1. Selecting your Kernel to boot SystemRescueCd with:
Fqi-002.png

In that screen you will be greeted with all the power of SystemRescueCd, depending on your CPU we use the boot option 1) for a 32-bit CPU or a 64-bit CPU that should run in 32-bit mode and 6) for a 64-bit CPU in 64-bit mode. If this boot option fails, use the boot option A) or B), will will lead to the following screen:

Fqi-003.png

That menu will give you more boot options. If you select 1. here, it would be the same kernel option like in the previous screen 1) and 6). The next step is to select your keyboard layout for installation.

  1. Selecting your Installation Keyboard Layout
Fqi-004.png

That step requires a bit of your atention, as it only gives you 20 seconds time to choose your keyboard layout, if you are OK with the US keymap, just press Enter to accept the default setting.

  1. Being ready

Seconds later SystemRescueCd welcomes you wit a short message and is ready fo you to be used to perform your installation.

Fqi-005.png

[edit] HDD Preparation

As mentioned earlier in this guide we cover four different installation variations, the could be displayed in an installation matrix as below:

MBR GPT
unencrypted See MBR See GPT/GUID partition table
encrypted See MBR See GPT/GUID partition table

If you are going to plan to install Funtoo GNU/Linux on a machine where another O/S is already installed, you have to make some free space available on your HDD in order to do so. A resize of most existing filesystems can be done with SystemRescueCd too. You just need to enter the graphical environment and use gparted. We will give you a short example on how to do so with a sample HDD that might hold windows, so you get a feeling what to do, but be aware that a resize can be a dangerous part, so please keep a backup of your data, as Funtoo Technologies wouldn't take any responsibility for a loss of data that could happen by the process of shrinking a partition.

Starting the graphical environment in SystemRescueCd is really simple, just execute the following command:

root@sysresccd /root % wizard

and it will start a dialog for the graphical environment setup, for most users the default options should be OK. Both the dialog and the graphical environment (Xfce) are shown in the next two images.

Fqi-006.png
Fqi-007.png

[edit] Resize of HDD partitions

The above screen shows us that there is the tool called GParted right on the frontpanel. That tool will be used to resize our HDD partitions. The following screen shows us an example of how the tool looks if you start it.

Fqi-008.png

By clicking on the partion you want to resize you make it active right-click on it and use the point resize and you will see the Resize/Move dialog, here you can edit the resize options for that partiton.

Fqi-009.png

When you finished setting the resize options, you will see that the grey-green hook in the menu got green, that means you have jobs added to the working list. If you have all actions done on the partition, click on the green hook and your resize action will run by giving you the following feedback window:

Fqi-010.png

when that has finished you will see the resized result and it should look like that:

Fqi-011.png

we are finished with resizing the dis partitions, exit the Tool and close Xfce by clicking the running exit man in the down right. We are back on the command line and are ready to partitions our disk. to our needs, for a unified way we will show it with an empty partition table, so if you have resized some partitions, they will be listed in the MBR menu, as if you want to use an GPT/GUID partition table we will start from a clean table anyway.

[edit] Partitioning scheme

Warning: If you are partitioning the hard drive of a SPARC machine, please see Funtoo Linux Installation on SPARC. Also, note that OpenBoot has no support for GPT volumes and you won't be able to boot on the system volume if that later has been partitioned with GPT.

For partitioning we suggest the following schemes:

  • MBR unencrypted
Partition Size fdisk option Filesystem (FS)
/boot 200 MB 83 ext2
swap 2x RAM if 1024 MB or less, otherwise 2 GB 82 sw (default)
/ 20-50 GB 83 ext4
/usr/portage ~10 GB 83 ext4
/home As much as possible. 83 xfs
  • MBR encrypted
Partition Size fdisk option FS
/boot 200 MB 83 ext2
cryptoroot Rest of the Disc 83 none
  • GPT unencrypted
Partition Size gdisk option FS
/boot 200 MB 0700 ext2
EFI-Boot 512 kB EF02 none
swap 2x RAM if 1024 MB or less, otherwise 2 GB 8200 swap (default)
/ 20 - 50 GB 0700 ext4
/usr/portage ~10 GB 0700 ext4
/home Rest of the Disc 0700 xfs
  • GPT encrypted
Partition Size gdisk option FS
/boot 200 MB 0700 ext2
EFI-Boot 512 kB EF02 none
cryptoroot Rest of the Disc 0700 none

[edit] MBR

Now we will partition the HDD using the above scheme with a disk partitioning tool named "fdisk". So just invoke it with the following command:

# fdisk /dev/sda 

it will greet you like this

Fqi-012.png

by pressing `m` you will get a help context menu that will give you the following options:

   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partion
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel <--- SPARC specific, see Funtoo installation notes for SPARC
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

The partitioning scheme is created with the following commands inside of fdisk:

[edit] unencrypted

Command (m for help): n

it will ask you now if you want to add a primary or extended partition, we choose primary by pressing

Command action
   e   extended
   p   primary partition (1-4)
p

and use for the next 2 steps the default options and add as the Last Sector for the first partition the following:

Partition number (1-4, default 1): (default)
Using default value 1
First sector: (Use default)
Using default value
Last sector, ...: +200M

your input should look like that right now:

Fqi-013.png

next we need to make the partition bootable and add then the rest of the partitions:

Command (m for help): a
Partition number (1-4): 1

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 83

Command (m for help): n
Command action 
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4, default 2): (default)
Using default value 2
First sector: (Use default)
Using default value
Last sector, ...: +2G

Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 82
Changed system type of partition 2 to 82 (Linux swap / Solaris)

Command (m for help): n
Command action 
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4, default 3): (default)
Using default value 3
First sector: (Use default)
Using default value
Last sector, ...: +20G

Command (m for help): t
Partition number (1-4): 3
Hex code (type L to list codes): 83

Command (m for help): n
Command action 
   e   extended
   p   primary partition (1-4)
e
Selected partition 4
First sector: (Use default)
Using default value
Last sector, ...: (Use default)
Using default value

Command (m for help): n
First sector: (Use default)
Using default value
Last sector, ...: +10G

Command (m for help): t
Partition number (1-5): 5
Hex code (type L to list codes): 83

Command (m for help): n
First sector: (Use default)
Using default value
Last sector, ...: (Use default)

Command (m for help): t
Partition number (1-6): 6
Hex code (type L to list codes): 83

Command (m for help): p

this will result in the following output

Fqi-014.png

now just write the partition table to your disk by using `w`, this will result in the following output:

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

If that was your scheme, you are now so far to get to the partition formatting section.

[edit] encrypted

Command (m for help): n

it will ask you now if you want to add a primary or extended partition, we choose primary by pressing

Command action
   e   extended
   p   primary partition (1-4)
p

and use for the next 2 steps the default options and add as the Last Sector for the first partition the following:

Partition number (1-4, default 2): (default)
Using default value 1
First sector: (Use default)
Using default value
Last sector, ...: +200M

Next we need to make the partition bootable and add then the rest of the partition:

Command (m for help): a
Partition number (1-4): 1

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 83

Command (m for help): n
Command action 
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4, default 2): (default)
Using default value 2
First sector: (Use default)
Using default value
Last sector, ...: (use default)

Command (m for help): p

this will result in the following output

Fqi-015.png

now just write the partition table to your disk by using w, this will result in the following output:

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

next we need to prepare our cryto-container that will keep all the encrypted stuff in it. For that, go to the Cryptocontainer section.

[edit] GPT/GUID partition table

This setup is for most users more intuitive, since we don't need to care about extended partitions. We only need to setup an extra partition for our bootloader. So let us do it for unencrypted and encrypted partitions.

For setting up the GPT partition table we use the tool "gdisk", that is the GPT equivalent of fdisk.

Just start it with the following command:

gdisk /dev/sda 

it will greet you with the following screen

Fqi-016.png

[edit] unencrypted

Next we will create the partitions for our unencrypted setup:

Command (? for help): n
Partition number (1-128, default 1): (Use default)
First sector (34-..., default = 34) or ...: (Use default)
Information: Moved requested sector from 34 to 2048 in
order to align on 2048-sector boundaries.
Use 'l' on the experts' menu to adjust alignment
Last sector (2048-..., default = ...) or ...: +200M
Current type is 'Linux/Windows data'
Hex code or GUID (L to show codes, Enter = 0700): (ENTER)
Changed type of partition to 'Linux/Windows data'

Command (? for help): n
Partion number (2-128, default 2): (Use default)
First sector (...) or ...: (Use default)
Last sector (...) or (...): +512K
Current type is 'Linux/Windows data'
Hex code or GUID (L to show codes, Enter = 0700): ef02
Changed type of partition to 'BIOS boot partition'

Command (? for help): n
Partition number (3-128, default 3): (Use default)
First sector (...) or ...: (Use default)
Last sector (...) or (...): +2G
Current type is 'Linux/Windows data'
Hex code or GUID (L to show codes, Enter = 0700): 8200
Changed type of partition to 'Linux swap'

Command (? for help): n
Partition number 4-128, default 4): (Use default)
First sector (...) or ...: (Use default)
Last sector (...) or (...): +20G
Current type is 'Linux/Windows data'
Hex code or GUID (L to show codes, Enter = 0700): (ENTER)
Changed type of partition to 'Linux/Windows data'

Command (? for help): n
Partition number 5-128, default 5): (Use default)
First sector (...) or ...: (Use default)
Last sector (...) or (...): +10G
Current type is 'Linux/Windows data'
Hex code or GUID (L to show codes, Enter = 0700): (ENTER)
Changed type of partition to 'Linux/Windows data'

Command (? for help): n
Partition number 6-128, default 6): (Use default)
First sector (...) or ...: (Use default)
Last sector (...) or (...): (Use default)
Current type is 'Linux/Windows data'
Hex code or GUID (L to show codes, Enter = 0700): (ENTER)
Changed type of partition to 'Linux/Windows data'

Command (? for help): p

will now show you a disk partitioning like that one:

Fqi-017.png

now write the table to your disk with w;

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!!

Do you want to proceed, possibly destroying your data? (Y/N): Y
OK; writing new GUID partition table (GPT).
The operation has completed successfully.

Now go the section about creating the filesystem on MBR.

[edit] encrypted

Next we will create the partitions for our encrypted setup:

Command (? for help): n
Partition number (1-128, default 1): (Use default)
First sector (34-..., default = 34) or ...: (Use default)
Information: Moved requested sector from 34 to 2048 in
order to align on 2048-sector boundaries.
Use 'l' on the experts' menu to adjust alignment
Last sector (2048-..., default = ...) or ...: +200M
Current type is 'Linux/Windows data'
Hex code or GUID (L to show codes, Enter = 0700): (ENTER)
Changed type of partition to 'Linux/Windows data'

Command (? for help): n
Partion number (2-128, default 2): (Use default)
First sector (...) or ...: (Use default)
Last sector (...) or (...): +512K
Current type is 'Linux/Windows data'
Hex code or GUID (L to show codes, Enter = 0700): ef02
Changed type of partition to 'BIOS boot partition'

Command (? for help): n
Partition number (3-128, default 3): (Use default)
First sector (...) or ...: (Use default)
Last sector (...) or (...): (Use default
Current type is 'Linux/Windows data'
Hex code or GUID (L to show codes, Enter = 0700): (ENTER)
Changed type of partition to 'Linux/Windows data'

Command (? for help): p

will now show you a disk partitioning like that one:

Fqi-018.png

now write the table to your disk with w;

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!!

Do you want to proceed, possibly destroying your data? (Y/N): Y
OK; writing new GUID partition table (GPT).
The operation has completed successfully.

Now go to the Cryptocontainer setup.

[edit] Cryptocontainer

Setting up the cryptocontainer for our encrypted system is in both cases nearly identically, but for the easier showing effect we will give both examples in a seperate subsection.

[edit] MBR

First we will prepare the HDD for being encrypted, if you use SystemRescueCd in version 2.0.1 or higher just execute the following commands:

Note: If you want to see progress of dd than you have to open another terminal and execute: kill -s USR1 `pidof dd`
# dd if=/dev/zero of=/dev/sda2 bs=100M
# dd if=/dev/urandom of=/dev/sda2 bs=100M

This part is optional but for security reason we advise you to do so if you like to have a secure encrypted disk. This part takes a lot of time, let your Computer run and get out to sleep and work, as it might take a day or two depending on your HDD size. :)

You should also be aware that you will get a hint about reaching the end of your HDD. That's intended and desired in this case so that the command can work without knowing your disk-size.

If you ran the above commands you should see an output similar to the one shown in the screenshot:

Fqi-019.png

Next we need to encrypt our HDD, that will be done with the following commands:

# cryptsetup -c aes-xts-plain luksFormat /dev/sda2

WARNING!
========
This will overwrite data on /dev/sda2 irrevocably.

Are you sure (Type uppercase yes): YES
Enter LUKS passphrase: (Your paranoid passphrase)
Verify passphrase: (Your paranoid passphrase again)

Then we need to mount our HDD:

# cryptsetup luksOpen /dev/sda2 dmcrypt_root
Enter passphrase for /dev/sda2: (your paranoid passphrase)

Next we will creat the logical volumes for our setup, so have a look at the subsection about logical volumes.

[edit] GPT/GUID

This section is nearly the same as above, so if you read the text in one you will reread the MBR section again only with the GPT enabled stuff.

Note: If you want to see progress of dd than you have to open another terminal and execute: kill -s USR1 `pidof dd`

First we will prepare the HDD for being encrypted, if you use SystemRescueCd in version 2.0.1 or higher just execute the following commands:

# dd if=/dev/zero of=/dev/sda3 bs=100M
# dd if=/dev/urandom of=/dev/sda3 bs=100M

This part is optional but for security reason we advise you to do so if you like to have a secure encrypted disk. This part takes a lot of time, let your Computer run and get out to sleep and work, as it might take a day or two depending on your HDD size. :)

You should also be aware that you will get a hint about reaching the end of your HDD. That's intended and desired in this case so that the command can work without knowing your disk-size.

If you ran the above commands you should see an output similiar to the one shown in the screenshot:

Fqi-020.png

Next we need to encrypt our HDD, that will be done with the following commands:

# cryptsetup -c aes-xts-plain luksFormat /dev/sda3

WARNING!
========
This will overwrite data on /dev/sda3 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase: (your paranoid passphrase)
Verify passphrase: (your paranoid passphrase again)

Then we need to mount our HDD:

# cryptsetup luksOpen /dev/sda3 dmcrypt_root
Enter passphrase for /dev/sda3: (your paranoid passphrase)

next we will creat the logical volumes for our setup, so have a look at the following subsection.

[edit] logical volumes

Feel free to adjust your sizes here, we will follow our given advices above for that. First we need to creat the the physical volume, then the volume group and at last the logical volumes. doing so is really easy, just do the following for if you want to follow our advices above:

# pvcreate /dev/mapper/dmcrypt_root
Physical volume "/dev/mapper/dmcrypt_root" successfully created
# vgcreate vg /dev/mapper/dmcrypt_root
Volume group "vg" successfully created
# lvcreate -L20G -nroot vg
Logical volume "root" created
# lvcreate -L2G -nswap vg
Logical volume "swap" created
# lvcreate -L10G -n portage vg
Logical volume "portage" created
# lvcreate -l 100%FREE -nhome vg
Logical volume "home" created

[edit] filesystem creation

Now that we have created our partitioning scheme, we can go on to create the filesystems needed for our partitions. Here differences only occur between the unencrypted setups. Encrypted volumes are handled the same way, no matter whether MBR and GPT, so there is no need to split them up in two seperate parts:

[edit] MBR unencrypted

For the unencrypted partions in the MBR setup just use the following regarding to our above given adives, you may feel free to change some parts of it if you like:

# mkfs.ext2 /dev/sda1
# mkswap /dev/sda2
# mkfs.ext4 /dev/sda3
# mkfs.ext4 /dev/sda5
# mkfs.xfs /dev/sda6

That was all for having your filesystem created. now go to the System Setup.

[edit] GPT unencrypted

Now let us create the filesystem for our GUID partition table. It is as easy as above, just see the difference in the jump of partition name:

# mkfs.ext2 /dev/sda1
# mkswap /dev/sda3
# mkfs.ext4 /dev/sda4
# mkfs.ext4 /dev/sda5
# mkfs.xfs /dev/sda6

Next step is to mount our partitons, for that go to the System Setup.

[edit] MBR/GPT encrypted

If you choose to encrypt your HDD, you will in both cases follow the next steps to setup your filesystems:

# mkfs.ext2 /dev/sda1
# mkswap /dev/mapper/vg-swap
# mkfs.ext4 /dev/mapper/vg-root
# mkfs.ext4 /dev/mapper/vg-portage
# mkfs.xfs /dev/mapper/vg-home

So far we prepared the disk and will now mount our partitions.

[edit] System Setup

[edit] Mounting filesystem

As we need to have a mountpoint for our system, we now create it with

# install -d /mnt/funtoo
Note: The in the following used install -d command just creats all the needed folders for later mountpoints for us. If you like you can control it by using ls /mnt/funtoo after the install -d part. Now you are ready to install your base system, read on in Downloading the System.

[edit] MBR unencrypted

Now mount your system partitions like that if you used our above advice:

# swapon /dev/sda2
# mount /dev/sda3 /mnt/funtoo
# install -d /mnt/funtoo/{boot,usr/portage,home}
# mount /dev/sda1 /mnt/funtoo/boot
# mount /dev/sda5 /mnt/funtoo/usr/portage
# mount /dev/sda6 /mnt/funtoo/home
Note: The install -d command just creats all the needed folders for later mountpoints for us. If you like you can control it by using ls /mnt/funtoo after the install -d part. Now you are ready to install your base system, read on in Downloading the System.

[edit] GPT unencrypted

That part is really similiar to the unencrypted MBR, but see for yourself:

# swapon /dev/sda3
# mount /dev/sda4 /mnt/funtoo
# install -d /mnt/funtoo/{boot,usr/portage,home}
# mount /dev/sda1 /mnt/funtoo/boot
# mount /dev/sda5 /mnt/funtoo/usr/portage
# mount /dev/sda6 /mnt/funtoo/home

[edit] MBR/GPT encrypted

Now mount the system so we can setup the system in the next step.

# swapon /dev/mapper/vg-swap
# mount /dev/mapper/vg-root /mnt/funtoo
# install -d /mnt/funtoo/{boot,usr/portage,home}
# mount /dev/sda1 /mnt/funtoo/boot
# mount /dev/mapper/vg-portage /mnt/funtoo/usr/portage
# mount /dev/mapper/vg-home /mnt/funtoo/home

[edit] Downloading the System

The next step is to download the base system and portage tree and set up both. Here a list of packages we have:

Arch (32/64 bit) Processors Stable Release Current Release
64-bit Install Images for PC-compatible processors
64 Generic Intel and Amd 64-bit Processors generic_64 generic_64
64 Intel Core2 Series and most Atom Processors core2_64 core2_64
64 Intel Core i3, i5, i7 N/A corei7
64 AMD Athlon 64 and Opteron Processors (K8 Family or higher) amd64-k8 amd64-k8
32-bit Install Images for PC-compatible processors
32 Intel Core2 Series, i3, i5, i7 and Atom Processors N/A core2_32
32 N/A amd64-k8_32
32 Generic x86 processors (intel80486+) i486 i486
32 Generic P6-class (Pentium Pro/Pentium II compatible) i686 i686
32 Athlon XP and Athlon 64-based CPU (32-bit mode) N/A athlon-xp
32 Intel Pentium 4 Processors N/A pentium4
OpenVZ Templates for PC-Compatible Systems
32 32-bit OpenVZ Images OpenVZ x86-32bit OpenVZ x86-64bit
64 64-bit OpenVZ Images OpenVZ x86-64bit OpenVZ x86-64bit
SPARC processor Images
32/64 Generic SPARC v9 processors (use this one if the ultrasparc I/II stages are inadequate for you) N/A sparc_v9
32/64 UltraSPARC I & UltraSPARC II series (choose this one in doubt) N/A ultrasparc
32/64 UltraSPARC III and UltraSPARC IV series N/A ultrasparc3
32/64 Niagara (UltraSPARC T1) N/A niagara
32/64 Niagara 2 (UltraSPARC T2/ UltraSPARC T2+) N/A niagara2

If you found your desired image above, just change to /mnt/funtoo and download the stage3 and portage-tree images.

# cd /mnt/funtoo
# elinks http://ftp.osuosl.org/pub/funtoo/funtoo-current/x86-64bit/generic_64/
Fqi-021.png

this shows you the site presented and by going down with the arrow keys to stage3-latest.tar.xz until it is highlighted you can download it by pressing D. Then move up in the directory structure (..-link) and go to the snapshot directory or quit elinks after downloading finished and start it again with like that

# elinks http://ftp.osuosl.org/pub/funtoo/funtoo-current/snapshots/

here you will now download the portage tree (portage-latest.tar.xz). The Download dialog will look in both cases like that:(Note outdated image, 'stage3-current.tar.xz' is now 'stage3-latest.tar.xz')

Fqi-022.png

When both downloads have finished quit elinks by typing q. The downloaded files should be located in /mnt/funtoo. Now that this is done, let us move on to installing your base system.

[edit] Installing the base system

Now that we have the base system and the portage tree downloaded, we will install it. First install the stage3. it is really easy.

# tar xfvpJ stage3-latest.tar.xz

That will output many lines, and return a command-prompt line when finished.

Next we need to extract the funtoo-portage-tree. For that we need to change to the future /usr dir, and extract there the portage.

# cd /mnt/funtoo/usr
# tar xfvpJ ../portage-latest.tar.xz

This time there will be no output, but when the unpacking has finished, the result will be an empty command prompt. We still need to checkout the tree, but this can only be done from inside the chroot environment.

At this state of the setup we have setup most of our system. If you choose to use the fast genkernel method later on, the hardest part is already done. If you choose to manually configure the kernel, you still have quite a bit work ahead of you.

[edit] Chrooting

Before we can finally chroot into your system, there are a couple of things that need to be done before, like mounting the proc and dev filesystem.

# mount -t proc none /mnt/funtoo/proc
# mount --bind /dev /mnt/funtoo/dev

to have a working network inside of your chrooted system later you need to copy the resolv.conf file too:

# cp -L /etc/resolv.conf /mnt/funtoo/etc

Now we can chroot into your Funtoo system

# env -i HOME=/root TERM=$TERM SHELL=/bin/bash 
# chroot /mnt/funtoo /bin/bash

Now that we are inside your new system, you'll need to update your environment, use the following commands to do so:

# source /etc/profile
# env-update

We also recommend you to change the default command prompt while you are inside the chroot, as it will avoid confusions if you have to change terminals for anything. To do so use the following command:

# export PS1="(chroot) $PS1"

Congratulations! You are now inside your new Funtoo Linux operating system.

[edit] Updating the Portage tree

As we have installed the Portage snapshot during the installation, we now need to "activate" the Portage tree by selecting the funtoo.org branch.

By default, the master branch is enabled, which saves space when storing the tree inside a tarball, but that branch only contains a README with the same instructions as the ones given here.

To activate the funtoo.org branch, do the following:

# cd /usr/portage/
# git checkout funtoo.org

  Checking out files: 100% (85007/85007), done.
  Switched to branch "funtoo.org"

You'll now be able to see thousands of glorious ebuilds inside your Portage tree :)

After activating the funtoo.org branch you need to sync your tree to the newest glorious funtoo ebuilds. Run:

# emerge --sync

This will now update the tree to the current state, which normally changes twice a day.

[edit] Setting the default options

Like any other Linux Distribution, Funtoo Linux has it's share of configuration files, that need to be edited by you. The following table gives you an overview of these files and for what they are there:

File Description
/etc/make.conf Parameters used by gcc compiler
/etc/fstab Device to mountpoint definitions
/etc/conf.d/hostname Setting your hostname
/etc/rc.conf OpenRC configuration file.
/etc/conf.d/keymaps Keyboard configuration file.
/etc/conf.d/hwclock System clock to use.
/etc/conf.d/consolefont Fonts to be used in console display. This doesn't affect GUI terminal emulators.
/etc/env.d/99editor Default editor.
/etc/localtime Your timezone.
/etc/make.profile Type of installation (desktop, server...).
/etc/conf.d/modules Kernel modules to load
/etc/locale.gen Localization.
/etc/env.d/02locales Localization for old programs.

If you are installing an english Funtoo, you are lucky, as you won't need to edit many of the files above, if not, don't be afraid, we will walk through the configuration of these files in the following together.

First we will get a mighty editor with great syntax highlighting as it is not provided in our main system we will merge it, if you don't like to please replace in the following edit sections the part vim <path/filename> with your editor <path/filename> where editor is replaced by vi or nano -w.

First let us get vim so we have the perfect highlighting from it for our personal help.

# emerge -avt vim

that will result in an output like that

Fqi-023.png

just accept the output with Enter and it will install vim for you, while you wait for vim to get emerged, here are the some basic usage instructions for ViM. ViM has a multimode interface, if you start it, it is in Command mode, the second mode is the Edit mode which you will enter from the Command mode by pressing i, to go back into the Command mode press ESC. After you have edited a config file, you want to save it, for that you have to be in Command mode and then simple press :w<ENTER>, it will save the file, a closing is done with :q<ENTER>, if you changed content in the file that shouldn't be saved use :q! and for saving and closing the file :wq, thats all, the visual mode is in that context not very useful, so we leave it out. Now that you know the basic usage of ViM and it has emerged we will now start configuring the config files.

[edit] /etc/make.conf

First open that file

# vim /etc/make.conf 

This file contains something similar to the following. You may or may not have a CFLAGS variable set already depending on what stage 3 tarball you used:

ACCEPT_KEYWORDS="~amd64"
SYNC="git://github.com/funtoo/portage-mini-2010.git"
CHOST="x86_64-pc-linux-gnu"
Note: In ACCEPT_KEYWORDS, ~amd64 is used for current 64-bit builds; There is no tilde for the stable build. The default value is (~)x86 for 32 bit. The ACCEPT_KEYWORDS line should not be altered. Keep it as supplied in the default file. It is also important to not change the CHOST line.
[edit] CFLAGS

If you're only building packages for your host processor and not any others then the recommended CFLAGS setting is:

CFLAGS="-march=native -O2 -pipe"

Since gcc-4.2, -mtune=native and -march=native will produce code optimized for the host processor. -mtune=native has no effect if GCC does not recognize the processor. More information can be found in the GCC online docs.

Note: The value native selects the best architecture option for the host processor, so this should not be used if you intend to compile packages for a different CPU.
[edit] CXXFLAGS

Normally, this flag is set to the same values as CFLAGS:

CXXFLAGS="${CFLAGS}"
[edit] MAKEOPTS

With MAKEOPTS you define how many parallel compilations should occur when you compile a package. A good choice is the number of CPUs (or CPU threads) in your system plus one (Note: this guideline isn't always perfect). If for example you have a dual core processor without hyperthreading, then you would set MAKEOPTS to 3:

MAKEOPTS="-j3" 

If you're unsure of how many processors/threads you have, then use /proc/cpuinfo to help you.

# cat /proc/cpuinfo  | grep "model name" | wc -l
16

Set MAKEOPTS to this number plus one:

MAKEOPTS="-j17"
[edit] USE

USE flags define what functionality is enabled when ebuilds are built. It is not recommended to add a lot of them during installation. You should wait until you have a working, bootable system to do so. The following USE flags are a recommended starting point for new systems:

USE="-gnome -gtk -kde -kdeenablefinal -ldap nls -qt3 -qt3support -qt4 userlocales"

The minus(-) sign tells gcc not to use the flag when compiling. USE flags gnome, gtk, kde, qt3, qt3support, and qt4 will be set later if you install a desktop envrionment.

A Funtoo guide to USE flags will be available in the future. For now, you can find out more information about USE flags in the Gentoo Handbook.

[edit] GENTOO_MIRRORS

This is the mirror from which emerge gets a lot of the source files. It is usually not necessary to set this flag. In the following ewxample, the Waterloo University is used (a fast and reliable Canadian mirror). Please set this variable to a mirror local to your country.

GENTOO_MIRRORS="ftp://mirror.csclub.uwaterloo.ca/gentoo-distfiles/ http://distfiles.gentoo.org"
[edit] LINGUAS

LINGUAS tells Portage which local language to compile the system and applications in (those who use LINGUAS variable like OpenOffice). It is not usually necessary to set this if you use English. Otherwise, if you want another language, replace fr (French) for the code of your mother language, e.g. de for German.

LINGUAS="fr"

or for multiple language support you might also use:

LINGUAS="en de fr"
[edit] /etc/make.conf example

An example of a /etc/make.conf file could look like that:

# These settings were set by the metro build script that automatically built this stage.
# Please consult /etc/make.conf.example for a more detailed example.

ACCEPT_KEYWORDS="x86"
FEATURES="mini-manifest"
SYNC="git://github.com/funtoo/portage-mini-2010.git"
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=i686 -O2 -pipe"
CXXFLAGS="${CFLAGS}"
MAKEOPTS="-j2"
USE="-gnome -gtk -kde -kdeenablefinal -ldap nls -qt3 -qt3support -qt4 userlocales"
GENTOO_MIRRORS="ftp://mirror.csclub.uwaterloo.ca/gentoo-distfiles/ http://distfiles.gentoo.org"
LINGUAS="fr"
INPUT_DEVICES="evdev synaptics"
VIDEO_CARDS="vesa radeon"
PORT_LOGDIR="/var/log/portage"
PORTAGE_ELOG_CLASSES="log warn error info"
PORTAGE_ELOG_SYSTEM="echo:log,warn save:log,warn,error,info syslog:error"
[edit] /etc/fstab

This file is used for the configuration of the mountpoints for the system. As we have two different setups described above, here are the two examples for these.

# vim /etc/fstab
[edit] unencrypted MBR
# The root filesystem should have a pass number of either 0 or 1.
# All other filesystems should have a pass number of 0 or greater than 1.
#
# NOTE: If your BOOT partition is ReiserFS, add the notail option to opts.
#
# See the manpage fstab(5) for more information.
#
# <fs>          <mountpoint>    <type>  <opts>              <dump/pass>

/dev/sda1       /boot           ext2    noauto,noatime      1 2
/dev/sda2       none            swap    sw                  0 0
/dev/sda3       /               ext4    noatime             0 1
/dev/sda5       /usr/portage    ext4    noatime             0 1
/dev/sda6       /home           xfs     defaults,noatime    0 1
#/dev/cdrom     /mnt/cdrom      auto    noauto,ro           0 0
none            /dev/shm        tmpfs   nodev,nosuid,noexec 0 0
[edit] unencrypted GPT
# The root filesystem should have a pass number of either 0 or 1.
# All other filesystems should have a pass number of 0 or greater than 1.
#
# NOTE: If your BOOT partition is ReiserFS, add the notail option to opts.
#
# See the manpage fstab(5) for more information.
#
# <fs>          <mountpoint>    <type>  <opts>              <dump/pass>

/dev/sda1       /boot           ext2    noauto,noatime      1 2
/dev/sda3       none            swap    sw                  0 0
/dev/sda4       /               ext4    noatime             0 1
/dev/sda5       /usr/portage    ext4    noatime             0 1
/dev/sda6       /home           xfs     defaults,noatime    0 1
#/dev/cdrom     /mnt/cdrom      auto    noauto,ro           0 0
none            /dev/shm        tmpfs   nodev,nosuid,noexec 0 0
[edit] encrypted

That time the setup is the same for both MBR and GPT partition layout:

# The root filesystem should have a pass number of either 0 or 1.
# All other filesystems should have a pass number of 0 or greater than 1.
#
# NOTE: If your BOOT partition is ReiserFS, add the notail option to opts.
#
# See the manpage fstab(5) for more information.
#
# <fs>                  <mountpoint>    <type>  <opts>              <dump/pass>

/dev/sda1               /boot           ext2    noauto,noatime      1 2
/dev/mapper/vg-swap     none            swap    sw                  0 0
/dev/mapper/vg-root     /               ext4    noatime             0 1
/dev/mapper/vg-portage  /usr/portage    ext4    noatime             0 1
/dev/mapper/vg-home     /home           xfs     defaults,noatime    0 1
#/dev/cdrom             /mnt/cdrom      auto    noauto,ro           0 0
none                    /dev/shm        tmpfs   nodev,nosuid,noexec 0 0
[edit] /etc/conf.d/hostname

Here you will set up your hostname for the PC. So choose a name for your PC and set it up in that file:

# vim /etc/conf.d/hostname

# Set to the hostname of this machine
hostname="<your-hostname>"
[edit] /etc/rc.conf

You may use this file as-is. However, it is a good idea to set rc_logger to yes. That will create a log file which is handy when problems are encountered with OpenRC scripts. Very helpful for fixing things.

Another good option here is the rc_interactive flag, if you are playing around with a new graphical display manager or aren't that used with the upgrade procedure of the graphical environement. if rc_interactive is set to yes, you will be able to interactively manipulate the boot process, what means you can decide what you want to start or not, like the graphical environment for example.

Other options have really good explainations inside of the /etc/rc.conf file.

[edit] /etc/conf.d/keymaps

You do not have to alter that file if you have a US English keyboard. Otherwise, edit file and set keymap to your keyboard model. For example, cf for French Canadian keyboard, fr for French Azerty and de for German Qwertz.

[edit] /etc/conf.d/hwclock

If you dual boot with Windows, you'll need to edit this file and change clock to local. Otherwise you should not normally need to edit this file.

You should define your timezone in /etc/timezone:

# vim /etc/timezone
Europe/Berlin

anoteher value might be

America/Denver

so you might get an idea how it should look like, if not have a look at /usr/share/zoneinfo it will give you the entry after the path like /usr/share/zoneinfo/<Content of /etc/timezone> like for Germany you will find a path in there that looks like /usr/share/zoneinfo/Europe/Berlin.

[edit] /etc/conf.d/consolefont

There is nothing to edit in that file.

[edit] /etc/env.d/99editor

Create and edit that file to instruct your system about the default editor it should use.

vim /etc/env.d/99editor

Type in :

EDITOR="/usr/bin/vim"

Replace the above line with the editor of your choice, if you had been happy so far with ViM just paste it in as is, if not use nano, vi or what else you like.

[edit] /etc/localtime

If you came here from Gentoo, it was advised to copy the file from the zoneinfo dir to here. We advise you to create a symbolic link from the zoneinfo dir to /etc/localtime. As in the hwclock section above, we need your timezone parted in LAND/TOWN like for Germany Europe/Berlin. Now, create the symbolic link. More info about it can be found in the /usr/share/zoneinfo dir.

ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime

That command sets the timezone to Central European Time.

[edit] /etc/make.profile

Here you select which type of environment you want the gcc-compiler to take into account. That will dress up an environment with a list of pre-defined USE flags.

To list all available profiles run:

eselect profile list

The output will look like that:

[1]   default/linux/x86/2008.0 *
[2]   default/linux/x86/2008.0/desktop
[3]   default/linux/x86/2008.0/developer
[4]   default/linux/x86/2008.0/server

Profile defaults to 2008.0 (See the star). To create a profile for DE (Desktop Environment) run:

eselect profile set 2
Warning: Funtoo only supports the 2008.0 profile and the 2008.0 profile children. Use one of these profiles until 'funtoo-1.0' is ready.
[edit] /etc/conf.d/modules

With Funtoo, OpenRC loads modules from /etc/conf.d/modules using the line:

modules_2_6="list of modules"

With Funtoo, define module arguments as follows:

module_module-name_args_2_6="module arg=value"
[edit] Localization

/etc/locale.gen and /etc/env.d/02locales are used to support your local language. The last one is required just in case there still are old programs installed.

You do not need to amend anything if your locales are US English. The following are examples for German. You can look in /usr/share/i18n/SUPPORTED for the default list of supported combinations or look in /usr/share/i18n/locales to determine values to use.

# vim /etc/locale.gen 

Put this value into the file for German support:

de_DE.UTF-8 UTF-8

for a multiple language support it might look like that:

de_DE.UTF-8 UTF-8
fr_CA.UTF-8 UTF-8
en_US.UTF-8 UTF-8

Edit /etc/env.d/02locales according to that layout:

# vim /etc/env.d/02locales

and put in these lines:

LANG="de_DE.UTF-8"
LANGUAGE="de_DE.UTF-8"

Finally after we editet all the localization files generate the localized environment:

locale-gen && source /etc/profile 

[edit] Kernel

Now that you have the base system running, you need to install a kernel. If you decided to use a standard setup with an unencrypted GPT disc layout or the old unencrypted MBR disc layout, a fast solution would be to use the genkernel solution. If you used the standard setup with an encrypted GPT disc layout or the old encrypted MBR disc layout, you have to use the manual kernel steps.

[edit] choosing a kernel

First, you need to choose a kernel version you would like to install on your system. The following table will give you an overview of which kernels are available and who should use them.

Kernel ebuild Description masked Prefered Users eselect kernel set
sys-kernel/* generates symlink
cell-sources Full sources including the cell/ps3 patchset for the 2.6 kernel tree [ Masked ] unsure
ck-sources Con Kolivas' high performance patchset + Gentoo patchset sources unsure
debian-sources Debian Sources - with optional OpenVZ support NO
gentoo-sources Full sources including the Gentoo patchset for the 2.6 kernel tree default for most users YES
git-sources The very latest -git version of the Linux kernel for the versed user YES
hardened-sources Hardened kernel sources (kernel series 2.6) not supported atm YES
mips-sources Linux-Mips GIT sources for MIPS-based machines, dated 20110207 [ Masked ] unsure
mm-sources Andrew Morton's kernel, mostly fixes for 2.6 vanilla, some vm stuff too unsure
openvz-sources Full sources including OpenVZ patchset for the 2.6.18 kernel tree For users that want to build a OpenVZ server unsure
pf-sources Linux kernel fork with new features, including the -ck patchset (BFS), BFQ, TuxOnIce and LinuxIMQ unsure
rhel5-openvz-binaries RHEL5 kernel with OpenVZ patchset - initrd and bzImage YES
rhel5-openvz-sources Full Linux kernel sources - RHEL5 kernel with OpenVZ patchset unsure
rhel6-openvz-binaries RHEL6 kernel with OpenVZ patchset - initrd and bzImage unsure
rhel6-openvz-sources Full Linux kernel sources - RHEL5 kernel with OpenVZ patchset unsure
sparc-sources Full sources for the Gentoo Sparc Linux kernel [ Masked ] YES
sysrescue-std-binaries System Rescue CD Full sources for the Linux kernel, including gentoo and sysresccd patches - initrd and bzImage [ Masked ] unsure
sysrescue-std-sources System Rescue CD Full sources for the Linux kernel, including gentoo and sysresccd patches. unsure
tuxonice-sources TuxOnIce + Gentoo patchset sources unsure
usermode-sources Full sources for the User Mode Linux kernel [ Masked ] unsure
vanilla-sources Full sources for the Linux kernel YES
vserver-sources Full sources including Gentoo and Linux-VServer patchsets for the 2.6 kernel tree. unsure
xbox-sources Full sources for the Xbox Linux kernel [ Masked ] unsure
xen-sources Full sources for a dom0/domU Linux kernel to run under Xen unsure
zen-sources The Zen Kernel Sources v2.6 unsure

For the next section, we will assume that you selected gentoo-sources for your kernel setup. If not, please replace gentoo-sources in the next section with your selection. If you are unsure, please follow our suggestion to use the gentoo-sources.

[edit] genkernel

That part would be fast done in general, we will now guide you through that process. First, we need to install the needed tools for it. So, let's do it!

# emerge -avt genkernel gentoo-sources
Calculating dependencies... done!

These are the packages that would be merged, in reverse order:

[ebuild  N    ] sys-kernel/gentoo-sources-2.6.38-r4  USE="-build -deblob -symlink" 134 kB
[ebuild  N    ] sys-kernel/genkernel-3.4.12.6-r2  USE="-bash-completion (-ibm) (-selinux)" 11,556 kB

Total: 2 packages (2 new), Size of downloads: 11,690 kB

Would you like to merge these packages? [Yes/No] 

After answering the above question with "Yes", it will download and install the packages for you. Next, you need to set the symlink from /usr/src/linux to the /usr/src/linux-version directory. There are two ways to do so. If you have selected a version that is supported by eselect, it would be really simple for you, just do:

# eselect kernel list
# eselect kernel set 1

The first command should list the kernel you have selected. If that isn't the case, the second command to set this kernel version isn't needed, else the second one sets the symlink automatically for you. As eselect kernel command will scan your /usr/src directory, it should list every kernel-sources listed above, if that isn't the case, please report the failing to the funtoo-dev mailing list, Funtoo Forums or contact us directly in IRC at #funtoo. As a workaround you could use the following steps to make your kernel-sources usable:

# cd /usr/src
# rm linux
# ls
linux-sources
# ln -s linux-sources linux

where linux-sources is the directory that the ls command above showed you.

When you finished the selection of your kernel you will now bake your first kernel, using the genkernel or fast way. Execute for that the following command:

# genkernel --menuconfig all

if you have a special config predefined use

# genkernel --kernel-config=config-name --menuconfig all

else if you have choosen an encrypted setup, use the following command to include all the tools you need for bootup:

# genkernel --lvm --luks --menuconfig all

the above used options are doing the following:

  • --kernel-config: use the given name located in the kernel source tree (/usr/src/linux by default is taken unless overridden by --kerndir)
  • all: rebuild the kernel image and the initramfs ramdisk image (aside of kernel modules, the ramdisk image contains tools such as BusyBox and some generic startup scripts, depending on options you use on the command line several additional tools like lvm or raid volume management can be incorporated as well).
  • --lvm: Includes support for storage using via Logical Volume Management (LVM2) from static binaries, if available to the system. Relevant (static) LVM2 binaries are compiled if they are unavailable. Be sure to install the lvm2 package on your system with emerge lvm2 before enabling this flag.
  • --luks: Includes support for Linux Unified Key Setup or LUKS. This will allow you to use a device encrypted by LUKS which contains the root filesystem. On the bootloader, you then set that encrypted device as the value of crypt_root (and real_root shall be the unencrypted device LUKS creates).
  • --menuconfig: lets you set options for kernel compile manual

The --menuoption will present you the following screen:

Fqi-024.png
[edit] default options for unencrypted/encrypted setup

We advised you above to use a partitioning scheme based on the following file system types:

  • ext2
  • swap
  • ext4
  • xfs

You now need to activate all of them so you can boot your system later, these options can be found at:

Under File systems:

<*>   Second extended fs support
<*>   The Extended 4 (ext4) filesystem
[*]      Ext4 extended attributes (NEW)
[ ]         Ext4 POSIX Access Control Lists (NEW)
[ ]         Ext4 Security Labels (NEW)
[ ]         EXT4 debugging support (NEW)
<*>   XFS filesystem support
[ ]         XFS Quota support (NEW)
[ ]         XFS POSIX ACL support (NEW)
[*]         XFS Realtime subvolume support
[ ]         XFS Debugging support (EXPERIMENTAL) (NEW)

If you furthermore decided to follow our advice and to use a GPT-Partitioning scheme, which will be your default, you will need to activate it in your kernel by using the following options:

Under File systems-->Partition Types:

[*]   Advanced Partition Selection (PARTITION_ADVANCED)
[*]   EFI GUID Partition Support (EFI_PARTITION)
[edit] additional encrypted options

It is very important to add the following parts in your kernel setup, when you used the above GPT or MBR encrypted setup. Under Under General setup:

[*]   Initial RAM filesystem and RAM disk (initramfs/initrd) support

and Under Device Drivers:

[*] Multiple devices driver support
<*>   Device Mapper Support
<*>      Crypt target support

and finally Under Cryptographic API:

<*>   XTS support (EXPERIMENTAL)

-*-   AES cipher algorithms

Finally exit the menuconfig for your kernel and get a coffee. You have done a good bit of work so far... :)

[edit] manual kernel

You can use genkernel to automatically compile your kernel, but this tends to create a bloated kernel, compatible with just about any computer, anyplace, any time. On the other hand, you can manually configure and compile your kernel, to give you complete control, for the smallest and fastest kernel(s) that you can build for your specific computer. However, manual kernel configuration is often called by many users, the hardest step in installing Funtoo. But it is also very worth learning how to do it. Be warned that it make take several reconfigurations, compiles and reboots, until you have a working system. Plus, for the encrypted hdd version, you will have to do a bit more work than above, but if you have gotten this far, you should be able to handle it.

[edit] install and config

First you will have to install the kernel image you selected above. In the following we again use the kernel we think might be the default choice of you, gentoo-sources, but you can feel free to replace it with any of the above ones. So now install your kernel-sources:

# emerge -avt gentoo-sources

After answering the above question with Yes, emerge will download and install the kernel-sources for you. Next you need to set the symlink from /usr/src/linux to the /usr/src/linux-version directory. There are two ways to do so, the default way would be to use the following command sequence:

# eselect kernel list
# eselect kernel set 1

The first command will list the kernel or kernels for which you have used emerge to install the corresponding source code packages. The character * is used to indicate the currently selected default kernel package. In other words, the command eselect kernel list will scan and list directories in your /usr/src directory , each named after a different kernel source code. It will then show with a * the directory currently pointed to by the /usr/src/linux link. The second command is not needed, as long as the correct kernel source has been selected. Otherwise, use this command and the number of the corresponding kernel directory, to set your /usr/src/linux link.

If the eselect kernel command does not work correctly, please report the failing to the funtoo-dev mailing list, Funtoo Forums or contact us directly in IRC at #funtoo.

As a workaround or for educational purposes, you could use the following equivalent commands. For example, to make gentoo-sources available for compiling your kernel, enter:

# cd /usr/src
# rm linux
# ls
gentoo-sources-3.5.4
# ln -s gentoo-sources-3.5.4 linux

where gentoo-sources is the directory that the ls command above showed you.

Now you are nearly ready to configure your kernel. First switch to a second terminal with Alt+F2 and execute lspci and copy the output, most importantly the names of the VGA, Ethernet and Network devices currently in your system. Knowing these device names will be needed if you need help for default options at the Debian GNU/Linux device driver check page. Some options there aren't in your kernel or may have other names but it is a good source for getting default options help for devices.

Fqi-025.png

Now move back to your chrooted system (Alt+F1) and start the configure process with

# cd /usr/src/linux
# make menuconfig

This will present you a screen similar to the following:

Fqi-024.png

start setting the options you know about or the ones the page above gave you. You need to at least set the following options:

Here are some more sources you may like to read for configuring your kernel the old fashioned manual way:

[edit] default options for unencrypted/encrypted setup

We advised above to use a partitioning scheme based on the following filesystemtypes:

  • ext2
  • swap
  • ext4
  • xfs

You now need to activate all of them so you can boot your system later, these options can be fount at:



If you furthermore decided to follow our advice and use a GPT-Partitioning scheme, what will be our default, you need to activate it in your kernel by using the following options:



[edit] additional encrypted options

It is very important to add the following parts in your kernel setup, when you used the above GPT or MBR encrypted setup. Under


and under


and finaly under


[edit] building the kernel the manual way

Now that all the options are set exit menuconfig and answer the question about saving your config with YES. That already was the hardest part, now bake your kernel.

# make
# make modules_install
# cp arch/<architecture>/boot/bzImage /boot/bzImage-<versionnumber>

This code-sequence will need to be explained, the first command make will bake your kernel, it will take some time, so feel free to get a coffee. :) if you don't have one available here is one from us |_|). make modules_install generates the modules for the kernel and builds them, the third command in the sequence needs to be adjusted by you, if you use a 32bit system replace <architecture> with x86 and for 64bit systems with x86_64, finally replace the <versionnumber>-string with a for you readable and unique versionnumber like 2.6.38-rc7-mykernel-v1 or something like that, then the command copies over your baked kernel to /boot and you are ready to get to the next step....

[edit] Bootloader

[edit] boot-update

boot-update is the default boot-loader configuration tool in funtoo. You need to install it with

# emerge -avt boot-update

This will install boot-update and grub2 for you. Next you need to configure it. That is done in /etc/boot.conf:

# vim /etc/boot.conf

/etc/boot.conf will look somewhat like the following:

boot {
	generate grub
	default "Funtoo Linux 64-bit" 
	timeout 10 
}

display {
	gfxmode 1440x900
	#background /boot/
}

color {
	normal cyan/black
	highlight black/cyan
}

default {
	scan /boot
	kernel bzImage[-v] kernel[-v] vmlinuz[-v]
	initrd initramfs[-v]

	# root=auto will cause the parameter 
	# from your /etc/fstab. rootfstype=

	params video=vesafb root=auto rootfstype=auto

	# an alternate graphics mode can be set
	# default is inherited from display:

	# gfxmode 1024x768
}

"altboot" {
	params += init=/bin/bash
}

"Funtoo Linux 64-bit gpt" {
        kernel bzImage[-v]
}

"Funtoo Linux genkernel" {
        kernel kernel[-v]
        initrd initramfs[-v]
        params += real_root=auto
}

"Funtoo Linux 64-bit encrypted gpt/mbr manual kernel" {
	kernel bzImage[-v]
	initrd /initramfs.cpio.gz
	params += enc_root=/dev/sda3 lvm luks root=/dev/mapper/vg-root rootfstype=ext4 resume=swap:/dev/mapper/vg-swap quiet
}

If you decided to do a manual kernel, with an encrypted HDD, you will need to read the next section after you made the changes to your config. If you decided to use genkernel or a manual kernel with unencrypted HDD, all is OK and it is now safe for you to go to the Grub2 setup.

[edit] encrypted disk with manual kernel

As you decided to make an encrypted disk setup with a manual kernel, you need to instal slashbeast's better-initrmafs. It is very simple to do. First clone the git-repository. If you aren't confident with git, feel free to have a look at our Git Guide.

# install -d /root/.git
# cd /root/.git
# git clone git://github.com/slashbeast/better-initramfs.git
# cd better-initramfs
# git checkout v0.3
# less README.rst
# echo "sys-apps/busybox static" >> /etc/portage/package.use/busybox && echo "sys-fs/cryptsetup static" >> /etc/portage/package.use/cryptsetup && echo "sys-fs/lvm2 static" >> /etc/portage/package.use/lvm2
# emerge -avt busybox cryptsetup lvm2
# make
>>> New better-initramfs is not backward compatible, read ChangeLog file.

>>> Preparing binary files...
>>> Adding /bin/busybox...
>>> Adding /sbin/cryptsetup...
>>> Adding /sbin/lvm.static...
>>> Building image...
>>> initramfs.cpio.gz is ready.
# cp initramfs.cpio.gz /boot

Now you are ready to setup grub2. Just go to the next section.

[edit] = Updating better-initramfs =

As the better-initrmafs project isn't controlled at the moment by an ebuild, you will need to take care of updating it by yourself, but it is very easy to do so:

# git checkout master
# git pull
# less ChangeLog
# git checkout vx.x
# make

where x.x is a version announced in the ChangeLog. At the moment the stable is 0.3.

[edit] setting up grub2

This step is easy. It is done with two commands;

# grub-install --no-floppy /dev/sda
# boot-update

A successful run of boot-update might will look like this:

 boot-update 1.5.2 / Copyright 2009-2011 Funtoo Technologies

 [use option "-l" for license info, "-h" for help]

 * Generating config for grub...

 DEFAULT > Funtoo Linux 64-bit - bzImage-2.6.39-rc7-git-a2b9c1f
           Funtoo Linux 64-bit - bzImage-2.6.39-rc7-git-446cc63
           Funtoo Linux 64-bit - bzImage-2.6.39-rc7-git-df8d06a

 * WARN : multiple matches found for default "Funtoo Linux 64-bit" - most recent used.
 * Completed successfully with warnings.
[edit] Extlinux

For Extlinux you will find a guide for setup at Extlinux.

[edit] finalize Setup

[edit] Necessary System Tools

As some tools are providing the same functionality, it is up to you to choose which ones you like to use. The next sections are giving you an overview of tools you might like to use and install, but all are optional.

[edit] System Logger

Linux and Unix have an excellent history of logging capabilities, if you want you can log from only special stuff up to everything that happens on your system in logfiles, for that behavior is a system logger the reason.

There are several in our repository from which you can choose:

  • sysklogd, which is a traditional set of system logging daemons,
  • syslog-ng, which is an advanced system logger and
  • metalog, which is a highly-configurable system logger,
  • rsyslog, seems to be a popular choice, default syslog of Fedora, RHEL, openSUSE, Debian and Ubuntu
  • there might be others available too, but at the moment we aren't aware of them.

We advice you to install next to sysklogd or syslog-ng the logrotate tool, as those system loggers don't provide a rotation machanism for the log files.

Just install the desired one like the example shows:

# emerge syslog-ng
# rc-update add syslog-ng default

[edit] Optional: Cron Daemon

Although this is optional it is in our opinion very handy and wise to install one. But you might ask yourself now "What the hell is a cron daemon?" A cron daemon just executes scheduled commands, so you see it can be very handy if you need to execute commands regularly.

In our tree there are three possible cron daemons; dcron, fcron and vixie-cron. We would like to advise you to use fcron, but it depends on what you like. also vixie-cron might be easier, as you don't need to execute crontab /etc/crontab, fcron might be more powerful.

# emerge fcron
# rc-update add fcron default
# crontab /etc/crontab

[edit] Optional: File Indexing

If you like to index your files for a fast search, you need to install mlocate so you can use the locate command to quickly search for them:

# emerge mlocate
# updatedb

[edit] File System Tools ==

As we used some special filesystems above you need to at least install xfsprogs, but there might be some others too, the following table gives you an overview:

File System Tool install command needed
XFS xfsprogs emerge xfsprogs X
JFS jfsprogs emerge jfsprogs
reiserfs reiserfsprogs emerge reiserfsprogs
btrfs btrfs-progs emerge btrfs-progs

[edit] Networkconfig

[edit] The Easy (Dynamic) Way

When configuring your network, one option is to skip traditional network configuration and simply rely on DHCP. This is by far the simplest method of configuring your network. If you are on a wired network, no other steps are typically required beyond enabling a DHCP client, and Funtoo Linux includes dhcpcd 5.x by default. To enable DHCP at system startup, you would add dhcpcd to your default runlevel as follows:

# rc-update add dhcpcd default
Note: If your going to use a third party package such as Network Manager or Wicd to manage your network then do not add dhcpcd to any runlevel. These packages handle DHCP for you.

[edit] The Modular Way

DHCP isn't always an option, and for these situations, Funtoo Linux offers its own modular, template-based network configuration system. This system offers a lot of flexibility for configuring network interfaces, essentially serving as a "network interface construction kit." This system can be used by itself, or even combined with dhcpcd -- if you limit dhcpcd to only manage certain network interfaces.

Here are the key components of the template-based network configuration system:

  1. /etc/init.d/netif.lo -- An init script that configures the localhost interface.

  2. /etc/netif.d -- This is a directory that contains various network configuration templates. Each of these templates is focused on configuring a particular type of network interface, such as a general static IP-based interface, a bridge interface, a bond interface, etc.

  3. /etc/init.d/netif.tmpl -- This is the master init script for the template-based network configuration system. New interfaces are added to your system by creating symbolic links to this file in /etc/init.d.

So, if you wanted to use this system to configure eth0 with a static IP address, you would create a netif.eth0 symlink to netif.tmpl as follows:

# cd /etc/init.d
# ln -s netif.tmpl netif.eth0

Then, you would create an /etc/conf.d/netif.eth0 configuration file that would specify which template to use from the /etc/netif.d directory:

template="interface"
ipaddr="10.0.1.200/24"
gateway="10.0.1.1"
nameservers="10.0.1.1 10.0.1.2"
domain="funtoo.org"

To complete our static IP network configuration we would need to:

# rc-update add netif.eth0 default

When configuring your own static network interface, one of ipaddr or ipaddrs is required and should specify the IP address(es) to configure for this interface, in "a.b.c.d/netmask" format. Optional parameters include gateway, which defines a default gateway for your entire network, and if set should specify the gateway's IP address. In addition, domain and nameservers (space-separated if more than one) can be used to specify DNS information for this interface.

[edit] Configuration Variables
[edit] Interface Variables

The following variables are supported by the interface and bridge templates:

  • ipaddr or ipaddrs: specify IPv4 or IPv6 address(es) for the interface. IP addresses should be specified in "IP/netmask" format, such as "10.0.0.1/24". Multiple IP addresses can be specified like this:
ipaddrs="10.0.0.1/24 10.0.0.2/24"

Note that in some cases, you may choose to not specify ipaddr or ipaddrs for a bridge template. That is allowed. If you don't want to specify an IP address for a regular interface, you can choose to use the interface template without an IP address specified in the config, or use the interface-noip template instead, for the sake of clarity.

Also note that if you specify multiple IP addresses, ifconfig will only show the first IP address. To view all IP addresses associated with the interface, use the ip addr show command.

[edit] General Variables

The following variables are enabled by default for all network scripts, and if specified will trigger a corresponding configuration action: nameservers: Set DNS nameservers using OpenResolv. Specify multiple nameservers like this: "1.2.3.4 1.2.3.5 1.2.3.6"

  • domain: Set DNS domain using OpenResolv.
  • gateway: Define a default IP gateway.
  • route: Specify a semi-colon delimited list of routes to apply when this interface is brought up. Will be appended to ip route add.
  • mtu: Set Maximum Transmit Unit for the interface
  • slaves: Set slave interfaces of this interface (for bridges, etc.) All slaves will automatically be depended upon, and will also automatically have their mtu set to that of the current interface, if an mtu is specified for the current interface. This setting is required for the bond template and optional for the bridge template.

[edit] VLAN Variables

VLAN support is enabled by default for all network configuration scripts. If a network script has a name in the format netif.ethX.Y, then it is assumed to be a VLAN interface referencing trunk ethX and VLAN ID Y. If you desire a custom name for your VLAN interface, you can name your interface whatever you'd like and specify the following variables in your interface config [file: file:]

  • trunk: VLAN trunk interface, e.g. "eth0"
  • vlan: VLAN id, e.g. "32"

[edit] OpenResolv and resolv.conf

For the network configuration above, OpenResolv will be used to set DNS information when the netif.eth0 is brought up. The OpenResolv framework will add entries to /etc/resolv.conf, and will also handle removing these entries when the interface is brought down. This way, /etc/resolv.conf should always contain current information and should not need to be manually edited by the system administrator. dhcpcd will use OpenResolv for updating system DNS information as well.

[edit] Network-Dependent Services

One important difference between Gentoo Linux and Funtoo Linux is that, in Funtoo Linux, network-dependent services only strictly depend on netif.lo. This means that if another network service requires an interface to be up, such as samba requiring eth0, then the system administrator must specify this relationship by adding the following line to /etc/conf.d/samba:

rc_need="netif.eth0"

This will have the effect of ensuring that netif.eth0 is started prior to samba and that samba is stopped prior to stopping netif.eth0.

Many network services, especially those that listen on all network intefaces, don't need an rc_need line in order to function properly. Avoiding the use of rc_need when required will optimize boot times and allow more network services to remain available when network interfaces are brought up and down by the system administrator.


[edit] Multiple Network Configurations

For information on how to have multiple, independent network configurations, please see Stacked Runlevels.

[edit] Alternate Configs

If you need to run the same service with different configuration parameters depending upon runlevel, then you'll be happy to know that you can specify runlevel-specific conf.d files by appending a . <runlevel> suffix. In this particular example, we could imagine a situation where we had two child runlevels named home and work:

/etc/conf.d/netif.eth0.home
/etc/conf.d/netif.eth0.work

Note that this feature works for all init scripts, not just network configuration scripts.

[edit] Interface Renaming

Funtoo network scripts now support interface renaming, so you can create an interface called lan if you would like. To so this, simply specify the MAC address of the interface you would like to rename using the macaddr variable: macaddr="00:15:17:19:b6:a3" If this MAC address is part of the netif.lan configuration file, then when this interface starts, whatever interface currently has the MAC address of 00:15:17:19:b6:a3 (i.e. eth5) will be renamed to lan prior to the interface being brought up, and will show up in ifconfig and ip commands as being an interface named lan.

[edit] Basic VLAN Configuration

The standard interface template supports VLANs. To use VLAN support, first configure the trunk interface using the interface-noip template. Assuming eth1 is trunked, you would create the file /etc/conf.d/netif.eth1 with the following contents:

template="interface-noip"

Then, create a network interface symlink for the trunk and add it to your default runlevel:

# cd /etc/init.d
# ln -s netif.tmpl netif.eth1
# rc-update add netif.eth1 default

Now, assuming you wanted to configure a VLAN of 32, you would create a config file named /etc/conf.d/netif.eth1.32 that looks something like this:

template="interface"
ipaddr="1.2.3.4/24"
gateway="1.2.3.1"# etc...

Then, create a VLAN network interface symlink and add it to your default runlevel:

# cd /etc/init.d
# ln -s netif.tmpl netif.eth1.32# rc-update add netif.eth1.32 default

The Funtoo network configuration scripts will automatically recognize the filename netif.eth1.32 as being VLAN 32 of trunk interface netif.eth1.

When the VLAN interface is brought up, it will be named eth1.32.

[edit] Custom VLAN Names

However, sometimes you may want to turn off automatic file-based VLAN naming and give your VLAN interface a custom name, such as mgmt. To do this, you would set up the trunk interface in the exact same way as described above, but instead of creating a netif.eth1.32 interface, you would create a netif.mgmt interface, and specify vlan and trunk in the /etc/conf.d/netif.mgmt config file, as follows:

template="interface"
vlan="32"
trunk="eth1"
ipaddr="1.2.3.4/24"
gateway="1.2.3.1"
# etc...

When you specify trunk and vlan in the interface config file, filename-based auto-detecting of VLAN ID and trunk is disabled. Both trunk and vlan must be specified -- you can't specify just one.

Then you would simply create a VLAN network interface symlink for netif.mgmt:

# cd /etc/init.d
# ln -s netif.tmpl netif.mgmt
# rc-update add netif.mgmt default

When the VLAN interface is brought up, it will be named mgmt.

[edit] More Complex Network Configuration

If the standard templates don't work for your needs, simply create a new template -- I recommend starting from the interface template for most things:

# cd /etc/netif.d
# cp interface custom

You can now call whatever commands you need to /etc/netif.d/custom. The following shell functions can be defined in a network script:

[edit] netif_create

In netif_create, you should call any commands to create the interface if it does not yet exist.

[edit] netif_depend

In netif_depend, you can define dependencies, using the functions need and use.

[edit] netif_pre_up

In netif_pre_up, you can define network configuration actions to perform prior to bringing the interface up. You can also ensure certain variables are specified by calling require var1 [var2...] here.

[edit] netif_post_up

In netif_post_up, you can define network configuration actions to perform after bringing the interface up.

[edit] netif_pre_down

In netif_pre_down, you can define network configuration actions to perform prior to bringing the interface down.

[edit] netif_post_down

In netif_post_down, you can define network configuration actions to perform after bringing the interface down.

[edit] netif_destroy

In netif_destroy, you can call any commands necessary to destroy/delete the interface if it is dynamic in nature (tun/tap, etc.)

[edit] How It Works

You do not specify a function for actually bringing up the interface, because the template-based system does this for you. The template-based system also performs all normal actions for required for bringing an interface down, so only need to specify atypical actions that must be performed - such as removing child interfaces or destroying a bridge using brctl.

When you create your own network configuration template, the following capabilities are available for use automatically, as long as the appropriate variables are set in the /etc/conf.d/netif.<ifname> file,, without requiring any explicit steps on your part:

  • DNS configuration using domain and nameservers config settings. OpenResolv is used automatically.
  • VLAN configuration using auto-naming (netif.ethX.Y) or via custom naming with trunk and vlan config settings.
  • Default gateway and route configuration using the gateway and route settings.
  • MTU configuration using the mtu setting.
  • Auto-depend (and auto-MTU configuration) of slave interfaces specified using slaves setting.
  • Renaming of existing network interface (specify MAC address using macaddr setting).

To take advantage of this functionality, simply enable the appropriate variables.

All other necessary network configuration and dependency behavior should be defined using the netif_-prefix functions described above.

[edit] Wireless Configuration

Wireless network configuration requires additional steps to the ones outlined above.

For wireless networks, you will need to enable wireless extensions in your kernel, the appropriate wireless modules, and emerge wireless-tools:

# emerge wireless-tools

I also recommend you emerge wpa_supplicant. wpa_supplicant implements modern WPA/WPA2 wireless link-layer encryption, which is necessary for connecting to most modern password-protected wireless networks:

# emerge wpa_supplicant

After emerging, add to your default runlevel as follows:

# rc-update add wpa_supplicant default

[edit] 802.11 Passphrases

The only remaining step is to use the wpa_passphrase utility to store hashed keys (passwords) that wpa_supplicant can use to connect to your favorite wireless networks. This is done as follows:

# wpa_passphrase jims-netgear >> /etc/wpa_supplicant/wpa_supplicant.conf
<enter your passphrase>

Now, when wpa_supplicant encounters an SSID of jims-netgear, it will use the password you entered to authenticate with this access point.

At this point, ensure that dhcpcd has been enabled in your current runlevel and type rc to start everything up. wpa_supplicant should be able to automatically associate with SSIDs in its config file, at which point dhcpcd will take over and acquire an IP address from a DHCP server. This should all happen seamlessly. Use the iwconfig command to see if you have successfully associated with an access point.


[edit] Wireless Firmware

Many wireless adapters will now have everything they need to work. However, if you have an Intel wireless adapter, then you may need to install the proper microcode for your device in addition to ensuring that the proper Intel Wireless kernel drivers are available. For my Intel Corporation PRO/Wireless AGN [Shiloh] Network Connection, I need to do the following:

# emerge net-wireless/iwl5000-ucode

udev (running by default) and the Linux kernel firmware loader support (CONFIG_FW_LOADER) will automatically load the microcode when needed.

Note that Gentoo and Funtoo provide different versions of the Intel microcode because the version you need will depend on the kernel you are using. For my RHEL5-based kernel, I had emerge an older version of the microcode to match what my kernel wireless driver was expecting by typing:

  1. emerge =net-wireless/iwl5000-ucode-5.4.0.11

This installed this file iwlwifi-5000-1.ucode which was required by my RHEL5-based kernel. Just typing emerge net-wireless-iwl5000-ucode installed iwlwifi-500-2.ucode, which my kernel could not use. Before I had the right version of the microcode, I saw an error like this when I viewed the kernel messages by typing dmesg: iwl5000: iwlwifi-5000-1.ucode firmware file req failed: Reason -2

This error message generally means "I can't find this file iwlwifi-5000-1.ucode that I'm looking for in /lib/firmware." With the proper firmware in place, then the wireless driver will be happy and wpa-supplicant can then bring the wireless interface up.

[edit] Set your root password

It's imperative that you set your root password before rebooting:

# passwd

[edit] Create a user account

Logging in as root is a bad idea on a Linux system. Before rebooting, create a user account for everyday use. Adjust the groups in the example below to match your needs. Some of them may not exist yet on your system. Replace '<user_name>' with the name your going to use for your everyday user. The '-m' option instructs useradd to create a home directory for your user. See the useradd manpage for more info.

useradd -m -G audio,cdrom,cdrw,floppy,usb,users,video,wheel -s /bin/bash <user_name>

Don't forget to set a password for your new user:

passwd <user_name>

[edit] Verify boot time services

You should verify that all of your needed services have been added to the appropriate runlevel.

eselect rc list | less

Scroll though the list and check. Example of things you might need to add:

  • lvm if you use logical volumes
  • Your system logger if you installed one
  • hibernate-cleanup if you use tuxonice
  • iptables
  • dbus

Add anything you need with the following command:

eselect rc add <script> <runlevel>

[edit] First boot

Now is the time to leave chroot, to unmount Funtoo Linux partitions and files and to restart your PC. If you installed GRUB, you will get an option to launch Funtoo Linux. Otherwise you will get to your already installed Linux and you will have to update your GRUB menu.

Leave the chroot, change directory to /, and unmount your funtoo partitions. Adjust the unmount command to match your setup

exit
cd /
umount /mnt/funtoo/home /mnt/funtoo/boot /mnt/funtoo/dev /mnt/funtoo/proc /mnt/funtoo/usr/portage /mnt/funtoo
Note: In case of LVM2 also: swapoff /dev/mapper/vg-swap, vgchange -a n , if not You will see: Device dmcrypt_root is busy. In case of luks: cryptsetup luksClose dmcrypt_root to close the container.


Restart

shutdown -r now

[edit] What's next