Post on 27-Jan-2019
DebianGNU/Linux port for
RISC-V64-bits
DebianGNU/Linux port for
RISC-V64-bits
Manuel A. Fernandez MonteceloManuel A. Fernandez Montecelo < <mafm@debian.orgmafm@debian.org>>
8th RISC-V Workshop :: May 7-10, 20188th RISC-V Workshop :: May 7-10, 2018Barcelona Supercomputing Center && Universitat Politècnica de CatalunyaBarcelona Supercomputing Center && Universitat Politècnica de Catalunya
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 2/46
OutlineOutline
➢Goals of this project➢Why a Debian Port for RISC-V?➢What is Debian?➢What is a Debian Port?➢The Plan➢History / Making Of (1st and 2nd bootstrap)➢Current Status➢How the RISC-V community can help➢... and what are the benefits➢Thanks➢Questions / comments
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 3/46
Goals of this projectGoals of this project
➢To have Debian ready to install & run on RISC-V based systems
➢Fully integrated with Debian infrastructure➢Not a “one shot”, but continously updated
➢With time, to make it as well supported as “the big ones”
➢i386, x86_64 (“amd64” in Debian), arm64, ppc64el
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 4/46
Why a Debian Port for RISC-V? (1)Why a Debian Port for RISC-V? (1)
➢Personal reasons:➢Interested in both Debian and RISC-V
➢I’m already a Debian Developer➢I like RISC-V design and goals, started following in 2014➢They are a good fit, philosophically and technically➢And I would like to improve and help to grow both projects
➢I worked previously in the OpenRISC or1k port➢... and had lots of fun!!
➢No other major GNU/Linux distributions in sight➢(... by the time that I started, 2014~2015)
➢And ultimately, I would like to run Free Software and Debian when I get my own RISC-V based hardware
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 5/46
Why a Debian Port for RISC-V? (1 bis)Why a Debian Port for RISC-V? (1 bis)
➢Personal reasons:➢Interested in both Debian and RISC-V
➢I’m already a Debian Developer➢I like RISC-V design and goals, started following in 2014➢They are a good fit, philosophically and technically➢And I would like to improve and help to grow both projects
➢I worked previously in the OpenRISC or1k port➢... and had lots of fun!!
➢No other major GNU/Linux distributions in sight➢(... by the time that I started, 2014~2015)
➢And ultimately, I would like to run Free Software and Debian when I get my own on the now-existing RISC-V based hardware
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 6/46
Why a Debian Port for RISC-V? (2)Why a Debian Port for RISC-V? (2)
➢Technical and philosophical reasons:➢Debian welcomes and already supports many ports
➢Including similar architectures, active now or in the recent past, some listed from “RISC-V Genealogy”:
➢MIPS (mips, mipsel) ➢Hitachi SuperH (sh4)➢IBM PowerPC (powerpc, ppc64, ppc64el)➢... and DEC Alpha, SPARC (32 and 64), older ARMs, PA-RISC
➢Similar or compatible goals, and methods, e.g.:➢Aiming for openness, freedom➢Both based, built upon same tools
➢GNU toolchain ─among others─, Linux, FOSS ecosystem
➢Striving for good technical solutions over other considerations
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 7/46
What is Debian? (1)What is Debian? (1)
➢The Project: A community of individuals
➢Mostly volunteers➢No overall or significant control by companies
➢... who care about Free, Open-Source Software➢Goal: to create a full, comprehensive “Operating System”
➢Large set of software packages, coherent and well integrated➢“stable” releases every ~2 years (also used as “rolling release”)
➢Keeping “Software Freedom” as a core goal➢Manifesto: “... developed openly in the spirit of Linux and GNU...”➢Social Contract➢Debian Free Software Guidelines (DSFG)
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 8/46
What is Debian? (2)What is Debian? (2)
➢Mostly known as a GNU/Linux “distribution”
➢Started by Ian Murdock in 1993➢First “stable” release in 1996
➢One of the major “flavours” (.deb packages)➢More than 27k source packages in 2018➢Basis of many derivatives (“downstreams”)
➢Ubuntu, Raspbian, SteamOS, Knoppix, gNewSense, Linux Mint Debian Edition, Tails...
➢...which also supports other kernels➢Currently: FreeBSD and GNU Hurd
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 9/46
What is a Debian Port? (1)What is a Debian Port? (1)
➢In short, ABI of the combination of {computer arch + OS kernel + libc}
➢Computer architecture:➢Many, currently and over the years (details in next slides)
➢Kernel + C library:➢Mostly Linux + GNU libc (if not mentioned explicitly)➢But also:
➢kFreeBSD, FreeBSD kernel + GNU libc (amd64 and i386)➢GNU Hurd + GNU libc (i386)
➢C library:➢GNU libc in all existing ports within the Debian infrastructure➢But some people are interested in experiments
➢e.g. Linux + musl (libc)
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 10/46
What is a Debian Port? (2)What is a Debian Port? (2)
➢Three kinds of ports:➢Outside of Debian infrastructure
➢Some derivatives are arguably an “external” port➢e.g. Raspbian, mostly recompilation / optimisation for Raspberry Pi
➢Anybody can start one of these without official help or coordination with Debian
➢But often there’s collaboration in one way or another
➢Unofficial / unsupported➢Not in “stable” releases, but hosted in Debian infrastructure
➢Officially supported➢Part of the “stable” releases and fully supported
➢Ports don’t born “fully supported”➢they work their way up to it
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 11/46
What is a Debian Port? (3)What is a Debian Port? (3)
➢Criteria for “officially suported” ports:➢Be able to build almost all of the “source” packages➢Have enough people responsible for it
➢addressing issues during full Stable release cycles
➢Have hardware available, redundant, well managed, etc.
➢And in return:➢Become part of the “stable” releases and have full support for all packages (all ports)
➢For 3-5 years (“stable” release lifetime) ➢Including security support for all, not only a “core” set of packages
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 12/46
What is a Debian Port? (4)What is a Debian Port? (4)
➢“Unofficial” or “unsupported” ports:➢When they don’t qualify as “official” for some reason
➢Hardware not available➢Not enough people behind➢Many packages fail to compile
➢e.g. missing Java or Haskell ecosystem (no working compiler), no GUIs, ...
➢... but are hosted in the infrastructure:➢Can be downloaded / upgraded from *.debian.org
➢Secure, cryptographically signed
➢Get continous updates of software packages➢When contributors upload new versions to the archive, they are compiled automatically for all ports, within minutes/hours
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 13/46
What is a Debian Port? (5)What is a Debian Port? (5)
➢Currently active:➢ Fully supported ports, “officially suported”:
➢amd64 (x86_64), i386 (targetting i686 nowadays)➢arm64/armel/armhf, mips/mipsel/mips64el, ppc64el, s390x
➢Not well supported:➢Old ones with decreasing interest or available hardware:
➢alpha, ia64, hppa, m68k, powerpc/powerpcpse/ppc64, sh4, sparc64, x32 (x86_64 with ilp32)...
➢... and new ones
➢Retired:➢Supported once, but not in the infrastructure anymore:
➢arm/armeb (old 32 bits ABIs, LE/BE), sparc (32 bits), parisc, s390 (32 bits BE)...
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 14/46
What is a Debian Port? (6)What is a Debian Port? (6)
➢What maintainers of packages see:➢e.g. for Firefox: https://buildd.debian.org/status/package.php?p=firefox-esr
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 15/46
What is a Debian Port? (6)What is a Debian Port? (6)
➢What maintainers of packages see:➢e.g. for Firefox: https://buildd.debian.org/status/package.php?p=firefox-esr
Port/Arch Name
BuildStatus
Build machines, logs, historic, etc.
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 16/46
What is a Debian Port? (6)What is a Debian Port? (6)
➢What maintainers of packages see:➢e.g. for Firefox: https://buildd.debian.org/status/package.php?p=firefox-esr
Port/Arch Name
BuildStatus
Build machines, logs, historic, etc.
riscv64
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 17/46
The Plan (1)The Plan (1)
➢Broad steps:1)Bootstrap and create viable, basic OS disk images2)Get it to the state of “unofficial” / “unsupported”, until all criteria for “stable” are met
➢Prepare infrastructure (e.g. auto-builders), wiki, doc, etc.➢Import bootstrapped set in the infrastructure➢Fully rebootstrap➢Build as many packages as possible
➢And make sure that they work
➢Keep the port running, in good state
3)In the future, when feasible, “official” ─ as well supported as main ports
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 18/46
The Plan: Software decisions (2)The Plan: Software decisions (2)
➢Software-wise, the target is to have a port with:➢Linux kernel➢GNU libc➢GCC-based toolchain➢LLVM available (when ready), but not the main toolchain➢Rationale: all current and well supported Debian ports target these
➢Userland is basically the same for all Debian ports
➢including those with other kernels
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 19/46
The Plan: Hardware decisions (3)The Plan: Hardware decisions (3)
➢Hardware-wise, the target is 64-bit little-endian➢Both 64-bit and LE have been the focus for general purpose computing for years➢Debian (Linux/Unix)-capable RISC-V hardware implement this
➢Simply, it was announced (and then became true) the most popular target capable of running general purpose OS➢Dev boards or servers that might become available in the next few years for end-users, likely 64-bit LE too
➢RV64GC➢As it’s the “default flavour” recommended by the people most involved
➢could be reverted if needed (e.g. popular hardware without it)➢...or have both flavours
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 20/46
The Plan: Not Considered (4)The Plan: Not Considered (4)
➢Why not 32-bit or 128-bit variants:➢RISC-V side:
➢Design, toolchain and simulator support have not been explored as deeply for 32-bit, support lacking in some areas➢RV32 hardware that appeared over time not ready for general purpose OSs➢...and 128 is simply not realistic at this time
➢But maybe in the future? :-)
➢Debian side:➢32-bit ports already struggle to get large packages built
➢e.g. Firefox or Chromium, LibreOffice, KDE Desktop➢This problem will only become worse with time
➢Embedded / IoT / etc. likely not interested➢Neither Debian nor other “full”, general purpose OSs
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 21/46
The Plan: Where we are now (5)The Plan: Where we are now (5)
➢Steps:1)Bootstrap and create viable, basic OS disk images ✓2)Get it to the state of “unofficial” / “unsupported”, until all criteria for “stable” are met ✓
➢Prepare infrastructure (e.g. auto-builders), wiki, doc, etc. ✓➢Import bootstrapped set in the infrastructure ✓➢Fully rebootstrap ✓➢Build as many packages as possible ←at this point now
➢And make sure that they work
➢Keep the port running, in good state
3)In the future, when feasible, “official” ─ as well supported as main ports
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 22/46
History: First Bootstrap (1)History: First Bootstrap (1)
➢Started on Nov 2014➢Frequent pauses in 2014~2016:
➢Waiting for Specs ready➢Waiting for Upstreaming of toolchain, Linux, etc.
➢not impossible to progress, but very inconvenient to manage with frequent changes
➢Waiting for availabity of:➢Emulators / simulators (mainly, Qemu), matching specs➢Toolchain implementation, matching specs➢Different components of the toolchain to work well with each other
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 23/46
History: First Bootstrap (2)History: First Bootstrap (2)
➢In mid 2016, achieved a functional base Debian system
➢By the 4th Workshop at MIT, 300~400 “essential” packages built:
➢GNU coreutils, make, gawk, bash, tar, gzip, bzip2, xz-utils, flex, bison, wget, curl, less, ...➢media codecs (png, jpeg, flac, ogg, opus, xvid, ...)➢dpkg, apt, gnupg, openssl, nano, text-mode web browsers➢some X-Windows packages➢many libraries / supporting packages
➢not all of them interesting per se, but needed by others (e.g. XML libraries, ncurses)
➢Stable enough to build successfully and cleanly hundreds of packages in “native” mode (qemu-system)
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 24/46
HistoryHistory: First Bootstrap (3): First Bootstrap (3)
➢In late 2016 the userland ABI changed with major breakage
➢Both Debian and Fedora (which started a few months before) stopped bootstrapping
➢activity ceased to a halt
➢In April 2017, published the packages built by then➢http://riscv.mit.edu/➢About 1k in total➢They were not usable with the toolchain after the change, so only for historic interest or private tests
➢Hiatus until late 2017/early 2018➢Waiting for upstreaming of the support for Linux and GNU libc and final freeze of ABI
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 25/46
History: Second Bootstrap (1)History: Second Bootstrap (1)
➢Started when GNU libc was upstreamed➢~25 Feb~5 March: Cross-build base set of packages
➢packages included in Debian only➢not taken from github.com/riscv
➢create system to run under qemu-system
➢~5~13 March: First “native” build➢Use cross-built system to build packages again “natively” (under qemu-system)➢incl. running tests when available and fixing some problems early on
➢~13~23 March: Second “native” build in clean env.➢Isolated environment similar to “production” auto-builders
➢starting from minimal chroot, installing deps as necessary, etc
➢Also, set auto-builders to use permanently for the port
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 26/46
History: Second Bootstrap (2)History: Second Bootstrap (2)
➢(cont.):➢23~25 March: import this 2nd “decantation” into the “debian-ports” infrastructure
➢This is the seed for a basic Debian system capable to build the rest of Debian➢Caveats:
➢Building other packages need that they support the arch if necessary, not always the case➢There are many dependency cycles that have to be broken
➢~25 March onwards (still at it): attempt to build the whole archive
➢Add support when necessary/missing, break dep. cycles➢Fix packages with tests failing➢Report bugs to Debian maintainers and upstream, etc
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 27/46
Current status in a single graphCurrent status in a single graph
➢https://buildd.debian.org/stats/graph-ports-quarter-big.png (May 1st 2018)
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 28/46
Status in detail (1)Status in detail (1)
➢In number of packages, ~75% there➢More than 9k of ~13k arch-dependent packages built➢Also available 10~15k packages which are independent of architecture
➢These are e.g. scripts, many modules from Python, Perl, definitions of documentation (e.g. Docbook), etc.➢Some of these don’t work if they need arch-dependent packages along their long dep chains, and are unavailable
➢As time goes on, progress slows down:➢Often bigger packages are left, take hours/days to build, have more complex dep chains to untangle...➢The more % built, the more has to be rebuilt when new versions are uploaded by maintainers
➢e.g. several versions of GCC per week
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 29/46
Status in detail (2)Status in detail (2)
➢Packages available include:➢Most of server-side packages
➢e.g. Apache and Nginx, mail servers, VoIP, etc.
➢Complex 3D graphics games and engines➢e.g. OpenSceneGraph
➢Media players➢e.g. mplayer/mpv, gstreamer, VLC being built as I write
➢Desktops➢virtually all of XFCE, LXDE/LXQt, most of GNOME and KDE
➢Complex desktop programs➢e.g. Gimp, Inkscape, 3D design and CAD, some Office suites
➢Many Science applications and related software➢incl. e.g. OpenMPI
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 30/46
Status in detail (3)Status in detail (3)
➢Notable exceptions:➢Complex browsers
➢ Firefox, Chromium – the latter only available in x86+arm
➢OpenJDK with Hotspot (major project)➢only the slower Zero available
➢Other notable languages/ecosystems missing➢Haskell➢NodeJS➢Golang support not very good yet
➢Toolchain➢LLVM (support upstream too recent)➢GDB and Valgrind (need porting upstream too)
➢ This is the “Future Work” slide :-)
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 31/46
Status in detail (4)Status in detail (4)
➢In general, most packages built without modif.➢Some would need, but they already benefit from previous ports
➢patches for other arches that can be repurposed➢changes to build systems, conditional support for some deps
➢e.g. libseccomp not available in some ports
➢For those which need modif, usually minimal➢disable deps much higher in the stack, not yet available
➢e.g. disable Java in gettext or libdb; disable Qt GUI in cmake
➢Some need support specific to RISC-V➢e.g. word sizes, alignment, interpreters, memory allocators...
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 32/46
Status in detail (5)Status in detail (5)
➢... so they are built, but do they work?➢Basically... YES!
➢Stable enough to build thousands of packages➢Most of those with testsuites, passing fully or >99.5% of cases➢Tested by using the system everyday➢Some tested on hardware (HiFive Unleashed, thanks to SiFive!)
➢Problems found:➢Bugs unconvered and reported in the toolchain, miscompiling➢Qemu crashes, bugs in FP unit, and system locks➢Problems with timeouts
➢qemu-system emulation being too slow for some tests’ defaults
➢Problems due to implementation of emulators or OS support➢e.g. failures with network or missing features
➢... all that is expected in a new arch, some of those still happen in mature arches also
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 33/46
Status: Pics or It Didn’t Happen (6)Status: Pics or It Didn’t Happen (6)
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 34/46
Status: Pics or It Didn’t Happen (7)Status: Pics or It Didn’t Happen (7)
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 35/46
Status: Pics or It Didn’t Happen (8)Status: Pics or It Didn’t Happen (8)
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 36/46
Status: Pics or It Didn’t Happen (9)Status: Pics or It Didn’t Happen (9)
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 37/46
Status: Pics or It Didn’t Happen (10)Status: Pics or It Didn’t Happen (10)
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 38/46
Status: Pics or It Didn’t Happen (11)Status: Pics or It Didn’t Happen (11)
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 39/46
How the RISC-V community can helpHow the RISC-V community can help
➢“Upstream” remaining toolchain support➢Some pieces missing, like full Linux support, GDB, Valgrind...
➢Test and report problems➢Many packages don’t have test suites, or have subtle problems
➢See wiki page with centralised information:➢https://wiki.debian.org/RISC-V
➢Guides for how to install a Debian system for RISC-V➢See progress of auto-builders and packages being stuck➢Packages with bugs, needing work, etc.
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 40/46
... and what are the benefits (1)... and what are the benefits (1)
➢Just by the Debian, Fedora and other ports being started:
➢Problems in the software stack were found➢... and hopefully are or will be fixed
➢Packages needing support or fixes upstream that we patch will benefit all RISC-V community
➢People that learn about RISC-V through non RISC-V channels can still end up contributing to RISC-V
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 41/46
... and what are the benefits (2)... and what are the benefits (2)
➢Large collection of software, useful for many reasons:
➢People more likely to pay attention to the hardware➢Large software ecosystem is key to the success of the Raspberry Pi and similar devices
➢Easy to test hardware, base ISA, new extensions➢ARM (the company) uses Debian as testbed for changes or fixes in the architecture/ABI, prototypes of arm64_ilp32➢Easy to take base OS software and optimise specific packages for specific extensions (e.g. media codecs)
➢Easy to benchmark with software in common use➢ and avoid problems of synthetic benchmarks, as “Computer Architecture: A Quantitative Approach” would have it ;-)
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 42/46
... and what are the benefits (3)... and what are the benefits (3)
➢By using the Debian port directly on your RISC-V system
➢Debian is easy to install and keep up-to-date➢At the moment not well documented/advertised, but basically:
➢Unpack .tarball in the root filesystem; or➢Near future: debootstrap --arch=riscv64 unstable /path/chroot \
http://ftp.ports.debian.org/debian-ports/
➢Install software, keep system up to date easily and securely
➢apt-get install awesome-package➢apt-get upgrade
➢Easy development for the RISC-V ecosystem➢e.g. cross-build:$ apt-get install gcc-riscv64-linux-gnu$ riscv64-linux-gnu-gcc -o test test.c
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 43/46
WhoWho
➢From the Debian side:➢3 people invested a lot of time for months/years now, bootstrapping and building the whole archive:
➢Karsten Merker, also active in RISC-V lists➢Aurélien Jarno, GNU libc maintainer in Debian and responsible for debian-ports infrastructure, lots of work debugging problems in the toolchain➢Yours truly :-)
➢Many other people (long list!) got involved and offered help along the way, thanks!➢Many Debian contributors investigate problems, apply patches proactively/quickly on a daily basis
➢Kurt Keville, from the MIT RV128 team➢Help with infrastructure and logistics for a long time
➢lately with auto-builders
➢Website: http://rv128.mit.edu/
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 44/46
Special thanksSpecial thanks
➢Steven J. Wallach (Micron)➢Sponsoring attendance to this workshop➢Otherwise this talk might not happen!!
➢(Please, let contributors attend workshops for free! For non-professionals it’s very taxing to reserve holidays, already arrange travel, etc.)
➢SiFive, Palmer Dabbelt in particular➢The HiFive Unleashed and other hardware
➢Bytemark (Hosting provider)➢For sponsoring hardware (this project and Debian)
➢Christian Svensson➢For starting the OpenRISC or1k port, being a pleasure to work with and getting me hooked!
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 45/46
Also thanksAlso thanks
➢Debian contributors / community➢For creating an amazingly useful and fun project➢Well adapted to add new ports
➢Multi-arch, cross-compilation support➢Helmut Grohne’s rebootstrap project
➢RISC-V contributors / community➢For the patience of the people from the community in dealing with my requests for help, comments and patches in the early times➢For creating another amazingly useful and fun project➢And for the courage of starting from scratch
8th RISC-V Workshop Debian GNU/Linux port for RISC-V 64-bit 46/46
Questions / comments?Questions / comments?
Manuel A. Fernandez MonteceloManuel A. Fernandez Montecelo < <mafm@debian.orgmafm@debian.org>>https://people.debian.org/~mafm/https://people.debian.org/~mafm/
https://wiki.debian.org/RISC-Vhttps://wiki.debian.org/RISC-V
Artwork based on “Green_Debian_2”Artwork based on “Green_Debian_2”http://collab.debian.net/si0ux/gallery/green-debian-2si?view=truehttp://collab.debian.net/si0ux/gallery/green-debian-2si?view=true
http://www.linuks.mine.nu/volkany/http://www.linuks.mine.nu/volkany/
Manuel from Barcelona(Fawlty Towers)
.
.
.
.(Sorry, could not resist,
Huge Fan! :-) )
Manuel in Barcelona(first time!)