from small one page howto to huge articles all in one place
 

search text in:




Other .linuxhowtos.org sites: www.linuxhowtos.org
toolsntoys.linuxhowtos.org



Last additions:
How to make X listen on port 6000

How to make X listen on port 6000

words:

34

views:

45391

userrating:

average rating: 1.5 (4 votes) (1=very good 6=terrible)


May, 25th 2007:
April, 26th 2007:
Apr, 10th. 2007:
Druckversion . pdf icon
You are here: Misc

Gentoo udev Guide


1. What is udev?


The /dev Directory


When Linux-users talk about the hardware on their system in the vicinity of people who believe Linux is some sort of virus or brand of coffee, the use of "slash dev slash foo" will return a strange look for sure. But for the fortunate user (and that includes you) using /dev/hda1 is just a fast way of explaining that we are talking about the primary master IDE, first partition. Or aren't we?
We all know what a device file is. Some even know why device files have special numbers when we take a closer look at them when we issue ls -l in /dev. But what we always take for granted is that the primary master IDE disk is referred to as /dev/hda. You might not see it this way, but this is a flaw by design.
Think about hotpluggable devices like USB, IEEE1394, hot-swappable PCI, ... What is the first device? And for how long? What will the other devices be named when the first one disappears? How will that affect ongoing transactions? Wouldn't it be fun that a printing job is suddenly moved from your supernew laserprinter to your almost-dead matrix printer because your mom decided to pull the plug of the laserprinter which happened to be the first printer?


Enter udev. The goals of the udev project are both interesting and needed:
- Runs in userspace
- Dynamically creates/removes device files
- Provides consistent naming
- Provides a user-space API
To provide these features, udev is developed in three separate projects: namedev, libsysfs and, of course, udev.

namedev


Namedev allows you to define the device naming separately from the udev program. This allows for flexible naming policies and naming schemes developed by separate entities. This device naming subsystem provides a standard interface that udev can use.
Currently only a single naming scheme is provided by namedev; the one provided by LANANA, used by the majority of Linux systems currently and therefore very suitable for the majority of Linux users.
Namedev uses a 5-step procedure to find out the name of a given device. If the device name is found in one of the given steps, that name is used. The steps are:
- label or serial number
- bus device number
- bus topology
- statically given name
- kernel provided name

The label or serial number step checks if the device has a unique identifier. For instance USB devices have a unique USB serial number; SCSI devices have a unique UUID. If namedev finds a match between this unique number and a given configuration file, the name provided in the configuration file is used.
The bus device number step checks the device bus number. For non-hot-swappable environments this procedure is sufficient to identify a hardware device. For instance PCI bus numbers rarely change in the lifetime of a system. Again, if namedev finds a match between this position and a given configuration file, the name provided in that configuration file is used.
Likewise the bus topology is a rather static way of defining devices as long as the user doesn't switch devices. When the position of the device matches a given setting provided by the user, the accompanying name is used.
The fourth step, statically given name, is a simple string replacement. When the kernel name (the default name) matches a given replacement string, the substitute name will be used.
The final step (kernel provided name) is a catch-all: this one takes the default name provided by the kernel. In the majority of cases this is sufficient as it matches the device naming used on current Linux systems.

libsysfs


udev interacts with the kernel through the sysfs pseudo filesystem. The libsysfs project provides a common API to access the information given by the sysfs filesystem in a generic way. This allows for querying all kinds of hardware without having to make assumptions on the kind of hardware.

udev


Every time the kernel notices an update in the device structure, it calls the /sbin/hotplug program. Hotplug runs the applications linked in the /etc/hotplug.d/default directory where you will also find a symlink to the udev application. Hotplug directs the information given by the kernel to the udev application which performs the necessary actions on the /dev structure (creating or deleting device files).

2. Using udev on Gentoo


Requirements


udev is meant to be used in combination with a 2.6 kernel (like development-sources or gentoo-dev-sources). If you're using such a kernel then you just have to make sure that you have a recent sys-apps/baselayout version. That's all you need.
Code Listing 2.1: Installing udev
# emerge udev

udev will install hotplug-base as one of it's dependencies. You do not need to install hotplug unless you want your modules automatically loaded when you plug devices in. hotplug also handles the automated bringup of network devices and firmware downloading.
Code Listing 2.2: Installing optional hotplug scripts
# emerge hotplug

