mirror of https://github.com/tLDP/LDP
new entry
This commit is contained in:
parent
e21a14e438
commit
aa451d9d84
|
@ -0,0 +1,590 @@
|
||||||
|
<!doctype linuxdoc system>
|
||||||
|
|
||||||
|
<!-- TODO: loader= -->
|
||||||
|
|
||||||
|
<!-- Lilo mini-howto -->
|
||||||
|
|
||||||
|
<article>
|
||||||
|
|
||||||
|
<!-- Title information -->
|
||||||
|
|
||||||
|
<title>Lilo mini-Howto
|
||||||
|
<author>Miroslav Skoric (<tt/m.skoric@eunet.yu/)
|
||||||
|
<date>v3.00, 24 July 2000
|
||||||
|
<abstract>
|
||||||
|
LILO is the most used <bf/Li/nux <bf/Lo/ader for the x86 flavour of
|
||||||
|
Linux; I'll call it Lilo rather than LILO here because I don't
|
||||||
|
appreciate uppercase. This file describes some typical Lilo
|
||||||
|
installations. It's intended as a supplement to the Lilo User's
|
||||||
|
Guide. I think examples are informative even if your setup isn't much
|
||||||
|
like mine. I hope this saves you trouble. Since Lilo's own
|
||||||
|
documentation is very good, who's interested in the details is
|
||||||
|
referred to /usr/doc/lilo*
|
||||||
|
<p>
|
||||||
|
This version of Lilo mini-HOWTO is based on work of Cameron Spitzer
|
||||||
|
(<tt/cls@truffula.sj.ca.us/) and Alessandro Rubini (<tt/rubini@linux.it/).
|
||||||
|
</abstract>
|
||||||
|
|
||||||
|
<!-- Table of contents -->
|
||||||
|
<toc>
|
||||||
|
|
||||||
|
<!-- Begin the document -->
|
||||||
|
|
||||||
|
<sect>Introduction
|
||||||
|
<p>
|
||||||
|
Although the documentation found in Lilo's sources (the one installed
|
||||||
|
in <tt>/usr/doc/lilo</tt>-version) is very comprehensive, most Linux
|
||||||
|
users experience some trouble in building their own
|
||||||
|
<tt>/etc/lilo.conf</tt> file. This document is meant to support them
|
||||||
|
by giving the minimal information and by showing five sample
|
||||||
|
installations:
|
||||||
|
|
||||||
|
<itemize>
|
||||||
|
|
||||||
|
<item>The first example is the classical ``Linux and other'' installation.
|
||||||
|
|
||||||
|
<item>The next one shows how to install Lilo on a hard drive
|
||||||
|
connected as <tt>/dev/hdc</tt> that will boot as <tt>/dev/hda</tt>.
|
||||||
|
This is usually needed when you install a new Linux drive from
|
||||||
|
your own running system. This also tells how to boot from SCSI
|
||||||
|
disks when your BIOS is modern enough.
|
||||||
|
|
||||||
|
<item>The third example shows how to boot a Linux system whose root
|
||||||
|
partition can't be accessed by the BIOS.
|
||||||
|
|
||||||
|
<item>The next sample file is used to access huge disks, that neither the
|
||||||
|
BIOS nor DOS can access easily (this one is somehow outdated).
|
||||||
|
|
||||||
|
<item>The last example shows how to restore a damaged disk,
|
||||||
|
if the damage resulted from installing another
|
||||||
|
operating system).
|
||||||
|
|
||||||
|
</itemize>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The last three examples are by Cameron, <tt/cls@truffula.sj.ca.us/>,
|
||||||
|
who wrote the original document. Alessandro <tt/rubini@linux.it/>
|
||||||
|
doesn't run anything but Linux, so he can't check
|
||||||
|
nor update them by himself. Needless to say, any feedback is welcome.
|
||||||
|
|
||||||
|
<sect>Background Information and Standard Installation
|
||||||
|
<p>
|
||||||
|
When Lilo boots the system, it uses BIOS calls to load the Linux
|
||||||
|
kernel off the disk (IDE drive, floppy or whatever). Therefore, the
|
||||||
|
kernel must live in some place that can be accessed by the bios.
|
||||||
|
<p>
|
||||||
|
At boot time, Lilo is not able to read filesystem data, and any
|
||||||
|
pathname you put in <tt>/etc/lilo.conf</tt> is resolved at
|
||||||
|
installation time (when you invoke <em>/sbin/lilo</em>). Installation
|
||||||
|
time is when the program builds the tables that list which sectors are
|
||||||
|
used by the files used to load the operating system. As a consequence,
|
||||||
|
all of these files must live in a partition that can be accessed by
|
||||||
|
the BIOS (the files are usually located in the <tt>/boot</tt>
|
||||||
|
directory, this means that only the root partition of your Linux
|
||||||
|
system needs to be accessed via the BIOS).
|
||||||
|
<p>
|
||||||
|
Another consequence of being BIOS-based is that you must reinstall the
|
||||||
|
loader (i.e., you must reinvoke <em>/sbin/lilo</em>) any time you
|
||||||
|
modify the Lilo setup. Whenever you recompile your kernel and
|
||||||
|
overwrite your old image you must reinstall Lilo.
|
||||||
|
|
||||||
|
<sect1>Where Should I Install Lilo?
|
||||||
|
<p>
|
||||||
|
The <tt/boot=/ directive in <tt>/etc/lilo.conf</tt> tells Lilo where
|
||||||
|
it should place its primary boot loader. In general, you can either
|
||||||
|
specify the master boot record (<tt>/dev/hda</tt>) or the root
|
||||||
|
partition of your Linux installation (is usually is <tt>/dev/hda1</tt>
|
||||||
|
or <tt>/dev/hda2</tt>).
|
||||||
|
<p>
|
||||||
|
If you have another operating system installed in your hard drive,
|
||||||
|
you'd better install Lilo to the root partition instead of the MBR. In
|
||||||
|
this case, you must mark the partition as ``bootable'' using the ``a''
|
||||||
|
command of <em>fdisk</em> or the ``b'' command of <em>cfdisk</em>. If
|
||||||
|
you don't overwrite the master boot sector you'll find it easier to
|
||||||
|
uninstall Linux and Lilo if needed.
|
||||||
|
<p>
|
||||||
|
Of course, you always have a way to avoid some "rules" like above. Well,
|
||||||
|
you may install Lilo to the MBR even if you already have another operating
|
||||||
|
system installed there. For example, if you installed Windows NT 4.0 as the
|
||||||
|
first operating system on your machine, then NT's boot loader was placed into
|
||||||
|
the MBR so you were able to boot NT without problems. After you installed
|
||||||
|
Linux and chose to install Lilo to the MBR, Lilo rewrote NT's boot loader.
|
||||||
|
Next time you boot your machine, you won't be able to boot NT. But, there
|
||||||
|
is no problem. You just should edit your /etc/lilo.conf and add a new entry
|
||||||
|
for NT. Next time you re-boot your system, there will be the new added entry
|
||||||
|
for NT under Lilo.
|
||||||
|
<sect1>How Should I Configure my IDE Hard Drives?
|
||||||
|
<p>
|
||||||
|
I personally don't use LBA or LARGE settings in the BIOS (but I only
|
||||||
|
run Linux); they are horrible kludges forced on by design deficiencies
|
||||||
|
in the PC world. This requires that the kernel lives in the first 1024
|
||||||
|
cylinders, but this is not a problem as long as you partition your
|
||||||
|
hard drives and keep root small (as you should do anyways).
|
||||||
|
<p>
|
||||||
|
If your hard disk already carries another operating system, you won't
|
||||||
|
be able to modify the BIOS settings, or the old system won't work any
|
||||||
|
more. All recent Lilo distribution are able to deal with LBA and LARGE
|
||||||
|
disk settings.
|
||||||
|
<p>
|
||||||
|
Note that the "<tt/linear/" keyword in <tt>/etc/lilo.conf</tt> can
|
||||||
|
help in dealing with geometry problems. The keyword instructs Lilo to
|
||||||
|
use linear sector addresses instead of sector/head/cylinder tuples.
|
||||||
|
Conversion to 3D addresses is delayed to run-time, therefore making
|
||||||
|
the setup more immune to geometry problems.
|
||||||
|
<p>
|
||||||
|
If you have more than one hard disk and some of them are only used by
|
||||||
|
Linux and are not involved in the boot process, you can tell your BIOS
|
||||||
|
that they are not installed. Your system will boot more quickly and
|
||||||
|
Linux will autodetect all the disks in no time. I often switch disks
|
||||||
|
in my computers, but I never touch the BIOS configuration.
|
||||||
|
|
||||||
|
<sect1>How Can I Interact at Boot Time?
|
||||||
|
<p>
|
||||||
|
When you see the Lilo prompt, you can hit the <Tab> key to show
|
||||||
|
the list of possible choices. If Lilo is not configured to be
|
||||||
|
interactive, press and hold the <Alt> or <Shift> key
|
||||||
|
before the ``LILO'' message appears.
|
||||||
|
<p>
|
||||||
|
If you choose to boot a Linux kernel, you can add command-line
|
||||||
|
arguments after the name of the system you choose. The kernel accepts
|
||||||
|
many command-line arguments. All the arguments are listed in the
|
||||||
|
``BootPrompt-HOWTO'' by Paul Gortmaker, and I won't replicate it
|
||||||
|
here. A few command line arguments, however, are particularly
|
||||||
|
important and worth describing here:
|
||||||
|
|
||||||
|
<itemize>
|
||||||
|
|
||||||
|
<item><tt/root=/: you can tell the Linux kernel to mount as root
|
||||||
|
a different partition than the one appearing in <tt/lilo.conf/.
|
||||||
|
For example, my system has a tiny partition hosting a minimal Linux
|
||||||
|
installation, and I've been able to boot the system after
|
||||||
|
destroying my root partition by mistake.
|
||||||
|
|
||||||
|
<item><tt/init=/: verson 1.3.43 and newer of the Linux kernel can
|
||||||
|
execute another command instead of <tt>/sbin/init</tt>, as specified
|
||||||
|
on the command line. If you experience bad problems
|
||||||
|
during the boot process, you can access the bare system by
|
||||||
|
specifying <tt>init=/bin/sh</tt> (when you are at the shell
|
||||||
|
prompt you most likely will need to mount your disks: try
|
||||||
|
``<tt>mount -w -n -o remount /; mount -a</tt>'',
|
||||||
|
and remember to ``<tt>umount -a</tt>'' before turning off
|
||||||
|
the computer).
|
||||||
|
|
||||||
|
<item>A number: by specifying a number on the kernel command line, you
|
||||||
|
instruct <em>init</em> to enter a specific run-level (the
|
||||||
|
default is usually 3 or 2, according to the distribution you chose).
|
||||||
|
Refer to the <em>init</em> documentation, to <tt>/etc/inittab</tt>
|
||||||
|
and to <tt>/etc/rc*.d</tt> to probe further.
|
||||||
|
|
||||||
|
</itemize>
|
||||||
|
|
||||||
|
<sect1>How Can I Uninstall Lilo?
|
||||||
|
<p>
|
||||||
|
When Lilo overwrites a boot sector, it saves a backup copy in
|
||||||
|
<tt>/boot/boot.</tt><em/xxyy/, where <em/xxyy/ are the major and minor
|
||||||
|
numbers of the device, in hex. You can see the major and minor numbers
|
||||||
|
of your disk or partition by running ``<tt>ls -l
|
||||||
|
/dev/</tt><em/device/''. For example, the first sector of
|
||||||
|
<tt>/dev/hda</tt> (major 3, minor 0) will be saved in
|
||||||
|
<tt>/boot/boot.0300</tt>, installing Lilo on <tt>/dev/fd0</tt> creates
|
||||||
|
<tt>/boot/boot.0200</tt> and installing on <tt>/dev/sdb3</tt> (major
|
||||||
|
8, minor 19) creates <tt>/boot/boot.0813</tt>. Note that Lilo won't
|
||||||
|
create the file if there is already one so you don't need to care about
|
||||||
|
the backup copy whenever you reinstall Lilo (for example, after
|
||||||
|
recompiling your kernel). The backup copies found in <tt>/boot/</tt>
|
||||||
|
are always the snapshot of the situation before installing any Lilo.
|
||||||
|
<p>
|
||||||
|
If you ever need to uninstall Lilo (for example, in the unfortunate
|
||||||
|
case you need to uninstall Linux), you just need to restore the
|
||||||
|
original boot sector. If Lilo is installed in <tt>/dev/hda</tt>, just
|
||||||
|
do ``<tt>dd if=/boot/boot.0300 of=/dev/hda bs=446 count=1</tt>'' (I
|
||||||
|
personally just do ``<tt>cat /boot/boot.0300 > /dev/hda</tt>'', but
|
||||||
|
this is not safe, as this will restore the original partition table as
|
||||||
|
well, which you might have modified in the meanwhile). This command is
|
||||||
|
much easier to run than trying ``<tt>fdisk /mbr</tt>'' from a DOS
|
||||||
|
shell: it allows you to cleanly remove Linux from a disk without ever
|
||||||
|
booting anything but Linux. After removing Lilo remember to run Linux'
|
||||||
|
<em>fdisk</em> to destroy any Linux partition (DOS' <em>fdisk</em> is
|
||||||
|
unable to remove non-dos partitions).
|
||||||
|
<p>
|
||||||
|
If you installed Lilo on your root partition (e.g., <tt>/dev/hda2</tt>),
|
||||||
|
nothing special needs to be done to uninstall Lilo. Just run Linux'
|
||||||
|
<em>fdisk</em> to remove Linux partitions from the partition
|
||||||
|
table. You must also mark the DOS partition as bootable.
|
||||||
|
|
||||||
|
<sect>The Simple Configuration
|
||||||
|
<p>
|
||||||
|
Most Lilo installations use a configuration file like the
|
||||||
|
following one:
|
||||||
|
|
||||||
|
<verb>
|
||||||
|
boot = /dev/hda # or your root partition
|
||||||
|
delay = 10 # delay, in tenth of a second (so you can interact)
|
||||||
|
vga = 0 # optional. Use "vga=1" to get 80x50
|
||||||
|
#linear # try "linear" in case of geometry problems.
|
||||||
|
|
||||||
|
image = /boot/vmlinux # your zImage file
|
||||||
|
root = /dev/hda1 # your root partition
|
||||||
|
label = Linux # or any fancy name
|
||||||
|
read-only # mount root read-only
|
||||||
|
|
||||||
|
other = /dev/hda4 # your dos partition, if any
|
||||||
|
table = /dev/hda # the current partition table
|
||||||
|
label = dos # or any non-fancy name
|
||||||
|
</verb>
|
||||||
|
<p>
|
||||||
|
You can have multiple ``image'' and ``other'' sections if you want. It's
|
||||||
|
not uncommon to have several kernel images configured in your
|
||||||
|
<em>lilo.conf</em>, at least if you keep up to date with kernel
|
||||||
|
development.
|
||||||
|
|
||||||
|
<sect1>How to Deal with Big Kernels
|
||||||
|
<p>
|
||||||
|
If you compile a ``zImage'' kernel and it is too big to fit in half a
|
||||||
|
megabyte (this is commong with new 2.1 kernels), you should build a
|
||||||
|
``big zImage'' instead: ``<tt>make bzImage</tt>''. To boot a big
|
||||||
|
kernel image nothing special is needed, but you need version 18 or
|
||||||
|
newer of Lilo. If your installation is older, you should upgrade your
|
||||||
|
Lilo package.
|
||||||
|
|
||||||
|
<sect1>Other Sources of Information
|
||||||
|
<p>
|
||||||
|
In addition to the Lilo docs, there are a number of mini-howto's that
|
||||||
|
can be useful for your needs. All of them are called
|
||||||
|
``Linux+<em/foobarOS/'', for some <em/foobarOS/, they deal with
|
||||||
|
coexistence of Linux and other operationg system(s). For example,
|
||||||
|
"NT OS Loader + Linux mini-HOWTO" by Bernd Reichert, describes how to
|
||||||
|
add an entry for Linux under existing Windows NT Loader's menu. Also,
|
||||||
|
``Multiboot-with-LILO'' describes how the various Windows flavours can
|
||||||
|
be made to coexist with Linux. Here we will talk about adding an entry
|
||||||
|
for Windows NT under the existing Lilo menu.
|
||||||
|
|
||||||
|
<sect1>How to Boot Windows NT from Lilo menu
|
||||||
|
<p>
|
||||||
|
Here I will give you an order of routines you have to do if you want
|
||||||
|
to have both Linux and NT entries under Lilo menu:
|
||||||
|
|
||||||
|
<itemize>
|
||||||
|
|
||||||
|
<item>First of all, I would suggest you to install a fresh copy of
|
||||||
|
Windows NT 4.0 on your hard disk. I suppose that you already
|
||||||
|
made a backup of your important data, so the NT installation
|
||||||
|
shouldn't be a problem. During the NT installation, setup is
|
||||||
|
not going to ask you where to place NT's boot loader, so it
|
||||||
|
would be placed into the MBR (Master Boot Record) of your hard
|
||||||
|
disk. But, there is a possibility for a previous content of
|
||||||
|
the MBR to remain within the MBR (especially any previous
|
||||||
|
Lilo), so I would suggest you (befrre installation of NT) to
|
||||||
|
boot the computer with a DOS floppy diskette having DOS version
|
||||||
|
of FDISK. At the prompt a:\ just enter the command: fdisk /mbr
|
||||||
|
and restart the computer again (without that floppy).
|
||||||
|
|
||||||
|
<item>After you have successfully installed your NT, you will see that
|
||||||
|
it uses the whole hard disk or a specific partition of the hard
|
||||||
|
disk (depending on what you decided during the setup process).
|
||||||
|
So, it is advisible to 'shrink' the partition where NT resides
|
||||||
|
in order to make some free space on the disk. Onto that free space
|
||||||
|
you will install your Linux. After you have your NT configured
|
||||||
|
and running, you have to boot your computer using a floppy
|
||||||
|
diskette with Partition Magic utility by Power Quest. It is a
|
||||||
|
graphical tool able to see all partitions on all hard disks you
|
||||||
|
have. The best thing is that you can make some changes with your
|
||||||
|
partitions but not to destroy your existing data. One of the
|
||||||
|
available changes is to make your existing partition(s) smaller,
|
||||||
|
so to get some free space on the disk(s) for other purposes.
|
||||||
|
Although you are advised to make a backup before you make any
|
||||||
|
changes to the partitions, I usually practise to 'shrink' NT's
|
||||||
|
partition before I installed anything but NT itself (so, if
|
||||||
|
needed, a repetitive re-installation wouldn't be a problem).
|
||||||
|
Well, Partition Magic (or any other similar utility you are
|
||||||
|
familiar with) will shrink your NT's partition (either NTFS or
|
||||||
|
FAT) to a smaller measure and place it to either the beginning
|
||||||
|
or to the end of the previous measure. It means that you may
|
||||||
|
choose to have your 'shrinked' NT partition at the beginning
|
||||||
|
or at the end of your disk (I usually choose NT to be at the
|
||||||
|
beginning, so the ending part of the disk will become a 'free
|
||||||
|
space'). After the 'shrinkin' is finished, you may re-boot your
|
||||||
|
NT in order to check the new situation: you may use Windows
|
||||||
|
Explorer or Disk Administrator for that.
|
||||||
|
|
||||||
|
<item>So far so good. Next step is to install your Linux. Case you
|
||||||
|
are familiar with RedHat distribution (I hope with other distros
|
||||||
|
is the same or similar), you start by putting your installation
|
||||||
|
CD in the drive and re-boot the computer). Well, when you are about
|
||||||
|
to choose what type of installation it will be (Gnome or KDE
|
||||||
|
Workstation, Custom, etc.) you may choose whatever you planned
|
||||||
|
before, but I would suggest to install a Workstation at first.
|
||||||
|
This is good because Linux setup will find automatically the
|
||||||
|
free space on the (first) hard disk, make all partitions needed
|
||||||
|
for Linux, format them properly, make majority of option by
|
||||||
|
default so you won't have much pain during the setup (later, if
|
||||||
|
you want, you may either to add missing components or re-install
|
||||||
|
Linux as Custom over the existing linux partitions). Lilo should
|
||||||
|
go to the MBR.
|
||||||
|
|
||||||
|
<item>After it looks that Linux installation is finished, you are going
|
||||||
|
to re-start the computer and there there you will only see Lilo
|
||||||
|
with one Linux entry to boot (or maybe more than one Linux
|
||||||
|
entry, in case your hardware is multi-processor one). But, don't
|
||||||
|
panic! Your Windows NT is still there where you had installed it
|
||||||
|
before Linux. You should become some familiar with Linux as soon
|
||||||
|
as possible, in order to be able to find and edit your new
|
||||||
|
/etc/lilo.conf file. When you open this file for the first time,
|
||||||
|
you'll see that there is only one (or more) Linux entry. Well,
|
||||||
|
you should know the exact position (read: a partition) where
|
||||||
|
Windows NT has been installed, so you could add an appropriate
|
||||||
|
entry into /etc/lilo.conf file. After you do that, restart Lilo
|
||||||
|
and, after the next re-boot, you will have both 'linux' and 'nt'
|
||||||
|
entries under Lilo menu.
|
||||||
|
|
||||||
|
|
||||||
|
<sect>Installing <tt/hdc/ to Boot as <tt/hda/ and Using <tt>bios=</tt>
|
||||||
|
<p>
|
||||||
|
Lilo allows to map the kernel image from one disk and instruct the
|
||||||
|
BIOS to retrieve it from another disk. For example, it's common for me
|
||||||
|
to install Linux on a disk I connect to <tt/hdc/ (master disk of
|
||||||
|
secondary controller) and boot it as a standalong system on the primary
|
||||||
|
IDE controller of another computer. I copied the installation floppy
|
||||||
|
to a tiny partition, so I can run <em>chroot</em> in a virtual
|
||||||
|
console to install <tt/hdc/ while I use the system to do something else.
|
||||||
|
<p>
|
||||||
|
The <em>lilo.conf</em> file I use to install Lilo looks like:
|
||||||
|
|
||||||
|
<verb>
|
||||||
|
# This file must be used from a system running off /dev/hdc
|
||||||
|
boot = /dev/hdc # overwrite MBR of hdc
|
||||||
|
disk = /dev/hdc # tell how hdc will look like:
|
||||||
|
bios = 0x80 # the bios will see it as first drive
|
||||||
|
delay = 0
|
||||||
|
vga = 0
|
||||||
|
|
||||||
|
image = /boot/vmlinux # this is on /dev/hdc1
|
||||||
|
root = /dev/hda1 # but at boot it will be hda1
|
||||||
|
label = Linux
|
||||||
|
read-only
|
||||||
|
</verb>
|
||||||
|
<p>
|
||||||
|
This configuration file must be read by a Lilo running <bf>off
|
||||||
|
/dev/hdc1</bf>. The Lilo maps that get written the boot sector
|
||||||
|
(<tt>/dev/hdc</tt>) must refer to the files in <tt>/boot</tt>
|
||||||
|
(currently installed as hdc); such files will be accessed under hda
|
||||||
|
when this disk will be booted as a standalone system.
|
||||||
|
<p>
|
||||||
|
I call this configuration file <tt>/mnt/etc/lilo.conf.hdc</tt>
|
||||||
|
(<tt>/mnt</tt> is where hdc is mounted during the installation. I
|
||||||
|
install Lilo by invoking ``<tt>cd /mnt; chroot . sbin/lilo -C
|
||||||
|
/etc/lilo.conf.hdc</tt>''. Refer to the manual page for
|
||||||
|
<em>chroot</em> if this looks magic.
|
||||||
|
<p>
|
||||||
|
The ``<tt>bios=</tt>'' directive in <tt>lilo.conf</tt> is used to tell
|
||||||
|
Lilo what the BIOS thinks of your devices. BIOS calls identify floppy
|
||||||
|
disks and hard drives with a number: 0x00 and 0x01 select the floppy
|
||||||
|
drives, 0x80 and the following numbers select hard disks (old BIOSes
|
||||||
|
can only access two disks). The meaning of ``<tt>bios = 0x80</tt> in
|
||||||
|
the previous sample file is therefore ``use 0x80 in your BIOS calls
|
||||||
|
for <tt>/dev/hdc</tt>''.
|
||||||
|
<p>
|
||||||
|
This Lilo directive can be handy in other situations, for example when
|
||||||
|
your BIOS is able to boot from SCSI disks instead of IDE ones. When
|
||||||
|
both IDE and SCSI devices are there, Lilo can't tell whether 0x80 will
|
||||||
|
refer to one or the other because the user is able to choose it in the
|
||||||
|
BIOS configuration menus, and the BIOS can't be accessed while Linux
|
||||||
|
is running.
|
||||||
|
<p>
|
||||||
|
By default, Lilo assumes that IDE drives are mapped first by the BIOS,
|
||||||
|
but this can be overridden by using instructions like these in
|
||||||
|
<tt>/etc/lilo.conf</tt>:
|
||||||
|
|
||||||
|
<verb>
|
||||||
|
disk = /dev/sda
|
||||||
|
bios = 0x80
|
||||||
|
</verb>
|
||||||
|
|
||||||
|
<sect>Using Lilo When the BIOS Can't See the Root Partition
|
||||||
|
<p>
|
||||||
|
I have two IDE drives, and a SCSI drive. The SCSI drive can't be seen
|
||||||
|
from BIOS. The Linux Loader, Lilo, uses BIOS calls and can only see
|
||||||
|
drives that BIOS can see. My stupid AMI BIOS will only boot from "A:"
|
||||||
|
or "C:" My root file system is on a partition on the SCSI drive.
|
||||||
|
<p>
|
||||||
|
The solution consists in storing the kernel, map file, and chain
|
||||||
|
loader in a Linux partition on the first IDE. Notice that it is not
|
||||||
|
necessary to keep your kernel on your root partition.
|
||||||
|
<p>
|
||||||
|
The second partition on my first IDE (<tt>/dev/hda2</tt>, the Linux
|
||||||
|
partition used to boot the system) is mounted on <tt>/u2</tt>. Here
|
||||||
|
is the <tt>/etc/lilo.conf</tt> file I used.
|
||||||
|
|
||||||
|
<verb>
|
||||||
|
# Install Lilo on the Master Boot Record
|
||||||
|
# on the first IDE.
|
||||||
|
#
|
||||||
|
boot = /dev/hda
|
||||||
|
# /sbin/lilo (the installer) copies the Lilo boot record
|
||||||
|
# from the following file to the MBR location.
|
||||||
|
install = /u2/etc/lilo/boot.b
|
||||||
|
#
|
||||||
|
# I wrote a verbose boot menu. Lilo finds it here.
|
||||||
|
message = /u2/etc/lilo/message
|
||||||
|
# The installer will build the following file. It tells
|
||||||
|
# the boot-loader where the blocks of the kernels are.
|
||||||
|
map = /u2/etc/lilo/map
|
||||||
|
compact
|
||||||
|
prompt
|
||||||
|
# Wait 10 seconds, then boot the 1.2.1 kernel by default.
|
||||||
|
timeout = 100
|
||||||
|
# The kernel is stored where BIOS can see it by doing this:
|
||||||
|
# cp -p /usr/src/linux/arch/i386/boot/zImage /u2/z1.2.1
|
||||||
|
image = /u2/z1.2.1
|
||||||
|
label = 1.2.1
|
||||||
|
# Lilo tells the kernel to mount the first SCSI partition
|
||||||
|
# as root. BIOS does not have to be able to see it.
|
||||||
|
root = /dev/sda1
|
||||||
|
# This partition will be checked and remounted by /etc/rc.d/rc.S
|
||||||
|
read-only
|
||||||
|
# I kept an old Slackware kernel lying around in case I built a
|
||||||
|
# kernel that doesn't work. I actually needed this once.
|
||||||
|
image = /u2/z1.0.9
|
||||||
|
label = 1.0.9
|
||||||
|
root = /dev/sda1
|
||||||
|
read-only
|
||||||
|
# My DR-DOS 6 partition.
|
||||||
|
other = /dev/hda1
|
||||||
|
loader=/u2/etc/lilo/chain.b
|
||||||
|
label = dos
|
||||||
|
alias = m
|
||||||
|
</verb>
|
||||||
|
|
||||||
|
<sect>Accessing Huge Disks When the BIOS Can't
|
||||||
|
<p>
|
||||||
|
The system in my office has a 1GB IDE drive. The BIOS can only see
|
||||||
|
the first 504 MB of the IDE. (Where MB means 2**10 bytes, not 10**6
|
||||||
|
bytes.) So I have MS-DOS on a 350 MB partition <tt>/dev/hda1</tt> and
|
||||||
|
my Linux root on a 120 MB partition <tt>/dev/hda2</tt>.
|
||||||
|
<p>
|
||||||
|
MS-DOS was unable to install itself correctly when the drive was
|
||||||
|
fresh. Novell DOS 7 had the same problem. Luckily for me, "Options
|
||||||
|
by IBM" forgot to put the "OnTrack" diskette in the box with the
|
||||||
|
drive. The drive was supposed to come with a product called "OnTrack
|
||||||
|
Disk Manager." If you only have MSDOS, I guess you have to use it.
|
||||||
|
<p>
|
||||||
|
So I made a partition table with Linux' fdisk. MSDOS-6.2 refused to
|
||||||
|
install itself in <tt>/dev/hda1</tt>. It said something like ``this
|
||||||
|
release of MS-DOS is for new installations. Your computer already has
|
||||||
|
MS-DOS so you need to get an upgrade release from your dealer.''
|
||||||
|
Actually, the disk was brand new.
|
||||||
|
<p>
|
||||||
|
What a crock! So I ran Linux' fdisk again and deleted partition 1
|
||||||
|
from the table. This satisfied MS-DOS 6.2 which proceeded to create
|
||||||
|
the exact same partition 1 I had just deleted and installed itself.
|
||||||
|
MS-DOS 6.2 wrote its Master Boot Record on the drive, but it couldn't
|
||||||
|
boot.
|
||||||
|
<p>
|
||||||
|
Luckily I had a Slackware kernel on floppy (made by the Slackware
|
||||||
|
installation program "setup"), so I booted Linux and wrote Lilo over
|
||||||
|
MS-DOS' broken MBR. This works. Here is the <tt>/etc/lilo.conf</tt>
|
||||||
|
file I used:
|
||||||
|
|
||||||
|
<verb>
|
||||||
|
boot = /dev/hda
|
||||||
|
map = /lilo-map
|
||||||
|
delay = 100
|
||||||
|
ramdisk = 0 # Turns off ramdisk in Slackware kernel
|
||||||
|
timeout = 100
|
||||||
|
prompt
|
||||||
|
disk = /dev/hda # BIOS only sees first 500 MB.
|
||||||
|
bios = 0x80 # specifies the first IDE.
|
||||||
|
sectors = 63 # get the numbers from your drive's docs.
|
||||||
|
heads = 16
|
||||||
|
cylinders = 2100
|
||||||
|
image = /vmlinuz
|
||||||
|
append = "hd=2100,16,63"
|
||||||
|
root = /dev/hda2
|
||||||
|
label = linux
|
||||||
|
read-only
|
||||||
|
vga = extended
|
||||||
|
other = /dev/hda1
|
||||||
|
label = msdos
|
||||||
|
table = /dev/hda
|
||||||
|
loader = /boot/chain.b
|
||||||
|
</verb>
|
||||||
|
<p>
|
||||||
|
After I installed these systems, I verified that the partition
|
||||||
|
containing the zImage, boot.b, map, chain.b, and message files can use
|
||||||
|
an msdos file system, as long as it is not "stackered" or
|
||||||
|
"doublespaced." So I could have made the DOS partition on
|
||||||
|
<tt>/dev/hda1</tt> 500 MB.
|
||||||
|
<p>
|
||||||
|
I have also learned that "OnTrack" would have written a partition
|
||||||
|
table starting a few dozen bytes into the drive, instead of at the
|
||||||
|
beginning, and it is possible to hack the Linux IDE driver to work
|
||||||
|
around this problem. But installing would have been impossible with
|
||||||
|
the precompiled Slackware kernel. Eventually, IBM sent me an
|
||||||
|
"OnTrack" diskette. I called OnTrack's technical support. They told
|
||||||
|
me Linux is broken because Linux doesn't use BIOS. I gave their
|
||||||
|
diskette away.
|
||||||
|
|
||||||
|
<sect>Booting from a Rescue Floppy
|
||||||
|
<p>
|
||||||
|
Next, I installed Windows-95 on my office system. It blew away my nice
|
||||||
|
Lilo MBR, but it left my Linux partitions alone. Kernels take a long
|
||||||
|
time to load from floppy, so I made a floppy with a working Lilo setup
|
||||||
|
on it, which could boot my kernel from the IDE.
|
||||||
|
|
||||||
|
I made the lilo floppy like so:
|
||||||
|
<verb>
|
||||||
|
fdformat /dev/fd0H1440 # lay tracks on virgin diskette
|
||||||
|
mkfs -t minix /dev/fd0 1440 # make file system of type minix
|
||||||
|
mount /dev/fd0 /mnt # mount in the standard tmp mount point
|
||||||
|
cp -p /boot/chain.b /mnt # copy the chain loader over
|
||||||
|
lilo -C /etc/lilo.flop # install Lilo and the map on the diskette.
|
||||||
|
umount /mnt
|
||||||
|
</verb>
|
||||||
|
<p>
|
||||||
|
Notice that the diskette <bf>must be mounted when you run the
|
||||||
|
installer</bf> so that Lilo can write its map file properly.
|
||||||
|
<P>
|
||||||
|
This file is /etc/lilo.flop. It's almost the same as the last one:
|
||||||
|
|
||||||
|
<verb>
|
||||||
|
# Makes a floppy that can boot kernels from HD.
|
||||||
|
boot = /dev/fd0
|
||||||
|
map = /mnt/lilo-map
|
||||||
|
delay = 100
|
||||||
|
ramdisk = 0
|
||||||
|
timeout = 100
|
||||||
|
prompt
|
||||||
|
disk = /dev/hda # 1 GB IDE, BIOS only sees first 500 MB.
|
||||||
|
bios=0x80
|
||||||
|
sectors = 63
|
||||||
|
heads = 16
|
||||||
|
cylinders = 2100
|
||||||
|
image = /vmlinuz
|
||||||
|
append = "hd=2100,16,63"
|
||||||
|
root = /dev/hda2
|
||||||
|
label = linux
|
||||||
|
read-only
|
||||||
|
vga = extended
|
||||||
|
other = /dev/hda1
|
||||||
|
label = msdos
|
||||||
|
table = /dev/hda
|
||||||
|
loader = /mnt/chain.b
|
||||||
|
</verb>
|
||||||
|
<p>
|
||||||
|
Finally, I needed MS-DOS 6.2 on my office system, but I didn't
|
||||||
|
want to touch the first drive. I added a SCSI controller and
|
||||||
|
drive, made an msdos file system on it with Linux' mkdosfs, and
|
||||||
|
Windows-95 sees it as "D:". But of course MSDOS will not boot
|
||||||
|
off of D:. This is not a problem when you have Lilo. I added
|
||||||
|
the following to the <tt>lilo.conf</tt> in Example 2.
|
||||||
|
|
||||||
|
<verb>
|
||||||
|
other = /dev/sda1
|
||||||
|
label = d6.2
|
||||||
|
table = /dev/sda
|
||||||
|
loader = /boot/any_d.b
|
||||||
|
</verb>
|
||||||
|
With this modification MSDOS-6.2 runs, and it thinks it is on C: and
|
||||||
|
Windows-95 is on D:.
|
||||||
|
|
||||||
|
</article>
|
|
@ -0,0 +1,470 @@
|
||||||
|
<!doctype linuxdoc system>
|
||||||
|
<article>
|
||||||
|
<title>Programming Languages mini-HOWTO
|
||||||
|
</title>
|
||||||
|
<author>Risto S. Varanka
|
||||||
|
</author>
|
||||||
|
<date>Jul 22nd 2000
|
||||||
|
</date>
|
||||||
|
<abstract>A brief comparison of major programming languages for
|
||||||
|
Linux and major libraries for creating graphical user interfaces
|
||||||
|
(GUIs) under Linux
|
||||||
|
</abstract>
|
||||||
|
|
||||||
|
<toc>
|
||||||
|
|
||||||
|
<sect>Introduction
|
||||||
|
|
||||||
|
<p>Linux is a fascinating operating system because it lets any
|
||||||
|
user participate in its development. The variety of available
|
||||||
|
languages, however, can be confusing to beginning Linux
|
||||||
|
developers. This document lists the most common options for
|
||||||
|
everyday development and states some key facts about them. (Well,
|
||||||
|
``most common'' and ``key'' as I perceive them.)</p>
|
||||||
|
|
||||||
|
<!-- point to possible larger howto -->
|
||||||
|
|
||||||
|
<p>My aim is neither to review the languages nor to determine
|
||||||
|
which one is the best. Each language is a tool that fits some
|
||||||
|
jobs and some tastes. You can get further (often conflicting)
|
||||||
|
information easily, if you ask around or keep your ears open. The
|
||||||
|
Links sections in this document will give you some pointers for
|
||||||
|
your own research.</p>
|
||||||
|
|
||||||
|
<!-- perhaps there should be some freeform discussion in the
|
||||||
|
Comments part of the tables -->
|
||||||
|
|
||||||
|
<!-- why is my language not included? perhaps explain that in
|
||||||
|
detail -->
|
||||||
|
|
||||||
|
<p>There is a plethora of languages and libraries for Linux, so
|
||||||
|
this document only covers the most common languages and GUI
|
||||||
|
(Graphical User Interface) toolkits at the moment. This document
|
||||||
|
is intended to be fairly neutral, but I haven't included all
|
||||||
|
languages available. Since my judgment is undoubtedly biased in
|
||||||
|
many ways, I advise serious developers to check out the sites that
|
||||||
|
do a better job in listing all languages and libraries. Also note
|
||||||
|
that only the Linux implementations of the languages and GUI
|
||||||
|
toolkits are covered, their features on other platforms are not
|
||||||
|
discussed or implied.</p>
|
||||||
|
|
||||||
|
<p>This document is a recent addition to the LDP, so there has not
|
||||||
|
been opportunity for much community feedback. However, it is
|
||||||
|
released in hopes that it will prove useful for people interested
|
||||||
|
in programming under Linux, especially beginners. A question mark
|
||||||
|
in the tables indicates lack of information. If you can fill it
|
||||||
|
in, please contact the author. </p>
|
||||||
|
|
||||||
|
<sect1>Latest Version of the Document
|
||||||
|
|
||||||
|
<p>You can find the latest modifications at <url
|
||||||
|
url="http://www.helsinki.fi/~rvaranka/Computer/Linux/HOWTO/"
|
||||||
|
name="http://www.helsinki.fi/~rvaranka/Computer/Linux/HOWTO/"></p>
|
||||||
|
|
||||||
|
<sect1>Copyright
|
||||||
|
|
||||||
|
<p>Copyright (c) 2000 Risto Varanka.</p>
|
||||||
|
|
||||||
|
<sect1>License
|
||||||
|
|
||||||
|
<p>The following license terms apply to all LDP documents, unless
|
||||||
|
otherwise stated in the document. The LDP documents may be
|
||||||
|
reproduced and distributed in whole or in part, in any medium
|
||||||
|
physical or electronic, provided that this license notice is
|
||||||
|
displayed in the reproduction. Commercial redistribution is
|
||||||
|
permitted and encouraged. Thirty days advance notice via email to
|
||||||
|
the author(s) of redistribution is appreciated, to give the
|
||||||
|
authors time to provide updated documents. </p>
|
||||||
|
|
||||||
|
<sect2>Requirements of Modified Works
|
||||||
|
|
||||||
|
<p>All modified documents, including translations, anthologies,
|
||||||
|
and partial documents, must meet the following requirements:</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<enum>
|
||||||
|
<item>The modified version must be labeled as such.
|
||||||
|
<item>The person making the modifications must be identified.
|
||||||
|
<item>Acknowledgement of the original author must be retained.
|
||||||
|
<item>The location of the original unmodified document be identified.
|
||||||
|
<item>The original author's (or authors') name(s) may not be used to
|
||||||
|
assert or imply endorsement of the resulting document without
|
||||||
|
the original author's (or authors') permission.
|
||||||
|
</enum>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>In addition it is requested that:</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<enum>
|
||||||
|
<item>The modifications (including deletions) be noted.
|
||||||
|
<item>The author be notified by email of the modification in
|
||||||
|
advance of redistribution, if an email address is provided
|
||||||
|
in the document.
|
||||||
|
</enum>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>As a special exception, anthologies of LDP documents may
|
||||||
|
include a single copy of these license terms in a conspicuous
|
||||||
|
location within the anthology and replace other copies of this
|
||||||
|
license with a reference to the single copy of the license without
|
||||||
|
the document being considered ``modified'' for the purposes of
|
||||||
|
this section.</p>
|
||||||
|
|
||||||
|
<p>Mere aggregation of LDP documents with other documents or
|
||||||
|
programs on the same media shall not cause this license to apply
|
||||||
|
to those other works.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>All translations, derivative documents, or modified documents
|
||||||
|
that incorporate any LDP document may not have more restrictive
|
||||||
|
license terms than these, except that you may require distributors
|
||||||
|
to make the resulting document available in source format.</p>
|
||||||
|
|
||||||
|
<sect1>Disclaimer
|
||||||
|
|
||||||
|
<p>THIS DOCUMENT COVERS A LARGE AND CONSTANTLY CHANGING
|
||||||
|
DOMAIN. THEREFORE, THE INFORMATION CONTAINED IN THIS DOCUMENT MAY
|
||||||
|
BE INCORRECT OR OUTDATED. ALL USE OF THIS DOCUMENT AND ALL
|
||||||
|
INFORMATION CONTAINED IN IT IS AT YOUR OWN RISK. THE AUTHOR DOES
|
||||||
|
NOT GIVE ANY WARRANTY OR GUARANTEE, EITHER EXPLICIT OR
|
||||||
|
IMPLIED. </p>
|
||||||
|
|
||||||
|
<sect1>Author
|
||||||
|
|
||||||
|
<p>You are welcome to send feedback to the author at: <url
|
||||||
|
url="mailto:risto.varanka@helsinki.fi"
|
||||||
|
name="risto.varanka@helsinki.fi">.</p>
|
||||||
|
|
||||||
|
<p>Author's web site can be found at <url
|
||||||
|
url="http://www.helsinki.fi/~rvaranka/"
|
||||||
|
name="http://www.helsinki.fi/~rvaranka/">.</p>
|
||||||
|
|
||||||
|
<sect1>Credits
|
||||||
|
|
||||||
|
<p>I am thankful to several people who commented on language
|
||||||
|
issues. These conversations have given me a better view of the
|
||||||
|
different languages, and I hope future conversations will allow
|
||||||
|
this mini-HOWTO to mature over time. Especially I would like to
|
||||||
|
thank the people at the IRCNet channel #linux: Morphy, Bluesmurf,
|
||||||
|
Vadim, Zonk^, Rikkus and others whose names I have
|
||||||
|
forgotten. Thanks go also to Stig Erik Sandoe for helpful
|
||||||
|
comments.</p>
|
||||||
|
|
||||||
|
<sect1>Links
|
||||||
|
|
||||||
|
<p>Exhaustive lists of Linux development libraries and tools:</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<itemize>
|
||||||
|
<item><url url="http://www.freshmeat.net/appindex/development/"
|
||||||
|
name="Freshmeat">
|
||||||
|
<item><url url="http://www.hotfeet.ch/~gemi/LDT/" name="Linux
|
||||||
|
Development Tools">
|
||||||
|
<item><url url="http://www.linuxprogramming.com/"
|
||||||
|
name="linuxprogramming.com">
|
||||||
|
</itemize>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>The <url
|
||||||
|
url="http://www.tuxedo.org/~esr/faqs/hacker-howto.html"
|
||||||
|
name="Hacker FAQ"> by Eric S. Raymond is another interesting text
|
||||||
|
for novice Linux developers. It concentrates on some cultural and
|
||||||
|
psychological aspects of open source development. </p>
|
||||||
|
|
||||||
|
<p>Other <url url="http://www.linuxdoc.org/" name="LDP documents">
|
||||||
|
covering general programming subjects include the Reading List
|
||||||
|
HOWTO and the Linux Programmer's Guide - several more have been
|
||||||
|
written on specific subjects.</p>
|
||||||
|
|
||||||
|
|
||||||
|
<sect>Programming Languages
|
||||||
|
|
||||||
|
<!-- explain concept? -->
|
||||||
|
|
||||||
|
<p>C, Lisp and Perl are traditional hacking languages in the
|
||||||
|
GNU/Linux culture; Python, PHP, Java and C++ have gained new
|
||||||
|
ground recently.</p>
|
||||||
|
|
||||||
|
<sect1>Concepts in the Table
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<descrip>
|
||||||
|
|
||||||
|
<tag>Language</tag>
|
||||||
|
A common name of the language.
|
||||||
|
|
||||||
|
<tag>Beginner</tag> Indicates how well suited the language is for
|
||||||
|
people with little programming experience. A language marked with
|
||||||
|
``yes'' should be viable for a beginner's first programming
|
||||||
|
language.
|
||||||
|
|
||||||
|
<tag>Performance</tag> How fast your applications are likely to
|
||||||
|
run when you put them into production use. Performance depends
|
||||||
|
more on your algorithmic programming skills than the actual
|
||||||
|
language. As a rule of thumb, C, C++ and Fortran are sometimes
|
||||||
|
necessary because they can offer better performance than other
|
||||||
|
languages - at other times they might be unwieldy for the desired
|
||||||
|
purpose. (One idea for unscientific ``benchmarking'' of the
|
||||||
|
languages would be to implement a simple sorting algorithm in all
|
||||||
|
of them and compare running times. This of course does not measure
|
||||||
|
the performance of the actual language - since that concept does
|
||||||
|
not make sense - but only the implementation. Of course it's also
|
||||||
|
not a very reliable or thorough method, but it would give an
|
||||||
|
example how running times in different languages can
|
||||||
|
differ. Anybody want to help me with this?)
|
||||||
|
|
||||||
|
<tag>OOP, Object-Oriented Programming vs. other paradigms</tag>
|
||||||
|
Object-oriented programming is an important programming paradigm
|
||||||
|
that is gaining popularity. In object oriented programming, data
|
||||||
|
structures and algorithms are integrated into units, often called
|
||||||
|
classes. OOP is often contrasted with procedural programming
|
||||||
|
(which uses separate algorithms and data structures). It is not
|
||||||
|
strictly dependent on language: you can do OOP in languages not
|
||||||
|
listed as such (C for example), and program in the procedural
|
||||||
|
style in languages that are listed as OOP. I've listed as OOP
|
||||||
|
languages that have special features or add-ons to facilitate OOP.
|
||||||
|
Functional languages (Lisp for example) are a bit different breed
|
||||||
|
- among other things, functional programming is a superset of
|
||||||
|
OOP. Logic programming (Prolog), also called declarative
|
||||||
|
programming, on the other hand, is not related to the other types
|
||||||
|
of programming in a similar sense.
|
||||||
|
|
||||||
|
<tag>RAD, Rapid Application Development</tag> More dependent on
|
||||||
|
the tools you are using than the actual language. There is a
|
||||||
|
HOWTO on GUI development tools for Linux, although it's out of
|
||||||
|
date. With a good graphical tool you can do RAD. RAD can be
|
||||||
|
powerful when based on code reuse as well, so free software could
|
||||||
|
provide a good starting point.
|
||||||
|
|
||||||
|
<tag>Examples</tag> Mentions fields of programming the language is
|
||||||
|
most often used in. Other good (and bad) uses exist, but they are
|
||||||
|
less typical.
|
||||||
|
|
||||||
|
<!-- explain categories in a future version -->
|
||||||
|
|
||||||
|
<tag>Comments</tag> Additional information on the language, like
|
||||||
|
capacities and dialects.
|
||||||
|
|
||||||
|
</descrip>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<!-- Check case of languages: UPPER or Capital? -->
|
||||||
|
|
||||||
|
<sect1>Major Languages
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<verb>
|
||||||
|
|
||||||
|
Perl
|
||||||
|
Beginner: Yes - OOP: Yes
|
||||||
|
Examples: Scripting, sysadmin, www
|
||||||
|
Comments: Powerful for handling text and strings
|
||||||
|
|
||||||
|
Python
|
||||||
|
Beginner: Yes - OOP: Yes
|
||||||
|
Examples: Scripting, application scripting, www
|
||||||
|
Comments:
|
||||||
|
|
||||||
|
TCL
|
||||||
|
Beginner: Yes - OOP: No
|
||||||
|
Examples: Scripting, sysadmin, applications
|
||||||
|
Comments:
|
||||||
|
|
||||||
|
PHP
|
||||||
|
Beginner: Yes - OOP: Yes
|
||||||
|
Examples: Www
|
||||||
|
Comments: Popular for web databases
|
||||||
|
|
||||||
|
Java
|
||||||
|
Beginner: Yes - OOP: Yes
|
||||||
|
Examples: Cross-platform applications, www
|
||||||
|
Comments: Spreading to new areas, eg. e-commerce infrastructure
|
||||||
|
|
||||||
|
Lisp
|
||||||
|
Beginner: Yes - OOP: Functional
|
||||||
|
Examples: Emacs modes (for Elisp), AI
|
||||||
|
Comments: Variants Elisp, Clisp and Scheme
|
||||||
|
|
||||||
|
Fortran
|
||||||
|
Beginner: No - OOP: No
|
||||||
|
Examples: Mathematical (scientific) applications
|
||||||
|
Comments: Variants f77 and f90/95
|
||||||
|
|
||||||
|
C
|
||||||
|
Beginner: No - OOP: No
|
||||||
|
Examples: System programming, applications
|
||||||
|
Comments:
|
||||||
|
|
||||||
|
C++
|
||||||
|
Beginner: No - OOP: Yes
|
||||||
|
Examples: Applications
|
||||||
|
Comments:
|
||||||
|
|
||||||
|
</verb>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<!-- is Prolog really major?
|
||||||
|
Prolog
|
||||||
|
Beginner: Yes? - OOP: Declarative
|
||||||
|
Examples: Databases, AI
|
||||||
|
Comments:
|
||||||
|
-->
|
||||||
|
|
||||||
|
<sect1>Shell Programming
|
||||||
|
|
||||||
|
<p>Shells are an important programming environment, too. I haven't
|
||||||
|
covered them because I don't understand the field very thoroughly
|
||||||
|
yet. Knowledge of shells is important for anyone who works on
|
||||||
|
Linux regularly, more so for system administrators. There are
|
||||||
|
similarities between shell programming and other kinds of
|
||||||
|
scripting - often they can achieve the same goals, and you have
|
||||||
|
the option of choosing between native shell and a separate
|
||||||
|
scripting language. Among the most popular shells are bash, tcsh,
|
||||||
|
csh, ksh and zsh. You can get basic information on your shell with
|
||||||
|
the <em>man</em> command, <em>man bash</em> for example.</p>
|
||||||
|
|
||||||
|
<sect1>Other Languages
|
||||||
|
|
||||||
|
<p>Other languages of note: AWK, SED, Smalltalk, Eiffel, Ada,
|
||||||
|
Prolog, assembler, Objective C, Logo, Pascal (p2c converter)</p>
|
||||||
|
|
||||||
|
<sect1>Links
|
||||||
|
|
||||||
|
<!-- integrate these in the "table" perhaps -->
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<itemize>
|
||||||
|
<item><url url="http://www.tunes.org/Review/Languages.html"
|
||||||
|
name="A general info site"> on programming languages, lots of info
|
||||||
|
and opinions
|
||||||
|
<item><url url="http://dev.scriptics.com/" name="TCL">
|
||||||
|
<item><url url="http://www.perl.org/" name="Perl">
|
||||||
|
<item><url url="http://www.python.org/" name="Python">
|
||||||
|
<item><url url="http://www.php.net" name="PHP">
|
||||||
|
<item><url url="http://www.javasoft.com/" name="Java">
|
||||||
|
<item><url url="http://clisp.cons.org/~haible/packages-clisp.html"
|
||||||
|
name="clisp">
|
||||||
|
</itemize>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<sect>GUI Toolkits
|
||||||
|
|
||||||
|
<p>The standard graphical subsystem for UNIX and Linux, called X,
|
||||||
|
has its own libraries for GUI development. They provide a
|
||||||
|
low-level programming interface to X, but tend to be hard to
|
||||||
|
use. Old end-user applications and other toolkits of course make
|
||||||
|
good use of them. Nowadays the Linux GUI scene is dominated by
|
||||||
|
GTK+ and Qt, since two popular, complete user environments - GNOME
|
||||||
|
and KDE - are based on them.</p>
|
||||||
|
|
||||||
|
<!-- Explain concept? -->
|
||||||
|
|
||||||
|
<sect1>Concepts in the Table
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<descrip>
|
||||||
|
|
||||||
|
<tag>Library</tag>
|
||||||
|
Common name or abbreviation of the toolkit.
|
||||||
|
|
||||||
|
<tag>Beginner</tag>
|
||||||
|
Whether the toolkit is suitable for a newbie programmer.
|
||||||
|
|
||||||
|
<tag>License</tag>
|
||||||
|
Different licenses for different GUI toolkits have practical
|
||||||
|
significance. GTK+, TK and GNUstep licenses allow you to develop both open
|
||||||
|
source and closed source applications without paying for a
|
||||||
|
license. Motif license requires payment, while the QT license
|
||||||
|
requires payment only if you write closed source programs.
|
||||||
|
|
||||||
|
<!-- refer to freedom as in free speech, check validity -->
|
||||||
|
|
||||||
|
<tag>Language</tag>
|
||||||
|
The language that is most often used with the toolkit.
|
||||||
|
|
||||||
|
<tag>Bindings</tag>
|
||||||
|
Other languages which can use the toolkit.
|
||||||
|
|
||||||
|
<tag>Examples</tag>
|
||||||
|
Applications that use the toolkit.
|
||||||
|
|
||||||
|
<tag>Comments</tag>
|
||||||
|
Additional information on the toolkit.
|
||||||
|
|
||||||
|
</descrip>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<sect1>Major GUI Toolkits
|
||||||
|
|
||||||
|
<!-- Change to the other format? Would be good since could include
|
||||||
|
more info on WINGS and the GNUstep project. -->
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<table>
|
||||||
|
<tabular ca="llllll">Library|Beginner|License|Language|Bindings
|
||||||
|
|Examples|Comments@
|
||||||
|
|
||||||
|
TK|
|
||||||
|
Yes|
|
||||||
|
Free|
|
||||||
|
TCL|
|
||||||
|
Perl, Python, others|
|
||||||
|
make xconfig, TKDesk|
|
||||||
|
@
|
||||||
|
|
||||||
|
GTK+|
|
||||||
|
No|
|
||||||
|
Free (LGPL)|
|
||||||
|
C|
|
||||||
|
Perl, C++, Python, many others|
|
||||||
|
GNOME, Gimp|
|
||||||
|
Very popular@
|
||||||
|
|
||||||
|
QT|
|
||||||
|
No|
|
||||||
|
Free for open source|
|
||||||
|
C++|
|
||||||
|
Python, Perl, C, others?|
|
||||||
|
KDE|
|
||||||
|
Very popular@
|
||||||
|
|
||||||
|
Motif|
|
||||||
|
No|
|
||||||
|
Non-free|
|
||||||
|
C/C++|
|
||||||
|
Python, others?|
|
||||||
|
Netscape, Wordperfect|
|
||||||
|
<url url="http://www.lesstif.org/" name="Lesstif"> is
|
||||||
|
a free replacement@
|
||||||
|
|
||||||
|
GNUstep|
|
||||||
|
No|
|
||||||
|
Free (LGPL)|
|
||||||
|
Objective C|
|
||||||
|
Guile, Java?|
|
||||||
|
None widely known, but see the
|
||||||
|
<url url="http://www.gnustep.org/resources/apps.html"
|
||||||
|
name="application list">|
|
||||||
|
GNUstep is still under development@
|
||||||
|
|
||||||
|
</tabular>
|
||||||
|
</table>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p></p>
|
||||||
|
|
||||||
|
<sect1>Links
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<itemize>
|
||||||
|
<item><url url="http://dev.scriptics.com/" name="TK">
|
||||||
|
<item><url url="http://www.gtk.org/" name="GTK+">
|
||||||
|
<item><url url="http://www.troll.no/" name="QT">
|
||||||
|
<item><url url="http://www.metrolink.com/" name="Motif">
|
||||||
|
<item><url url="http://www.gnustep.org/" name="GNUstep">
|
||||||
|
</itemize>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</article>
|
Loading…
Reference in New Issue