If you want modules loaded for devices that have been plugged in before you boot, use the coldplug package:
Code Listing 2.3: Installing the coldplug package
# emerge coldplug

Kernelwise, if you're using the default set by genkernel then you're all set. Otherwise be sure to activate the following options:
Code Listing 2.4: Required kernel options
General setup --->   
[*] Support for hot-pluggable devices

File systems --->
Pseudo filesystems --->
[*] /proc file system support
[*] Virtual memory file system support (former shm fs)

You can leave the /dev file system support (OBSOLETE) active if you wish but you have to make sure that "Automatically mount at boot" is disabled:
Code Listing 2.5: Don't automatically mount devfsd
File systems --->   
Pseudo Filesystems --->
[*] /dev file system support (OBSOLETE)
[ ] Automatically mount at boot

Configuration


If you want to use the udev-tweaks Gentoo added to make your life comfortable, then read no more. Gentoo will use udev but keep a static /dev so that you will never have any missing device nodes. The Gentoo init scripts won't run the devfsd daemon and will deactivate devfs when you boot up.

But if you are a die-hard and want to run a udev-only, no-tweaked system as is intended by the udev development (including the difficulties of missing device nodes because udev doesn't support them yet), by all means, read on :)

We'll deactivate the rules that save the device file nodes: edit the RC_DEVICE_TARBALL variable in /etc/conf.d/rc and set it to no:
Code Listing 2.6: /etc/conf.d/rc
RC_DEVICE_TARBALL="no"

If you have included devfs support in your kernel, you can deactivate it in the bootloader configuration: add gentoo=nodevfs as a kernel parameter. If you want to use devfs and deactivate udev, add gentoo=noudev as kernel parameter.

3. Known Issues


Missing device node files at boot


If you can't boot successfully because you get an error about /dev/null not found, or because the initial console is missing, the problem is that you lack some device files that must be available before /dev is mounted and handled by udev. This is common on Gentoo machines installed from old media.

If you run sys-apps/baselayout-1.8.12 or later, this problem is alleviated since the boot process should still manage to complete. However, to get rid of those annoying warnings, you should create the missing device nodes as described below.

To see which devices nodes are present before the /dev filesystem is mounted, run the following commands:
Code Listing 3.1: Listing device nodes available at boot
# mkdir test   
# mount --bind / test
# cd test/dev
# ls

The devices needed for a successful boot are /dev/null and /dev/console. If they didn't show up in the previous test, you have to create them manually. Issue the following commands in the test/dev/ directory:
Code Listing 3.2: Creating necessary device node files
# mknod -m 660 console c 5 1   
# mknod -m 660 null c 1 3

When you're finished, don't forget to unmount the test/ directory:
Code Listing 3.3: Unmounting the test/ directory
# cd ../..   
# umount test
# rmdir test

udev and nvidia


If you use the proprietary driver from nVidia and the X server fails to start on a udev-only system, then make sure you have:

the nvidia module listed in /etc/modules.autoload.d/kernel-2.6
a version of nvidia-kernel equal to or greater than media-video/nvidia-kernel-1.0.5336-r2
a version of baselayout equal to or greater than sys-apps/baselayout-1.8.12

LVM2 Names Disappear


When you use udev and LVM2 together, you might notice that your created volume groups and logical volumes have disappeared. Well, they haven't, but they are unfortunately named /dev/dm-# with # being 0, 1, ...

To fix this, edit /etc/udev/rules.d/50-udev.rules and uncomment the following line:
Code Listing 3.4: Uncomment this line from /etc/udev/rules.d/50-udev.rules
KERNEL="dm-[0-9]*",     PROGRAM="/sbin/devmap_name %M %m", NAME="%k", SYMLINK="%c"

No Consistent Naming between DevFS and udev


Even though our intention is to have a consistent naming scheme between both dynamical device management solutions, sometimes naming differences do occur. One reported clash is with a HP Smart Array 5i RAID controller (more precisely the cciss kernel module). With udev, the devices are named /dev/cciss/cXdYpZ with X, Y and Z regular numbers. With devfs, the devices are /dev/hostX/targetY/partZ or symlinked from /dev/cciss/cXdY.

If this is the case, don't forget to update your /etc/fstab and bootloader configuration files accordingly.

Other issues


If device nodes are not created when a module is loaded from /etc/modules.autoload.d/kernel-2.6 but they appear when you load the module manually with modprobe then you should try upgrading to sys-apps/baselayout-1.8.12 or later.

Support for the framebuffer devices (/dev/fb/*) comes with the kernel starting from version 2.6.6-rc2.

For kernels older than 2.6.4 you have to explicitly include support for the /dev/pts filesystem.
Code Listing 3.5: Enabling the /dev/pts filesystem
File systems --->   
Pseudo filesystems --->
[*] /dev/pts file system for Unix98 PTYs

4. Resources & Acknowledgements


The udev talk on the Linux Symposium (Ottawa, Ontario Canada - 2003) given by Greg Kroah-Hartman (IBM Corporation) provided a solid understanding on the udev application.

Decibel's UDEV Primer is an in-depth document about udev and Gentoo.

Writing udev rules by fellow Gentoo developer Daniel Drake is an excellent document to learn how to customize your udev installation.
rate this article:
current rating: average rating: 1.0 (5 votes) (1=very good 6=terrible)
Your rating:
Very good (1) Good (2) ok (3) average (4) bad (5) terrible (6)

back



Other free services
toURL.org
Shorten long
URLs to short
links like
http://tourl.org/2
tourl.org
.
Reverse DNS lookup
Find out which hostname(s)
resolve to a
given IP or other hostnames for the server
www.reversednslookup.org

New Packages

- as rdf newsfeed
- as rss newsfeed
- as Atom newsfeed
2019-04-25
PEAR-Archive_Tar - 1.4.7
Ebuild name:

dev-php/PEAR-Archive_Tar-1.4.7

Description

Tar file management class

Added to portage

2019-04-25

PEAR-HTML_QuickForm2 - 2.1.0
Ebuild name:

dev-php/PEAR-HTML_QuickForm2-2.1.0

Description

Creating, validating, processing HTML forms methods (PHP5 optimi

Added to portage

2019-04-25

PEAR-XML_Parser - 1.3.8
Ebuild name:

dev-php/PEAR-XML_Parser-1.3.8

Description

XML parsing class based on PHP's SAX parser

Added to portage

2019-04-25

PHP_CodeSniffer - 3.4.2
Ebuild name:

dev-php/PHP_CodeSniffer-3.4.2

Description

Detect violations of PHP code standards

Added to portage

2019-04-25

alsa-plugins - 1.1.8-r1
Ebuild name:

media-plugins/alsa-plugins-1.1.8-r1

Description

ALSA extra plugins

Added to portage

2019-04-25

avra - 1.4.1
Ebuild name:

dev-embedded/avra-1.4.1

Description

Atmel AVR Assembler

Added to portage

2019-04-25

bunny - 2.14.2
Ebuild name:

dev-ruby/bunny-2.14.2

Description

Another synchronous Ruby AMQP client

Added to portage

2019-04-25

cproto - 4.7o
Ebuild name:

dev-util/cproto-4.7o

Description

Generate C function prototypes from C source code

Added to portage

2019-04-25

deb2targz - 1-r3
Ebuild name:

app-arch/deb2targz-1-r3

Description

Convert a .deb file to a .tar.gz archive

Added to portage

2019-04-25

drone-cli - 1.1.0
Ebuild name:

dev-util/drone-cli-1.1.0

Description

Command-line interface for Drone

Added to portage

2019-04-25

elasticsearch - 5.6.16
Ebuild name:

app-misc/elasticsearch-5.6.16

Description

Open Source, Distributed, RESTful, Search Engine

Added to portage

2019-04-25

elasticsearch - 6.7.1
Ebuild name:

app-misc/elasticsearch-6.7.1

Description

Open Source, Distributed, RESTful, Search Engine

Added to portage

2019-04-25

elasticsearch - 7.0.0
Ebuild name:

app-misc/elasticsearch-7.0.0

Description

Open Source, Distributed, RESTful, Search Engine

Added to portage

2019-04-25

electron-cash - 3.3.6
Ebuild name:

net-misc/electron-cash-3.3.6

Description

Lightweight Bitcoin Cash client (BCH fork of Electrum)

Added to portage

2019-04-25

electron-cash - 4.0.2
Ebuild name:

net-misc/electron-cash-4.0.2

Description

Lightweight Bitcoin Cash client (BCH fork of Electrum)

Added to portage

2019-04-25

electrum-ltc - 3.3.4.1
Ebuild name:

net-misc/electrum-ltc-3.3.4.1

Description

Litecoin thin client

Added to portage

2019-04-25

gitlabform - 1.3.0
Ebuild name:

dev-python/gitlabform-1.3.0

Description

Easy configuration as code tool for GitLab using config in plain YAML

Added to portage

2019-04-25

hardlink - 0.3.2
Ebuild name:

app-arch/hardlink-0.3.2

Description

A tool which replaces copies of a file with hardlinks

Added to portage

2019-04-25

hiera-eyaml-gpg - 0.7.2
Ebuild name:

dev-ruby/hiera-eyaml-gpg-0.7.2

Description

A GPG backend for hiera-eyaml

Added to portage

2019-04-25

imagemagick - 6.9.10.42
Ebuild name:

media-gfx/imagemagick-6.9.10.42

Description

A collection of tools and libraries for many image formats

Added to portage

2019-04-25

imagemagick - 7.0.8.42
Ebuild name:

media-gfx/imagemagick-7.0.8.42

Description

A collection of tools and libraries for many image formats

Added to portage

2019-04-25

intel-microcode - 20180807a_p20190420
Ebuild name:

sys-firmware/intel-microcode-20180807a_p20190420

Description

Intel IA32/IA64 microcode update data

Added to portage

2019-04-25

ipopt - 3.12.12
Ebuild name:

sci-libs/ipopt-3.12.12

Description

Interior-Point Optimizer for large-scale nonlinear optimization

Added to portage

2019-04-25

istioctl - 1.1.4
Ebuild name:

net-misc/istioctl-1.1.4

Description

Istio configuration command line utility

Added to portage

2019-04-25

kdstatemachineeditor - 1.2.4
Ebuild name:

dev-util/kdstatemachineeditor-1.2.4

Description

Framework for creating Qt State Machine metacode using graphica

Added to portage

2019-04-25

kglobalaccel - 5.57.0-r1
Ebuild name:

kde-frameworks/kglobalaccel-5.57.0-r1

Description

Framework to handle global shortcuts

Added to portage

2019-04-25

kstars - 3.2.1
Ebuild name:

sci-astronomy/kstars-3.2.1

Description

Desktop Planetarium

Added to portage

2019-04-25

kube-bench - 0.0.28
Ebuild name:

app-admin/kube-bench-0.0.28

Description

Kubernetes Bench for Security runs the CIS Kubernetes Benchmark

Added to portage

2019-04-25

libaio - 0.3.111
Ebuild name:

dev-libs/libaio-0.3.111

Description

Asynchronous input/output library that uses the kernels native interface

Added to portage

2019-04-25

libaio - 9999
Ebuild name:

dev-libs/libaio-9999

Description

Asynchronous input/output library that uses the kernels native interface

Added to portage

2019-04-25

libp11 - 0.4.10
Ebuild name:

dev-libs/libp11-0.4.10

Description

Abstraction layer to simplify PKCS11 API

Added to portage

2019-04-25

loksh - 6.5
Ebuild name:

app-shells/loksh-6.5

Description

Linux port of OpenBSD's ksh

Added to portage

2019-04-25

mesa - 19.0.3
Ebuild name:

media-libs/mesa-19.0.3

Description

OpenGL-like graphic library for Linux

Added to portage

2019-04-25

msmtp - 1.8.4
Ebuild name:

mail-mta/msmtp-1.8.4

Description

An SMTP client and SMTP plugin for mail user agents such as Mutt

Added to portage

2019-04-25

nano - 4.2
Ebuild name:

app-editors/nano-4.2

Description

GNU GPL'd Pico clone with more functionality

Added to portage

2019-04-25

nginx - 1.15.12-r1
Ebuild name:

www-servers/nginx-1.15.12-r1

Description

Robust, small and high performance http and reverse proxy server

Added to portage

2019-04-25

nginx - 1.16.0
Ebuild name:

www-servers/nginx-1.16.0

Description

Robust, small and high performance http and reverse proxy server

Added to portage

2019-04-25

ofono - 1.29
Ebuild name:

net-misc/ofono-1.29

Description

Open Source mobile telephony (GSM/UMTS) daemon

Added to portage

2019-04-25

opendkim - 2.10.3-r12
Ebuild name:

mail-filter/opendkim-2.10.3-r12

Description

A milter providing DKIM signing and verification

Added to portage

2019-04-25

openscad - 2015.03_p3-r1
Ebuild name:

media-gfx/openscad-2015.03_p3-r1

Description

The Programmers Solid 3D CAD Modeller

Added to portage

2019-04-25

polkit-gnome - 0.105-r2
Ebuild name:

gnome-extra/polkit-gnome-0.105-r2

Description

A dbus session bus service that is used to bring up authenticatio

Added to portage

2019-04-25

prometheus - 2.9.2
Ebuild name:

app-metrics/prometheus-2.9.2

Description

Prometheus monitoring system and time series database

Added to portage

2019-04-25

pytest - 4.4.1
Ebuild name:

dev-python/pytest-4.4.1

Description

Simple powerful testing with Python

Added to portage

2019-04-25

qtfm - 6.1.9
Ebuild name:

x11-misc/qtfm-6.1.9

Description

A small, lightweight file manager for desktops based on pure Qt

Added to portage

2019-04-25

rqlite - 4.5.0
Ebuild name:

dev-db/rqlite-4.5.0

Description

Replicated SQLite using the Raft consensus protocol

Added to portage

2019-04-25

selenium-webdriver - 3.142.0
Ebuild name:

dev-ruby/selenium-webdriver-3.142.0

Description

This gem provides Ruby bindings for WebDriver

Added to portage

2019-04-25

subversion - 1.12.0
Ebuild name:

dev-vcs/subversion-1.12.0

Description

Advanced version control system

Added to portage

2019-04-25

tmux - 2.9
Ebuild name:

app-misc/tmux-2.9

Description

Terminal multiplexer

Added to portage

2019-04-25

unifi - 5.11.18
Ebuild name:

net-wireless/unifi-5.11.18

Description

A Management Controller for Ubiquiti Networks UniFi APs

Added to portage

2019-04-25

widelands - 0.20_rc1
Ebuild name:

games-strategy/widelands-0.20_rc1

Description

A game similar to Settlers 2

Added to portage

2019-04-25

2019-04-24
chrome-binary-plugins - 74.0.3729.108
Ebuild name:

www-plugins/chrome-binary-plugins-74.0.3729.108

Description

Binary plugins from Google Chrome for use in Chromi

Added to portage

2019-04-24

chrome-binary-plugins - 74.0.3729.108_beta
Ebuild name:

www-plugins/chrome-binary-plugins-74.0.3729.108_beta

Description

Binary plugins from Google Chrome for use in C

Added to portage

2019-04-24

cinnamon - 4.0.3-r1
Ebuild name:

gnome-extra/cinnamon-4.0.3-r1

Description

A fork of GNOME Shell with layout similar to GNOME 2

Added to portage

2019-04-24

exiftool - 11.37
Ebuild name:

media-libs/exiftool-11.37

Description

Read and write meta information in image, audio and video files

Added to portage

2019-04-24

gertty - 1.6.0
Ebuild name:

dev-util/gertty-1.6.0

Description

Gertty is a console-based interface to the Gerrit Code Review system.

Added to portage

2019-04-24

git-remote-hg - 1.0.0-r1
Ebuild name:

dev-vcs/git-remote-hg-1.0.0-r1

Description

Semi-official Mercurial bridge from Git project

Added to portage

2019-04-24

google-chrome - 74.0.3729.108-r1
Ebuild name:

www-client/google-chrome-74.0.3729.108-r1

Description

The web browser from Google

Added to portage

2019-04-24

google-chrome-beta - 74.0.3729.108-r1
Ebuild name:

www-client/google-chrome-beta-74.0.3729.108-r1

Description

The web browser from Google

Added to portage

2019-04-24

haproxy - 1.9.6-r1
Ebuild name:

net-proxy/haproxy-1.9.6-r1

Description

A TCP/HTTP reverse proxy for high availability environments

Added to portage

2019-04-24

kdiff3 - 1.8.0_pre20190420
Ebuild name:

kde-misc/kdiff3-1.8.0_pre20190420

Description

Frontend to diff3 based on KDE Frameworks

Added to portage

2019-04-24

libgit2-glib - 0.28.0.1
Ebuild name:

dev-libs/libgit2-glib-0.28.0.1

Description

Git library for GLib

Added to portage

2019-04-24

libressl - 2.6.5
Ebuild name:

dev-libs/libressl-2.6.5

Description

Free version of the SSL/TLS protocol forked from OpenSSL

Added to portage

2019-04-24

libressl - 2.9.1
Ebuild name:

dev-libs/libressl-2.9.1

Description

Free version of the SSL/TLS protocol forked from OpenSSL

Added to portage

2019-04-24

lineak-xosdplugin - 0.9.0-r2
Ebuild name:

x11-misc/lineak-xosdplugin-0.9.0-r2

Description

Xosd plugin for LINEAK

Added to portage

2019-04-24

lyx - 2.3.0-r1
Ebuild name:

app-office/lyx-2.3.0-r1

Description

WYSIWYM frontend for LaTeX, DocBook, etc.

Added to portage

2019-04-24

nessus-agent-bin - 7.3.2
Ebuild name:

net-analyzer/nessus-agent-bin-7.3.2

Description

A remote security scanner for Linux - agent component

Added to portage

2019-04-24

nessus-bin - 8.3.1
Ebuild name:

net-analyzer/nessus-bin-8.3.1

Description

A remote security scanner for Linux

Added to portage

2019-04-24

nodejs - 12.0.0
Ebuild name:

net-libs/nodejs-12.0.0

Description

A JavaScript runtime built on Chrome's V8 JavaScript engine

Added to portage

2019-04-24

nvidia-drivers - 430.09
Ebuild name:

x11-drivers/nvidia-drivers-430.09

Description

NVIDIA Accelerated Graphics Driver

Added to portage

2019-04-24

opera-beta - 60.0.3255.60
Ebuild name:

www-client/opera-beta-60.0.3255.60

Description

A fast and secure web browser

Added to portage

2019-04-24

opera-developer - 61.0.3296.0
Ebuild name:

www-client/opera-developer-61.0.3296.0

Description

A fast and secure web browser

Added to portage

2019-04-24

parallel - 20190422
Ebuild name:

sys-process/parallel-20190422

Description

A shell tool for executing jobs in parallel locally or on remote mach

Added to portage

2019-04-24

postfix - 3.5_pre20190330-r1
Ebuild name:

mail-mta/postfix-3.5_pre20190330-r1

Description

A fast and secure drop-in replacement for sendmail

Added to portage

2019-04-24

pycairo - 1.18.1
Ebuild name:

dev-python/pycairo-1.18.1

Description

Python bindings for the cairo library

Added to portage

2019-04-24

serverengine - 2.1.1
Ebuild name:

dev-ruby/serverengine-2.1.1

Description

A framework to implement robust multiprocess servers

Added to portage

2019-04-24

skrooge - 2.19.1
Ebuild name:

app-office/skrooge-2.19.1

Description

Personal finances manager, aiming at being simple and intuitive

Added to portage

2019-04-24

stunnel - 5.51-r1
Ebuild name:

net-misc/stunnel-5.51-r1

Description

TLS/SSL - Port Wrapper

Added to portage

2019-04-24

uptimed - 0.4.1-r1
Ebuild name:

app-misc/uptimed-0.4.1-r1

Description

System uptime record daemon that keeps track of your highest uptimes

Added to portage

2019-04-24

urllib3 - 1.24.2
Ebuild name:

dev-python/urllib3-1.24.2

Description

HTTP library with thread-safe connection pooling, file post, and more

Added to portage

2019-04-24

vivaldi-snapshot - 2.5.1525.4_p1
Ebuild name:

www-client/vivaldi-snapshot-2.5.1525.4_p1

Description

A browser for our friends

Added to portage

2019-04-24

wpa_supplicant - 2.8-r1
Ebuild name:

net-wireless/wpa_supplicant-2.8-r1

Description

IEEE 802.1X/WPA supplicant for secure wireless transfers

Added to portage

2019-04-24

youtube-dl - 2019.04.24
Ebuild name:

net-misc/youtube-dl-2019.04.24

Description

Download videos from YouTube.com (and more sites...)

Added to portage

2019-04-24

rdf newsfeed | rss newsfeed | Atom newsfeed
- Powered by LeopardCMS - Running on Gentoo -
Copyright 2004-2018 Sascha Nitsch Unternehmensberatung UG(haftungsbeschänkt)
Valid XHTML1.1 : Valid CSS : buttonmaker
- Level Triple-A Conformance to Web Content Accessibility Guidelines 1.0 -
- Copyright and legal notices -
Time to create this page: 55.7 ms