summaryrefslogtreecommitdiffstats
path: root/perl-install/share/po/de.po
diff options
context:
space:
mode:
authorFunda Wang <fwang@mandriva.org>2005-12-04 05:38:08 +0000
committerFunda Wang <fwang@mandriva.org>2005-12-04 05:38:08 +0000
commitbc6c36c512cd91d117f70ff08eef0beb6ea71872 (patch)
tree226b8fd46df2a4cf4e05d997974cdf8c72c195ca /perl-install/share/po/de.po
parent00869d816fe6aa65231eab6a0685ac476cb1040c (diff)
downloaddrakx-bc6c36c512cd91d117f70ff08eef0beb6ea71872.tar
drakx-bc6c36c512cd91d117f70ff08eef0beb6ea71872.tar.gz
drakx-bc6c36c512cd91d117f70ff08eef0beb6ea71872.tar.bz2
drakx-bc6c36c512cd91d117f70ff08eef0beb6ea71872.tar.xz
drakx-bc6c36c512cd91d117f70ff08eef0beb6ea71872.zip
Updated POT file.
Diffstat (limited to 'perl-install/share/po/de.po')
-rw-r--r--perl-install/share/po/de.po205
1 files changed, 103 insertions, 102 deletions
diff --git a/perl-install/share/po/de.po b/perl-install/share/po/de.po
index d164da21a..35cc48de0 100644
--- a/perl-install/share/po/de.po
+++ b/perl-install/share/po/de.po
@@ -18,7 +18,7 @@
msgid ""
msgstr ""
"Project-Id-Version: DrakX-de\n"
-"POT-Creation-Date: 2005-11-30 17:38+0800\n"
+"POT-Creation-Date: 2005-12-04 12:48+0800\n"
"PO-Revision-Date: 2005-09-20 17:12+0200\n"
"Last-Translator: Frank Koester <frank@dueppel13.de>\n"
"Language-Team: deutsch\n"
@@ -89,7 +89,7 @@ msgstr ""
"Starten Sie den Rechner neu, entfernen Sie den USB-Stick, deaktivieren Sie\n"
"den Schreibschutz und starten Sie Mandriva Move erneut."
-#: ../move/move.pm:468 help.pm:409 install_steps_interactive.pm:1334
+#: ../move/move.pm:468 help.pm:409 install_steps_interactive.pm:1331
#, c-format
msgid "Reboot"
msgstr "Neustart"
@@ -502,7 +502,7 @@ msgid "Custom"
msgstr "Benutzerdefiniert"
#: Xconfig/main.pm:127 diskdrake/dav.pm:26 help.pm:14
-#: install_steps_interactive.pm:86 install_steps_interactive.pm:1334
+#: install_steps_interactive.pm:86 install_steps_interactive.pm:1331
#: printer/printerdrake.pm:882 printer/printerdrake.pm:899
#: printer/printerdrake.pm:4523 printer/printerdrake.pm:4987
#: standalone/drakhosts:263 standalone/drakroam:230 standalone/draksplash:93
@@ -680,7 +680,7 @@ msgstr "OK"
#: Xconfig/resolution_and_depth.pm:373 diskdrake/smbnfs_gtk.pm:80 help.pm:89
#: help.pm:444 install_steps_gtk.pm:455 install_steps_interactive.pm:431
-#: install_steps_interactive.pm:842 interactive.pm:120 interactive.pm:437
+#: install_steps_interactive.pm:839 interactive.pm:120 interactive.pm:437
#: interactive/http.pm:104 interactive/http.pm:160 interactive/newt.pm:318
#: interactive/stdio.pm:39 interactive/stdio.pm:142
#: printer/printerdrake.pm:3859 standalone/drakautoinst:215
@@ -1375,7 +1375,7 @@ msgstr "Standardmäßig Unicode verwenden"
msgid "All languages"
msgstr "Alle Sprachen"
-#: any.pm:842 help.pm:566 help.pm:855 install_steps_interactive.pm:963
+#: any.pm:842 help.pm:566 help.pm:855 install_steps_interactive.pm:960
#, c-format
msgid "Country / Region"
msgstr "Staat / Region"
@@ -2162,10 +2162,13 @@ msgstr "Optionen: %s"
#: diskdrake/hd_gtk.pm:52 diskdrake/interactive.pm:292
#: diskdrake/smbnfs_gtk.pm:21 install_interactive.pm:62
-#: install_steps_interactive.pm:342
+#: install_interactive.pm:216 install_interactive.pm:222
+#: install_interactive.pm:275 install_interactive.pm:280
+#: install_steps_interactive.pm:278 install_steps_interactive.pm:342
+#: steps.pm:21
#, c-format
-msgid "Partitionning"
-msgstr ""
+msgid "Partitioning"
+msgstr "Partitionierung"
#: diskdrake/hd_gtk.pm:92
#, c-format
@@ -3090,7 +3093,7 @@ msgstr "Konnte das Paket %s nicht installieren!"
msgid "Mandatory package %s is missing"
msgstr "Das zwingend benötigte Paket „%s“ fehlt."
-#: do_pkgs.pm:35 harddrake/sound.pm:275 install_steps_interactive.pm:1319
+#: do_pkgs.pm:35 harddrake/sound.pm:275 install_steps_interactive.pm:1316
#: keyboard.pm:388 network/ndiswrapper.pm:95 network/netconnect.pm:472
#: printer/printerdrake.pm:1416 printer/printerdrake.pm:2494
#: printer/printerdrake.pm:2609 printer/printerdrake.pm:2930
@@ -3175,19 +3178,19 @@ msgstr "Fehler beim Aushängen von %s: %s"
msgid "Enabling swap partition %s"
msgstr "Swap Partition „%s“ aktivieren"
-#: fs/mount_options.pm:112
+#: fs/mount_options.pm:113
#, c-format
msgid "Use an encrypted file system"
msgstr "Ein verschlüsseltes Dateisystem verwenden"
-#: fs/mount_options.pm:114
+#: fs/mount_options.pm:115
#, c-format
msgid "Enable group disk quota accounting and optionally enforce limits"
msgstr ""
"Gruppen-Platten-Quota entsprechend aktivieren und wahlweise Grenzwerte "
"durchsetzen"
-#: fs/mount_options.pm:116
+#: fs/mount_options.pm:117
#, c-format
msgid ""
"Do not update inode access times on this file system\n"
@@ -3197,7 +3200,7 @@ msgstr ""
"(z.B. für schnellere Zugriffe auf den News-Spool um News-Server zu "
"beschleunigen)."
-#: fs/mount_options.pm:119
+#: fs/mount_options.pm:120
#, c-format
msgid ""
"Can only be mounted explicitly (i.e.,\n"
@@ -3206,14 +3209,14 @@ msgstr ""
"Kann nur explizit eingehängt werden (so wird\n"
"etwa das Dateisystem nicht bei „-a“ eingehängt)."
-#: fs/mount_options.pm:122
+#: fs/mount_options.pm:123
#, c-format
msgid "Do not interpret character or block special devices on the file system."
msgstr ""
"Interpretiere keine zeichen- oder speziellen blockorientierten Geräte auf "
"dem Dateisystem."
-#: fs/mount_options.pm:124
+#: fs/mount_options.pm:125
#, c-format
msgid ""
"Do not allow execution of any binaries on the mounted\n"
@@ -3224,7 +3227,7 @@ msgstr ""
"gehängten Dateisystem. Diese Option ist nützlich für Server mit Datei-\n"
"systemen, auf denen sich Binärdateien fremder Architekturen befinden. "
-#: fs/mount_options.pm:128
+#: fs/mount_options.pm:129
#, c-format
msgid ""
"Do not allow set-user-identifier or set-group-identifier\n"
@@ -3235,32 +3238,37 @@ msgstr ""
"Bits. (Dies scheint sicher, ist aber in faktisch unsicherer falls Sie\n"
"suidperl(1) installiert haben.)"
-#: fs/mount_options.pm:132
+#: fs/mount_options.pm:133
#, c-format
msgid "Mount the file system read-only."
msgstr "Das Dateisystem read only einhängen/mounten"
-#: fs/mount_options.pm:134
+#: fs/mount_options.pm:135
#, c-format
msgid "All I/O to the file system should be done synchronously."
msgstr "Alle I/O-Operationen am Dateisystem sollten parallel gemacht werden."
-#: fs/mount_options.pm:138
+#: fs/mount_options.pm:139
#, c-format
msgid "Allow an ordinary user to mount the file system."
msgstr ""
-#: fs/mount_options.pm:140
+#: fs/mount_options.pm:141
#, c-format
msgid "Enable user disk quota accounting, and optionally enforce limits"
msgstr "Nutzer-Platten-Quota aktivieren und wahlweise Grenzwerte durchsetzen"
-#: fs/mount_options.pm:142
+#: fs/mount_options.pm:143
+#, c-format
+msgid "Support user. extended attributes"
+msgstr ""
+
+#: fs/mount_options.pm:145
#, c-format
msgid "Give write access to ordinary users"
msgstr "Schreib Zugriff für den normalen Benutzer"
-#: fs/mount_options.pm:144
+#: fs/mount_options.pm:147
#, c-format
msgid "Give read-only access to ordinary users"
msgstr "Schreib-Zugriff für den normalen Benutzer"
@@ -3325,7 +3333,7 @@ msgstr ""
msgid "There is already a partition with mount point %s\n"
msgstr "Es gibt bereits eine Partition, mit dem Einhängepunkt %s\n"
-#: fsedit.pm:386
+#: fsedit.pm:388
#, c-format
msgid ""
"You've selected a software RAID partition as root (/).\n"
@@ -3338,7 +3346,7 @@ msgstr ""
"„/boot“-Partition arbeiten. Stellen Sie sicher, dass Sie eine solche \n"
"Partition erstellen."
-#: fsedit.pm:391
+#: fsedit.pm:394
#, fuzzy, c-format
msgid ""
"You can not use the LVM Logical Volume for mount point %s since it spans "
@@ -3347,7 +3355,7 @@ msgstr ""
"Sie können eine logische LVM-Partition nicht als Einhängepunkt %s verwenden, "
"da er sich über mehrere physische Datenträger erstreckt"
-#: fsedit.pm:393
+#: fsedit.pm:396
#, fuzzy, c-format
msgid ""
"You've selected the LVM Logical Volume as root (/).\n"
@@ -3360,12 +3368,12 @@ msgstr ""
"mehrere physische Datenträger erstreckt.\n"
"Sie sollten zuerst eine Partition „/boot“ anlegen"
-#: fsedit.pm:397 fsedit.pm:399
+#: fsedit.pm:400 fsedit.pm:402
#, c-format
msgid "This directory should remain within the root filesystem"
msgstr "Dieses Verzeichnis muss innerhalb des Wurzelverzeichnisses bleiben"
-#: fsedit.pm:401 fsedit.pm:403
+#: fsedit.pm:404 fsedit.pm:406
#, c-format
msgid ""
"You need a true filesystem (ext2/ext3, reiserfs, xfs, or jfs) for this mount "
@@ -3374,20 +3382,20 @@ msgstr ""
"Sie benötigen ein echtes GNU/Linux-Dateisystem (ext2/ext3, reiserfs, xfs "
"oder jfs) für diesen Einhängepunkt.\n"
-#: fsedit.pm:405
+#: fsedit.pm:408
#, c-format
msgid "You can not use an encrypted file system for mount point %s"
msgstr ""
"Sie können kein verschlüsseltes Medium für den Einhängepunkt %s verwenden."
# ../../diskdrak1
-#: fsedit.pm:466
+#: fsedit.pm:469
#, c-format
msgid "Not enough free space for auto-allocating"
msgstr ""
"Nicht genug freier Platz, damit ich selbst eine Partition anlegen kann."
-#: fsedit.pm:468
+#: fsedit.pm:471
#, c-format
msgid "Nothing to do"
msgstr "Nichts zu tun."
@@ -3518,7 +3526,7 @@ msgid "AGP controllers"
msgstr "AGP-Controller"
#: harddrake/data.pm:324 help.pm:186 help.pm:855
-#: install_steps_interactive.pm:995
+#: install_steps_interactive.pm:992
#, c-format
msgid "Printer"
msgstr "Drucker"
@@ -3585,7 +3593,7 @@ msgid "Bridges and system controllers"
msgstr "Brücken und System-Controller"
#: harddrake/data.pm:449 help.pm:855 install_steps_interactive.pm:119
-#: install_steps_interactive.pm:955 standalone/finish-install:37
+#: install_steps_interactive.pm:952 standalone/finish-install:37
#: standalone/keyboarddrake:29
#, c-format
msgid "Keyboard"
@@ -3596,7 +3604,7 @@ msgstr "Tastatur"
msgid "Tablet and touchscreen"
msgstr "Tablet und Touchscreen"
-#: harddrake/data.pm:471 help.pm:855 install_steps_interactive.pm:988
+#: harddrake/data.pm:471 help.pm:855 install_steps_interactive.pm:985
#, c-format
msgid "Mouse"
msgstr "Maus"
@@ -4447,7 +4455,7 @@ msgstr ""
"Internetverbindung. Mit dieser Option installieren Sie einen Time-Server,\n"
"der von weiteren Maschinen Ihres lokalen Netzwerks genutzt werden kann."
-#: help.pm:217 install_steps_interactive.pm:890
+#: help.pm:217 install_steps_interactive.pm:887
#, c-format
msgid "Hardware clock set to GMT"
msgstr "Hardware Uhr gestellt auf GMT"
@@ -4902,17 +4910,17 @@ msgstr ""
msgid "Generate auto-install floppy"
msgstr "Erstellen einer Autoinstallations-Diskette"
-#: help.pm:409 install_steps_interactive.pm:1345
+#: help.pm:409 install_steps_interactive.pm:1342
#, c-format
msgid "Replay"
msgstr "Erneut abspielen"
-#: help.pm:409 install_steps_interactive.pm:1345
+#: help.pm:409 install_steps_interactive.pm:1342
#, c-format
msgid "Automated"
msgstr "Automatisiert"
-#: help.pm:409 install_steps_interactive.pm:1348
+#: help.pm:409 install_steps_interactive.pm:1345
#, c-format
msgid "Save packages selection"
msgstr "Paketauswahl speichern"
@@ -5821,8 +5829,8 @@ msgstr ""
"angezeigt. Sollte die von DrakX getroffene Auswahl nicht korrekt sein,\n"
"betätigen Sie einfach die Schaltfläche, um sie zu korrigieren."
-#: help.pm:788 help.pm:855 install_steps_interactive.pm:1022
-#: install_steps_interactive.pm:1039
+#: help.pm:788 help.pm:855 install_steps_interactive.pm:1019
+#: install_steps_interactive.pm:1036
#, c-format
msgid "Sound card"
msgstr "Soundkarte"
@@ -5970,13 +5978,13 @@ msgstr ""
"als Server verwenden, sollten Sie unbedingt einen Blick auf diese Liste\n"
"werfen."
-#: help.pm:855 install_steps_interactive.pm:886
-#: install_steps_interactive.pm:981 standalone/drakclock:100
+#: help.pm:855 install_steps_interactive.pm:883
+#: install_steps_interactive.pm:978 standalone/drakclock:100
#, c-format
msgid "Timezone"
msgstr "Zeitzone"
-#: help.pm:855 install_steps_interactive.pm:1055
+#: help.pm:855 install_steps_interactive.pm:1052
#, c-format
msgid "TV card"
msgstr "TV-Karte"
@@ -5991,33 +5999,33 @@ msgstr "ISDN-Karte"
msgid "Graphical Interface"
msgstr "Grafikumgebung"
-#: help.pm:855 install_any.pm:1733 install_steps_interactive.pm:1073
+#: help.pm:855 install_any.pm:1733 install_steps_interactive.pm:1070
#: standalone/drakbackup:2040
#, c-format
msgid "Network"
msgstr "Netzwerk"
-#: help.pm:855 install_steps_interactive.pm:1085
+#: help.pm:855 install_steps_interactive.pm:1082
#, c-format
msgid "Proxies"
msgstr "Proxies"
-#: help.pm:855 install_steps_interactive.pm:1096
+#: help.pm:855 install_steps_interactive.pm:1093
#, c-format
msgid "Security Level"
msgstr "Sicherheitsebene"
-#: help.pm:855 install_steps_interactive.pm:1110 network/drakfirewall.pm:189
+#: help.pm:855 install_steps_interactive.pm:1107 network/drakfirewall.pm:189
#, c-format
msgid "Firewall"
msgstr "Firewall"
-#: help.pm:855 install_steps_interactive.pm:1126
+#: help.pm:855 install_steps_interactive.pm:1123
#, c-format
msgid "Bootloader"
msgstr "Bootloader"
-#: help.pm:855 install_steps_interactive.pm:1139 services.pm:114
+#: help.pm:855 install_steps_interactive.pm:1136 services.pm:114
#: services.pm:157 services.pm:193
#, c-format
msgid "Services"
@@ -6520,13 +6528,6 @@ msgstr ""
"Sie haben mehr als eine Festplatte.\n"
"Auf welche soll GNU/Linux installiert werden?"
-#: install_interactive.pm:216 install_interactive.pm:222
-#: install_interactive.pm:275 install_interactive.pm:280
-#: install_steps_interactive.pm:278 steps.pm:21
-#, c-format
-msgid "Partitioning"
-msgstr "Partitionierung"
-
#: install_interactive.pm:221
#, c-format
msgid "ALL existing partitions and their data will be lost on drive %s"
@@ -6941,7 +6942,7 @@ msgstr ""
"Testen Sie die CD-ROM auf einem Linux-Rechner mittels „rpm -qpl \n"
"media/main/*.rpm“\n"
-#: install_steps_auto_install.pm:75 install_steps_stdio.pm:27
+#: install_steps_auto_install.pm:68 install_steps_stdio.pm:27
#, c-format
msgid "Entering step `%s'\n"
msgstr "Beginn von Schritt „%s“\n"
@@ -7151,13 +7152,13 @@ msgstr "Bei der Installation der Pakete trat ein Fehler auf:"
msgid "Go on anyway?"
msgstr "Wollen Sie trotzdem fortfahren?"
-#: install_steps_gtk.pm:582 install_steps_interactive.pm:941 steps.pm:30
+#: install_steps_gtk.pm:582 install_steps_interactive.pm:938 steps.pm:30
#, c-format
msgid "Summary"
msgstr "Zusammenfassung"
-#: install_steps_gtk.pm:605 install_steps_interactive.pm:937
-#: install_steps_interactive.pm:1086
+#: install_steps_gtk.pm:605 install_steps_interactive.pm:934
+#: install_steps_interactive.pm:1083
#, c-format
msgid "not configured"
msgstr "Nicht eingerichtet"
@@ -7355,7 +7356,7 @@ msgstr "Suche nach vorhandenen Paketen und aktualisiere RPM-Datenbank ..."
msgid "Looking for available packages..."
msgstr "Suche nach vorhandenen Paketen..."
-#: install_steps_interactive.pm:430 install_steps_interactive.pm:841
+#: install_steps_interactive.pm:430 install_steps_interactive.pm:838
#, c-format
msgid "Choose a mirror from which to get the packages"
msgstr "Bitte wählen Sie einen Mirror, von dem Sie die Pakete holen wollen."
@@ -7472,12 +7473,12 @@ msgstr ""
"Bitte stellen Sie sicher, dass sich das Update-Modul-Medium im Laufwerk %s "
"befindet"
-#: install_steps_interactive.pm:814
+#: install_steps_interactive.pm:811
#, c-format
msgid "Updates"
msgstr "Aktualisierungen"
-#: install_steps_interactive.pm:815
+#: install_steps_interactive.pm:812
#, c-format
msgid ""
"You now have the opportunity to download updated packages. These packages\n"
@@ -7497,7 +7498,7 @@ msgstr ""
"\n"
"Möchten Sie die Aktualisierungen vornehmen?"
-#: install_steps_interactive.pm:836
+#: install_steps_interactive.pm:833
#, c-format
msgid ""
"Contacting Mandriva Linux web site to get the list of available mirrors..."
@@ -7505,67 +7506,67 @@ msgstr ""
"Kontaktiere Mandriva Linux Web-Server, um eine Liste verfügbarer Pakete zu "
"erhalten..."
-#: install_steps_interactive.pm:855
+#: install_steps_interactive.pm:852
#, c-format
msgid "Contacting the mirror to get the list of available packages..."
msgstr "Kontaktiere Mirror, um eine Liste verfügbarer Pakete zu erhalten..."
-#: install_steps_interactive.pm:859
+#: install_steps_interactive.pm:856
#, c-format
msgid "Unable to contact mirror %s"
msgstr "Mirror %s nicht erreichbar"
-#: install_steps_interactive.pm:859
+#: install_steps_interactive.pm:856
#, c-format
msgid "Would you like to try again?"
msgstr "Wollen Sie es nochmal versuchen?"
-#: install_steps_interactive.pm:886 standalone/drakclock:45
+#: install_steps_interactive.pm:883 standalone/drakclock:45
#, c-format
msgid "Which is your timezone?"
msgstr "Wählen Sie Ihre Zeitzone"
-#: install_steps_interactive.pm:891
+#: install_steps_interactive.pm:888
#, c-format
msgid "Automatic time synchronization (using NTP)"
msgstr "Automatische Zeit-Synchronisation (durch NTP)"
-#: install_steps_interactive.pm:899
+#: install_steps_interactive.pm:896
#, c-format
msgid "NTP Server"
msgstr "NTP-Server"
-#: install_steps_interactive.pm:954 install_steps_interactive.pm:962
-#: install_steps_interactive.pm:980 install_steps_interactive.pm:987
-#: install_steps_interactive.pm:1138 services.pm:133
+#: install_steps_interactive.pm:951 install_steps_interactive.pm:959
+#: install_steps_interactive.pm:977 install_steps_interactive.pm:984
+#: install_steps_interactive.pm:1135 services.pm:133
#: standalone/drakbackup:1585
#, c-format
msgid "System"
msgstr "System"
-#: install_steps_interactive.pm:994 install_steps_interactive.pm:1021
-#: install_steps_interactive.pm:1038 install_steps_interactive.pm:1054
-#: install_steps_interactive.pm:1065
+#: install_steps_interactive.pm:991 install_steps_interactive.pm:1018
+#: install_steps_interactive.pm:1035 install_steps_interactive.pm:1051
+#: install_steps_interactive.pm:1062
#, c-format
msgid "Hardware"
msgstr "Hardware"
-#: install_steps_interactive.pm:1000 install_steps_interactive.pm:1009
+#: install_steps_interactive.pm:997 install_steps_interactive.pm:1006
#, c-format
msgid "Remote CUPS server"
msgstr "CUPS-Server im Netzwerkbetrieb"
-#: install_steps_interactive.pm:1000
+#: install_steps_interactive.pm:997
#, c-format
msgid "No printer"
msgstr "Kein Drucker"
-#: install_steps_interactive.pm:1042
+#: install_steps_interactive.pm:1039
#, c-format
msgid "Do you have an ISA sound card?"
msgstr "Verfügen Sie über eine ISA-Soundkarte?"
-#: install_steps_interactive.pm:1044
+#: install_steps_interactive.pm:1041
#, c-format
msgid ""
"Run \"alsaconf\" or \"sndconfig\" after installation to configure your sound "
@@ -7574,71 +7575,71 @@ msgstr ""
"Starten Sie „sndconfig“ oder „alsaconf“ nach der Installation, um Ihre "
"Soundkarte einzurichten."
-#: install_steps_interactive.pm:1046
+#: install_steps_interactive.pm:1043
#, c-format
msgid "No sound card detected. Try \"harddrake\" after installation"
msgstr ""
"Es wurde keine Soundkarte gefunden. Versuchen Sie „harddrake“ nach der "
"Installation."
-#: install_steps_interactive.pm:1066
+#: install_steps_interactive.pm:1063
#, c-format
msgid "Graphical interface"
msgstr "Grafikumgebung"
-#: install_steps_interactive.pm:1072 install_steps_interactive.pm:1084
+#: install_steps_interactive.pm:1069 install_steps_interactive.pm:1081
#, c-format
msgid "Network & Internet"
msgstr "Netzwerk & Internet"
-#: install_steps_interactive.pm:1086
+#: install_steps_interactive.pm:1083
#, c-format
msgid "configured"
msgstr "konfiguriert"
-#: install_steps_interactive.pm:1095 install_steps_interactive.pm:1109
+#: install_steps_interactive.pm:1092 install_steps_interactive.pm:1106
#: security/level.pm:55 steps.pm:20
#, c-format
msgid "Security"
msgstr "Sicherheit"
-#: install_steps_interactive.pm:1114
+#: install_steps_interactive.pm:1111
#, c-format
msgid "activated"
msgstr "aktiviert"
-#: install_steps_interactive.pm:1114
+#: install_steps_interactive.pm:1111
#, c-format
msgid "disabled"
msgstr "deaktiviert"
-#: install_steps_interactive.pm:1125
+#: install_steps_interactive.pm:1122
#, c-format
msgid "Boot"
msgstr "Start"
#. -PO: example: lilo-graphic on /dev/hda1
-#: install_steps_interactive.pm:1129 printer/printerdrake.pm:961
+#: install_steps_interactive.pm:1126 printer/printerdrake.pm:961
#, c-format
msgid "%s on %s"
msgstr "%s auf %s"
-#: install_steps_interactive.pm:1143 services.pm:175
+#: install_steps_interactive.pm:1140 services.pm:175
#, c-format
msgid "Services: %d activated for %d registered"
msgstr "Dienste: %d aktiviert von %d registrierten"
-#: install_steps_interactive.pm:1155
+#: install_steps_interactive.pm:1152
#, c-format
msgid "You have not configured X. Are you sure you really want this?"
msgstr "Sie haben X nicht konfiguriert. Sind Sie sicher?"
-#: install_steps_interactive.pm:1236
+#: install_steps_interactive.pm:1233
#, c-format
msgid "Preparing bootloader..."
msgstr "Bereite Bootloader vor ..."
-#: install_steps_interactive.pm:1246
+#: install_steps_interactive.pm:1243
#, c-format
msgid ""
"You appear to have an OldWorld or Unknown machine, the yaboot bootloader "
@@ -7652,12 +7653,12 @@ msgstr ""
"müssen um Ihren Rechner zu starten. Der Kernelparameter für das Root-"
"Dateisystem ist: root=%s"
-#: install_steps_interactive.pm:1252
+#: install_steps_interactive.pm:1249
#, c-format
msgid "Do you want to use aboot?"
msgstr "Möchten Sie „aboot“ verwenden?"
-#: install_steps_interactive.pm:1255
+#: install_steps_interactive.pm:1252
#, c-format
msgid ""
"Error installing aboot, \n"
@@ -7667,7 +7668,7 @@ msgstr ""
"mit Gewalt versuchen, auch wenn dies die Zerstörung der ersten \n"
"Partition verursachen kann?"
-#: install_steps_interactive.pm:1272
+#: install_steps_interactive.pm:1269
#, c-format
msgid ""
"In this security level, access to the files in the Windows partition is "
@@ -7676,22 +7677,22 @@ msgstr ""
"In dieser Sicherheitseinstellung ist der Zugriff auf Datein der "
"Windowspartition nur dem Administrator erlaubt"
-#: install_steps_interactive.pm:1301 standalone/drakautoinst:76
+#: install_steps_interactive.pm:1298 standalone/drakautoinst:76
#, c-format
msgid "Insert a blank floppy in drive %s"
msgstr "Legen Sie eine leere Diskette in das %s ein."
-#: install_steps_interactive.pm:1306
+#: install_steps_interactive.pm:1303
#, c-format
msgid "Please insert another floppy for drivers disk"
msgstr "Bitte legen Sie eine andere Diskette als Treiberdiskette ein"
-#: install_steps_interactive.pm:1308
+#: install_steps_interactive.pm:1305
#, c-format
msgid "Creating auto install floppy..."
msgstr "Erstelle eine Auto-Installationsdiskette"
-#: install_steps_interactive.pm:1320
+#: install_steps_interactive.pm:1317
#, c-format
msgid ""
"Some steps are not completed.\n"
@@ -7702,19 +7703,19 @@ msgstr ""
"\n"
"Wollen Sie DrakX wirklich beenden?"
-#: install_steps_interactive.pm:1330 standalone/draksambashare:422
+#: install_steps_interactive.pm:1327 standalone/draksambashare:422
#: standalone/draksambashare:529 standalone/drakups:120 standalone/drakups:159
#: standalone/logdrake:452 standalone/logdrake:458
#, c-format
msgid "Congratulations"
msgstr "Herzlichen Glückwunsch!"
-#: install_steps_interactive.pm:1338 install_steps_interactive.pm:1339
+#: install_steps_interactive.pm:1335 install_steps_interactive.pm:1336
#, c-format
msgid "Generate auto install floppy"
msgstr "Erstellen einer Auto-Installationsdiskette"
-#: install_steps_interactive.pm:1340
+#: install_steps_interactive.pm:1337
#, c-format
msgid ""
"The auto install can be fully automated if wanted,\n"
use devices; use run_program; use modules; use c; #-##################################################################################### #- Globals #-##################################################################################### my %serialprobe; #-###################################################################################### #- Functions #-###################################################################################### sub get() { #- Detect the default BIOS boot harddrive is kind of tricky. We may have IDE, #- SCSI and RAID devices on the same machine. From what I see so far, the default #- BIOS boot harddrive will be #- 1. The first IDE device if IDE exists. Or #- 2. The first SCSI device if SCSI exists. Or #- 3. The first RAID device if RAID exists. getIDE(), getSCSI(), getDAC960(), getCompaqSmartArray(), getATARAID(); } sub hds() { grep { may_be_a_hd($_) } get() } sub tapes() { grep { $_->{media_type} eq 'tape' } get() } sub cdroms() { grep { $_->{media_type} eq 'cdrom' } get() } sub burners() { grep { isBurner($_) } cdroms() } sub dvdroms() { grep { isDvdDrive($_) } cdroms() } sub raw_zips() { grep { member($_->{media_type}, 'fd', 'hd') && isZipDrive($_) } get() } sub ls120s() { grep { member($_->{media_type}, 'fd', 'hd') && isLS120Drive($_) } get() } sub zips() { map { $_->{device} .= 4; $_; } raw_zips(); } sub floppies { my ($o_not_detect_legacy_floppies) = @_; require modules; my @fds; if (!$o_not_detect_legacy_floppies) { eval { modules::load("floppy") if $::isInstall }; if (!is_xbox()) { @fds = map { my $info = c::floppy_info(devices::make("fd$_")); if_($info && $info ne '(null)', { device => "fd$_", media_type => 'fd', info => $info }); } qw(0 1); } } my @ide = ls120s() and eval { modules::load("ide_floppy") }; eval { modules::load("usb_storage") } if $::isInstall && usbStorage(); my @scsi = grep { $_->{media_type} eq 'fd' } getSCSI(); @ide, @scsi, @fds; } sub floppies_dev() { map { $_->{device} } floppies() } sub floppy() { first(floppies_dev()) } #- example ls120, model = "LS-120 SLIM 02 UHD Floppy" sub removables() { floppies(), cdroms(), zips(); } sub get_sys_cdrom_info { my (@drives) = @_; my @drives_order; foreach (cat_("/proc/sys/dev/cdrom/info")) { my ($t, $l) = split ':'; my @l; @l = split(' ', $l) if $l; if ($t eq 'drive name') { @drives_order = map { my $dev = $_; find { $_->{device} eq $dev } @drives; } @l; } else { my $capacity; if ($t eq 'Can write CD-R') { $capacity = 'burner'; } elsif ($t eq 'Can read DVD') { $capacity = 'DVD'; } if ($capacity) { each_index { ($drives_order[$::i] || {})->{capacity} .= "$capacity " if $_; } @l; } } } } sub complete_usb_storage_info { my (@l) = @_; my @usb = grep { exists $_->{usb_vendor} } @l; foreach my $usb (usb_probe()) { if (my $e = find { !$_->{found} && $_->{usb_vendor} == $usb->{vendor} && $_->{usb_id} == $usb->{id} } @usb) { my $host = get_sysfs_usbpath_for_block($e->{device}); if ($host) { $e->{info} = chomp_(cat_("/sys/block/$e->{device}/$host/../serial")); $e->{usb_description} = join('|', chomp_(cat_("/sys/block/$e->{device}/$host/../manufacturer")), chomp_(cat_("/sys/block/$e->{device}/$host/../product"))); } local $e->{found} = 1; $e->{"usb_$_"} ||= $usb->{$_} foreach keys %$usb; } } } sub isBurner { my ($e) = @_; $e->{capacity} =~ /burner/ and return 1; #- do not work for SCSI my $f = tryOpen($e->{device}); #- SCSI burner are not detected this way. $f && c::isBurner(fileno($f)); } sub isDvdDrive { my ($e) = @_; $e->{capacity} =~ /DVD/ || $e->{info} =~ /DVD/ and return 1; #- do not work for SCSI my $f = tryOpen($e->{device}); $f && c::isDvdDrive(fileno($f)); } sub isZipDrive { $_[0]{info} =~ /ZIP\s+\d+/ } #- accept ZIP 100, untested for bigger ZIP drive. sub isLS120Drive { $_[0]{info} =~ /LS-?120|144MB/ } sub isKeyUsb { begins_with($_[0]{usb_media_type} || '', 'Mass Storage') && $_[0]{media_type} eq 'hd' } sub isFloppyUsb { $_[0]{usb_driver} && $_[0]{usb_driver} eq 'Removable:floppy' } sub may_be_a_hd { my ($e) = @_; $e->{media_type} eq 'hd' && !( isZipDrive($e) || isLS120Drive($e) || begins_with($e->{usb_media_type} || '', 'Mass Storage|Floppy (UFI)') ); } sub get_sysfs_field_from_link { my ($device, $field) = @_; my $l = readlink("$device/$field"); $l =~ s!.*/!!; $l; } sub get_sysfs_usbpath_for_block { my ($device) = @_; my $host = readlink("/sys/block/$device/device"); $host =~ s!/host.*!!; $host; } sub get_scsi_driver { my (@l) = @_; # find driver of host controller from sysfs: foreach (@l) { next if $_->{driver}; my $host = get_sysfs_usbpath_for_block($_->{device}); $_->{driver} = get_sysfs_field_from_link("/sys/block/$_->{device}/$host", 'driver'); } } sub getSCSI() { my $dev_dir = '/sys/bus/scsi/devices'; my @scsi_types = ( "Direct-Access", "Sequential-Access", "Printer", "Processor", "WORM", "CD-ROM", "Scanner", "Optical Device", "Medium Changer", "Communications", ); my @l; foreach (all($dev_dir)) { my ($host, $channel, $id, $lun) = split ':' or log::l("bad entry in $dev_dir: $_"), next; my $dir = "$dev_dir/$_"; # handle both old and new kernels: my $node = find { -e $_ } "$dir/block", top(glob_("$dir/block*")), "$dir/tape", top(glob_("$dir/scsi_generic*")); my ($device) = readlink($node) =~ m!/(?:scsi_(?:generic|tape)|block)/(.*)!; if (!$device) { ($device) = top(glob_("$node/*")) =~ m!/(?:scsi_(?:generic|tape)|block)/(.*)!; } warn("cannot get info for device ($_)"), next if !$device; my $usb_dir = readlink("$node/device") =~ m!/usb! && "$node/device/../../../.."; my $get_usb = sub { chomp_(cat_("$usb_dir/$_[0]")) }; my $get = sub { my $s = cat_("$dir/$_[0]"); $s =~ s/\s+$//; $s; }; # Old hp scanners report themselves as "Processor"s # (see linux/include/scsi/scsi.h and sans-find-scanner.1) my $raw_type = $scsi_types[$get->('type')]; my $media_type = ${{ st => 'tape', sr => 'cdrom', sd => 'hd', sg => 'generic' }}{substr($device, 0, 2)} || $raw_type =~ /Scanner|Processor/ && 'scanner'; push @l, { info => $get->('vendor') . ' ' . $get->('model'), host => $host, channel => $channel, id => $id, lun => $lun, description => join('|', $get->('vendor'), $get->('model')), bus => 'SCSI', media_type => $media_type, device => $device, $usb_dir ? ( usb_vendor => hex($get_usb->('idVendor')), usb_id => hex($get_usb->('idProduct')), ) : (), }; } @l = sort { $a->{host} <=> $b->{host} || $a->{channel} <=> $b->{channel} || $a->{id} <=> $b->{id} || $a->{lun} <=> $b->{lun} } @l; complete_usb_storage_info(@l); foreach (@l) { $_->{media_type} = 'fd' if $_->{media_type} eq 'hd' && isFloppyUsb($_); } get_sys_cdrom_info(@l); get_scsi_driver(@l); @l; } my %eide_hds = ( "ASUS" => "Asus", "CD-ROM CDU" => "Sony", "CD-ROM Drive/F5D" => "ASUSTeK", "Compaq" => "Compaq", "CONNER" => "Conner Peripherals", "IBM" => "IBM", "FUJITSU" => "Fujitsu", "HITACHI" => "Hitachi", "Lite-On" => "Lite-On Technology Corp.", "LITE-ON" => "Lite-On Technology Corp.", "LTN" => "Lite-On Technology Corp.", "IOMEGA" => "Iomega", "MAXTOR" => "Maxtor", "Maxtor" => "Maxtor", "Micropolis" => "Micropolis", "Pioneer" => "Pioneer", "PLEXTOR" => "Plextor", "QUANTUM" => "Quantum", "SAMSUNG" => "Samsung", "Seagate " => "Seagate Technology", "ST3" => "Seagate Technology", "TEAC" => "Teac", "TOSHIBA" => "Toshiba", "WDC" => "Western Digital Corp.", ); sub getIDE() { my @idi; #- what about a system with absolutely no IDE on it, like some sparc machine. -e "/proc/ide" or return (); #- Great. 2.2 kernel, things are much easier and less error prone. foreach my $d (sort @{[glob_('/proc/ide/hd*')]}) { cat_("$d/driver") =~ /ide-scsi/ and next; #- already appears in /proc/scsi/scsi my $t = chomp_(cat_("$d/media")); my $type = ${{ disk => 'hd', cdrom => 'cdrom', tape => 'tape', floppy => 'fd' }}{$t} or next; my $info = chomp_(cat_("$d/model")) || "(none)"; my $num = ord(($d =~ /(.)$/)[0]) - ord 'a'; my ($vendor, $model) = map { if_($info =~ /^$_(-|\s)*(.*)/, $eide_hds{$_}, $2); } keys %eide_hds; my $host = $num; ($host, my $id) = divide($host, 2); ($host, my $channel) = divide($host, 2); push @idi, { media_type => $type, device => basename($d), info => $info, host => $host, channel => $channel, id => $id, bus => 'ide', if_($vendor, Vendor => $vendor), if_($model, Model => $model) }; } get_sys_cdrom_info(@idi); @idi; } sub block_devices() { -d '/sys/block' ? map { s|!|/|; $_ } all('/sys/block') : map { $_->{dev} } do { require fs::proc_partitions; fs::proc_partitions::read_raw() }; } sub getCompaqSmartArray() { my (@idi, $f); foreach ('array/ida', 'cpqarray/ida', 'cciss/cciss') { my $prefix = "/proc/driver/$_"; #- kernel 2.4 places it here $prefix = "/proc/$_" if !-e "${prefix}0"; #- kernel 2.2 my ($name) = m|/(.*)|; for (my $i = 0; -r ($f = "${prefix}$i"); $i++) { my @raw_devices = cat_($f) =~ m|^\s*($name/.*?):|gm; #- this is ugly and buggy. keeping it for 2007.0 #- on a cciss, cciss/cciss0 didn't contain c0d0, but cciss/cciss1 did contain c0d1 #- the line below adds both c0d0 and c0d1 for cciss0, and so some duplicates @raw_devices or @raw_devices = grep { m!^$name/! } block_devices(); foreach my $raw_device (@raw_devices) { my $device = -d "/dev/$raw_device" ? "$raw_device/disc" : $raw_device; push @idi, { device => $device, prefix => $raw_device . 'p', info => "Compaq RAID logical disk", media_type => 'hd', bus => $name }; } } } #- workaround the buggy code above. this should be safe though uniq_ { $_->{device} } @idi; } sub getDAC960() { my %idi; #- We are looking for lines of this format:DAC960#0: #- /dev/rd/c0d0: RAID-7, Online, 17928192 blocks, Write Thru0123456790123456789012 foreach (syslog()) { my ($device, $info) = m|/dev/(rd/.*?): (.*?),| or next; $idi{$device} = { info => $info, media_type => 'hd', device => $device, bus => 'dac960' }; } values %idi; } sub getATARAID() { my %l; foreach (syslog()) { my ($device) = m|^\s*(ataraid/d\d+):| or next; $l{$device} = { info => 'ATARAID block device', media_type => 'hd', device => $device, bus => 'ataraid' }; log::l("ATARAID: $device"); } values %l; } # cpu_name : arch() =~ /^alpha/ ? "cpu " : # arch() =~ /^ppc/ ? "processor" : "vendor_id" # cpu_model : arch() =~ /^alpha/ ? "cpu model" : # arch() =~ /^ppc/ ? "cpu " : "model name" # cpu_freq = arch() =~ /^alpha/ ? "cycle frequency [Hz]" : # arch() =~ /^ppc/ ? "clock" : "cpu MHz" sub getCPUs() { my (@cpus, $cpu); foreach (cat_("/proc/cpuinfo")) { if (/^processor/) { # ix86 specific push @cpus, $cpu if $cpu; $cpu = {}; } $cpu->{$1} = $2 if /^([^\t]+).*:\s(.*)$/; $cpu->{processor}++ if $1 eq "processor"; } push @cpus, $cpu; @cpus; } sub ix86_cpu_frequency() { cat_('/proc/cpuinfo') =~ /cpu MHz\s*:\s*(\d+)/ && $1; } sub probe_category { my ($category) = @_; require list_modules; my @modules = list_modules::category2modules($category); if_($category =~ /sound/ && arch() =~ /ppc/ && get_mac_model() !~ /IBM/, { driver => 'snd_powermac', description => 'Macintosh built-in' }, ), grep { if ($category eq 'network/isdn') { my $b = $_->{driver} =~ /ISDN:([^,]*),?([^,]*)(?:,firmware=(.*))?/; if ($b) { $_->{driver} = $1; $_->{type} = $2; $_->{type} =~ s/type=//; $_->{firmware} = $3; $_->{driver} eq "hisax" and $_->{options} .= " id=HiSax"; } $b; } else { member($_->{driver}, @modules); } } probeall(); } sub getSoundDevices() { probe_category('multimedia/sound'); } sub isTVcardConfigurable { member($_[0]{driver}, qw(bttv cx88 saa7134)) } sub getTVcards() { probe_category('multimedia/tv') } sub getInputDevices() { my (@devices, $device); foreach (cat_('/proc/bus/input/devices')) { if (/^I:/) { $device = {}; $device->{vendor} = /Vendor=(\w+)/ && $1; $device->{id} = /Product=(\w+)/ && $1; $device->{bustype} = /Bus=(\w+)/ && $1; } elsif (/N: Name="(.*)"/) { my $descr = $1; $device->{description} = "|$descr"; #- I: Bus=0011 Vendor=0002 Product=0008 Version=7321 #- N: Name="AlpsPS/2 ALPS GlidePoint" #- P: Phys=isa0060/serio1/input0 #- H: Handlers=mouse1 event2 ts1 #- B: EV=f #- B: KEY=420 0 70000 0 0 0 0 0 0 0 0 #=> BTN_LEFT BTN_RIGHT BTN_MIDDLE BTN_TOOL_FINGER BTN_TOUCH #- or B: KEY=420 0 670000 0 0 0 0 0 0 0 0 #=> same with BTN_BACK #- B: REL=3 #=> X Y #- B: ABS=1000003 #=> X Y PRESSURE #- I: Bus=0011 Vendor=0002 Product=0008 Version=2222 #- N: Name="AlpsPS/2 ALPS DualPoint TouchPad" #- P: Phys=isa0060/serio1/input0 #- S: Sysfs=/class/input/input2 #- H: Handlers=mouse1 ts1 event2 #- B: EV=f #- B: KEY=420 0 70000 0 0 0 0 0 0 0 0 #- B: REL=3 #- B: ABS=1000003 #- I: Bus=0011 Vendor=0002 Product=0007 Version=0000 #- N: Name="SynPS/2 Synaptics TouchPad" #- P: Phys=isa0060/serio1/input0 #- S: Sysfs=/class/input/input1 #- H: Handlers=mouse0 event1 ts0 #- B: EV=b #- B: KEY=6420 0 70000 0 0 0 0 0 0 0 0 #=> BTN_LEFT BTN_RIGHT BTN_MIDDLE BTN_TOOL_FINGER BTN_TOUCH BTN_TOOL_DOUBLETAP BTN_TOOL_TRIPLETAP #- or B: KEY=6420 0 670000 0 0 0 0 0 0 0 0 #=> same with BTN_BACK #- or B: KEY=420 30000 670000 0 0 0 0 0 0 0 0 #=> same without BTN_TOOL_TRIPLETAP but with BTN_B #- B: ABS=11000003 #=> X Y PRESSURE TOOL_WIDTH #- I: Bus=0003 Vendor=056a Product=0065 Version=0108 #- N: Name="Wacom Bamboo" #- B: KEY=1c63 0 70033 0 0 0 0 0 0 0 0 #=> BTN_0 BTN_1 BTN_4 BTN_5 BTN_LEFT BTN_RIGHT BTN_MIDDLE TOOL_PEN TOOL_RUBBER TOOL_BRUSH TOOL_FINGER TOOL_MOUSE TOUCH STYLUS STYLUS2 #- B: ABS=100 3000103 #=> X Y WHEEL PRESSURE DISTANCE MISC #- I: Bus=0003 Vendor=056a Product=0011 Version=0201 #- N: Name="Wacom Graphire2 4x5" #- B: KEY=1c43 0 70000 0 0 0 0 0 0 0 0 #=> BTN_LEFT BTN_RIGHT BTN_MIDDLE TOOL_PEN TOOL_RUBBER TOOL_FINGER TOOL_MOUSE TOUCH STYLUS STYLUS2 #- B: ABS=100 3000003 #=> X Y PRESSURE DISTANCE MISC $device->{Synaptics} = $descr eq 'SynPS/2 Synaptics TouchPad'; $device->{ALPS} = $descr =~ m!^AlpsPS/2 ALPS!; } elsif (/H: Handlers=(.*)/) { my @l = split(' ', $1); $device->{driver} = $l[0]; #- keep it for compatibility $device->{Handlers} = +{ map { (/^(.*?)\d*$/ ? $1 : $_, $_) } split(' ', $1) }; } elsif (/S: Sysfs=(.+)/) { $device->{sysfs_path} = $1; } elsif (/P: Phys=(.*)/) { $device->{location} = $1; $device->{bus} = 'isa' if $device->{location} =~ /^isa/; $device->{bus} = 'usb' if $device->{location} =~ /^usb/i; } elsif (/B: REL=(.* )?(.*)/) { #- REL=3 #=> X Y #- REL=103 #=> X Y WHEEL #- REL=143 #=> X Y HWHEEL WHEEL #- REL=1c3 #=> X Y HWHEEL DIAL WHEEL my $REL = hex($2); $device->{HWHEEL} = 1 if $REL & (1 << 6); $device->{WHEEL} = 1 if $REL & (1 << 8); #- not reliable ("Mitsumi Apple USB Mouse" says REL=103 and KEY=1f0000 ...) } elsif (/B: KEY=(\S+)/) { #- some KEY explained: #- (but note that BTN_MIDDLE can be reported even if missing) #- (and "Mitsumi Apple USB Mouse" reports 1f0000) #- KEY=30000 0 0 0 0 0 0 0 0 #=> BTN_LEFT BTN_RIGHT #- KEY=70000 0 0 0 0 0 0 0 0 #=> BTN_LEFT BTN_RIGHT BTN_MIDDLE #- KEY=1f0000 0 0 0 0 0 0 0 0 #=> BTN_LEFT BTN_RIGHT BTN_MIDDLE BTN_SIDE BTN_EXTRA my $KEY = hex($1); $device->{SIDE} = 1 if $KEY & (1 << 0x13); } elsif (/^\s*$/) { push @devices, $device if $device; undef $device; } } @devices; } sub getInputDevices_and_usb() { my @l = getInputDevices(); foreach my $usb (usb_probe()) { if (my $e = find { hex($_->{vendor}) == $usb->{vendor} && hex($_->{id}) == $usb->{id} } @l) { $e->{usb} = $usb; } } @l; } sub getSerialModem { my ($modules_conf, $o_mouse) = @_; my $mouse = $o_mouse || {}; $mouse->{device} = readlink "/dev/mouse"; my $serdev = arch() =~ /ppc/ ? "macserial" : "serial"; eval { modules::load($serdev) }; my @modems; probeSerialDevices(); foreach my $port (map { "ttyS$_" } (0..7)) { next if $mouse->{device} =~ /$port/; my $device = "/dev/$port"; next if !-e $device || !hasModem($device); $serialprobe{$device}{device} = $device; push @modems, $serialprobe{$device}; } my @devs = pcmcia_probe(); foreach my $modem (@modems) { #- add an alias for macserial on PPC $modules_conf->set_alias('serial', $serdev) if arch() =~ /ppc/ && $modem->{device}; foreach (@devs) { $_->{device} and $modem->{device} = $_->{device} } } @modems; } sub getModem { my ($modules_conf) = @_; getSerialModem($modules_conf, {}), get_winmodems(); } sub get_winmodems() { matching_driver__regexp('www\.linmodems\.org'), matching_driver(list_modules::category2modules('network/modem'), list_modules::category2modules('network/slmodem')); } sub getBewan() { matching_desc__regexp('Bewan Systems\|.*ADSL|BEWAN ADSL USB|\[Unicorn\]'); } # generate from the following from eci driver sources: # perl -e 'while (<>) { print qq("$1$2",\n"$3$4",\n) if /\b([a-z\d]*)\s*([a-z\d]*)\s*([a-z\d]*)\s*([a-z\d]*)$/ }' <modems.db|sort|uniq sub getECI() { my @ids = ( "05090801", "05472131", "06590915", "071dac81", "08ea00c9", "09150001", "09150002", "091500ca", "091500e7", "09150101", "09150102", "09150204", "09150206", "09150802", "09150916", "09158000", "09158001", "0915ac82", "0baf00e6", "0e600100", "0e600101", "0fe88000", "16900203", "16900205", ); grep { member(sprintf("%04x%04x%04x%04x", $_->{vendor}, $_->{id}, $_->{subvendor}, $_->{subid}), @ids) } usb_probe(); } sub get_xdsl_usb_devices() { my @bewan = detect_devices::getBewan(); $_->{driver} = $_->{bus} eq 'USB' ? 'unicorn_usb_atm' : 'unicorn_pci_atm' foreach @bewan; my @eci = detect_devices::getECI(); $_->{driver} = 'eciusb' foreach @eci; my @usb = detect_devices::probe_category('network/usb_dsl'); $_->{description} = "USB ADSL modem (eagle chipset)" foreach grep { $_->{driver} eq 'ueagle_atm' && $_->{description} eq '(null)' } @usb; @usb, @bewan, @eci; } sub is_lan_interface { #- we want LAN like interfaces here (eg: ath|br|eth|fddi|plip|ra|tr|usb|wlan). #- there's also bnep%d for bluetooth, bcp%d... #- we do this by blacklisting the following interfaces: #- hso%d are created by drivers/net/usb/hso.c #- ippp|isdn|plip|ppp (initscripts suggest that isdn%d can be created but kernel sources claim not) #- ippp%d are created by drivers/isdn/i4l/isdn_ppp.c #- plip%d are created by drivers/net/plip.c #- ppp%d are created by drivers/net/ppp_generic.c is_useful_interface($_[0]) && $_[0] !~ /^(?:hso|ippp|isdn|plip|ppp)/; } sub is_useful_interface { #- sit0 which is *always* created by net/ipv6/sit.c, thus is always created since net.agent loads ipv6 module #- wifi%d are created by 3rdparty/hostap/hostap_hw.c (pseudo statistics devices, #14523) #- wmaster%d are created by net/mac80211/ieee80211.c ("master" 802.11 device) #- ax*, rose*, nr*, bce* and scc* are Hamradio devices (#28776) $_[0] !~ /^(?:lo|sit0|wifi|wmaster|ax|rose|nr|bce|scc)/; } sub is_wireless_interface { my ($interface) = @_; #- some wireless drivers don't always support the SIOCGIWNAME ioctl #- ralink devices need to be up to support it #- wlan-ng (prism2_*) need some special tweaks to support it #- use sysfs as fallback to detect wireless interfaces, #- i.e interfaces for which get_wireless_stats() is available c::isNetDeviceWirelessAware($interface) || -e "/sys/class/net/$interface/wireless"; } sub get_all_net_devices() { #- we need both detection schemes since: #- get_netdevices() use the SIOCGIFCONF ioctl that does not list interfaces that are down #- /proc/net/dev does not list VLAN and IP aliased interfaces uniq( (map { if_(/^\s*([A-Za-z0-9:\.]*):/, $1) } cat_("/proc/net/dev")), c::get_netdevices(), ); } sub get_lan_interfaces() { grep { is_lan_interface($_) } get_all_net_devices() } sub get_net_interfaces() { grep { is_useful_interface($_) } get_all_net_devices() } sub get_wireless_interface() { find { is_wireless_interface($_) } get_lan_interfaces() } sub is_bridge_interface { my ($interface) = @_; -f "/sys/class/net/$interface/bridge/bridge_id"; } sub get_ids_from_sysfs_device { my ($dev_path) = @_; my $dev_cat = sub { chomp_(cat_("$dev_path/$_[0]")) }; my $usb_root = -f "$dev_path/bInterfaceNumber" && "../" || -f "$dev_path/idVendor" && ""; my $is_pcmcia = -f "$dev_path/card_id"; my $sysfs_ids; my $bus = get_sysfs_field_from_link($dev_path, "bus"); #- FIXME: use $bus if ($is_pcmcia) { $sysfs_ids = { modalias => $dev_cat->('modalias') }; } else { $sysfs_ids = $bus eq 'ieee1394' ? { version => "../vendor_id", specifier_id => "specifier_id", specifier_version => "version", } : defined $usb_root ? { id => $usb_root . 'idProduct', vendor => $usb_root . 'idVendor' } : { id => "device", subid => "subsystem_device", vendor => "vendor", subvendor => "subsystem_vendor" }; $_ = hex($dev_cat->($_)) foreach values %$sysfs_ids; if ($bus eq 'pci') { my $device = basename(readlink $dev_path); my @ids = $device =~ /^(.{4}):(.{2}):(.{2})\.(.+)$/; @{$sysfs_ids}{qw(pci_domain pci_bus pci_device pci_function)} = map { hex($_) } @ids if @ids; } } $sysfs_ids; } sub device_matches_sysfs_ids { my ($device, $sysfs_ids) = @_; every { defined $device->{$_} && member($device->{$_}, $sysfs_ids->{$_}, 0xffff) } keys %$sysfs_ids; } sub device_matches_sysfs_device { my ($device, $dev_path) = @_; device_matches_sysfs_ids($device, get_ids_from_sysfs_device($dev_path)); } #sub getISDN() { # mapgrep(sub {member (($_[0] =~ /\s*(\w*):/), @netdevices), $1 }, split(/\n/, cat_("/proc/net/dev"))); #} sub getUPS() { # MGE serial PnP devices: (map { $_->{port} = $_->{DEVICE}; $_->{bus} = "Serial"; $_->{driver} = "mge-utalk" if $_->{MODEL} =~ /0001/; $_->{driver} = "mge-shut" if $_->{MODEL} =~ /0002/; $_->{media_type} = 'UPS'; $_->{description} = "MGE UPS SYSTEMS|UPS - Uninterruptible Power Supply" if $_->{MODEL} =~ /000[12]/; $_; } grep { $_->{DESCRIPTION} =~ /MGE UPS/ } values %serialprobe), # USB UPSs; (map { ($_->{name} = $_->{description}) =~ s/.*\|//; $_ } map { if ($_->{description} =~ /^American Power Conversion\|Back-UPS/ && $_->{driver} eq 'usbhid') { #- FIXME: should not be hardcoded, use $_->{sysfs_device} . */usb:(hiddev\d+) #- the device should also be assigned to the ups user $_->{port} = "/dev/hiddev0"; $_->{driver} = 'hidups'; $_; } elsif ($_->{description} =~ /^MGE UPS Systems\|/ && $_->{driver} =~ /ups$/) { $_->{port} = "auto"; $_->{media_type} = 'UPS'; $_->{driver} = 'newhidups'; $_; } else { (); } } usb_probe()); } $pcitable_addons = <<'EOF'; # add here lines conforming the pcitable format (0xXXXX\t0xXXXX\t"\w+"\t".*") EOF $usbtable_addons = <<'EOF'; # add here lines conforming the usbtable format (0xXXXX\t0xXXXX\t"\w+"\t".*") EOF sub install_addons { my ($prefix) = @_; #- this test means install_addons can only be called after ldetect-lst has been installed. if (-d "$prefix/usr/share/ldetect-lst") { my $update = 0; foreach ([ 'pcitable.d', $pcitable_addons ], [ 'usbtable.d', $usbtable_addons ]) { my ($dir, $str) = @$_; -d "$prefix/usr/share/ldetect-lst/$dir" && $str =~ /^[^#]/m and $update = 1 and output "$prefix/usr/share/ldetect-lst/$dir/95drakx.lst", $str; } $update and run_program::rooted($prefix, "/usr/sbin/update-ldetect-lst"); } } sub add_addons { my ($addons, @l) = @_; foreach (split "\n", $addons) { /^\s/ and die qq(bad detect_devices::probeall_addons line "$_"); s/^#.*//; s/"(.*?)"/$1/g; next if /^$/; my ($vendor, $id, $driver, $description) = split("\t", $_, 4) or die qq(bad detect_devices::probeall_addons line "$_"); foreach (@l) { $_->{vendor} == hex $vendor && $_->{id} == hex $id or next; put_in_hash($_, { driver => $driver, description => $description }); } } @l; } my (@pci, @usb); sub pci_probe__real() { add_addons($pcitable_addons, map { my %l; @l{qw(vendor id subvendor subid pci_domain pci_bus pci_device pci_function media_type nice_media_type driver description)} = split "\t"; $l{$_} = hex $l{$_} foreach qw(vendor id subvendor subid); $l{bus} = 'PCI'; $l{sysfs_device} = sprintf('/sys/bus/pci/devices/%04x:%02x:%02x.%d', $l{pci_domain}, $l{pci_bus}, $l{pci_device}, $l{pci_function}); \%l; } c::pci_probe()); } sub pci_probe() { @pci = pci_probe__real() if !@pci; @pci; } sub usb_probe__real() { -e "/proc/bus/usb/devices" or return; add_addons($usbtable_addons, map { my %l; @l{qw(vendor id media_type driver description pci_bus pci_device)} = split "\t"; $l{media_type} = join('|', grep { $_ ne '(null)' } split('\|', $l{media_type})); $l{$_} = hex $l{$_} foreach qw(vendor id); $l{sysfs_device} = "/sys/class/usb_device/usbdev$l{pci_bus}.$l{pci_device}/device"; $l{bus} = 'USB'; \%l; } c::usb_probe()); } sub usb_probe() { if ($::isStandalone && @usb) { @usb; } else { @usb = usb_probe__real(); } } sub firewire_probe() { my $dev_dir = '/sys/bus/ieee1394/devices'; my @l = map { my $dir = "$dev_dir/$_"; my $get = sub { chomp_(cat_($_[0])) }; { version => hex($get->("$dir/../vendor_id")), specifier_id => hex($get->("$dir/specifier_id")), specifier_version => hex($get->("$dir/version")), bus => 'Firewire', sysfs_device => $dir, }; } grep { -f "$dev_dir/$_/specifier_id" } all($dev_dir); my $e; foreach (cat_('/proc/bus/ieee1394/devices')) { if (m!Vendor/Model ID: (.*) \[(\w+)\] / (.*) \[(\w+)\]!) { push @l, $e = { vendor => hex($2), id => hex($4), description => join('|', $1, $3), bus => 'Firewire', }; } elsif (/Software Specifier ID: (\w+)/) { $e->{specifier_id} = hex $1; } elsif (/Software Version: (\w+)/) { $e->{specifier_version} = hex $1; } } foreach (@l) { if ($_->{specifier_id} == 0x00609e && $_->{specifier_version} == 0x010483) { add2hash($_, { driver => 'sbp2', description => "Generic Firewire Storage Controller" }); } elsif ($_->{specifier_id} == 0x00005e && $_->{specifier_version} == 0x000001) { add2hash($_, { driver => 'eth1394', description => "IEEE 1394 IPv4 Driver (IPv4-over-1394 as per RFC 2734)" }); } } @l; } sub pcmcia_controller_probe() { my ($controller) = probe_category('bus/pcmcia'); if (!$controller && !$::testing && !$::noauto && arch() =~ /i.86/) { my $driver = c::pcmcia_probe(); $controller = { driver => $driver, description => "PCMCIA controller ($driver)" } if $driver; } $controller; } sub pcmcia_probe() { require modalias; require modules; my $dev_dir = '/sys/bus/pcmcia/devices'; map { my $dir = "$dev_dir/$_"; my $get = sub { chomp_(cat_("$dir/$_[0]")) }; my $class_dev = first(glob_("$dir/tty*")); my $device = $class_dev && get_sysfs_field_from_link($dir, basename($class_dev)); my $modalias = $get->('modalias'); my $driver = get_sysfs_field_from_link($dir, 'driver'); #- fallback on modalias result #- but only if the module isn't loaded yet (else, it would already be binded) #- this prevents from guessing the wrong driver for multi-function devices my $module = $modalias && first(modalias::get_modules($modalias)); $driver ||= !member($module, modules::loaded_modules()) && $module; { description => join(' ', grep { $_ } map { $get->("prod_id$_") } 1 .. 4), driver => $driver, if_($modalias, modalias => $modalias), if_($device, device => $device), bus => 'PCMCIA', sysfs_device => $dir, }; } all($dev_dir); } my $dmi_probe; sub dmi_probe() { $dmi_probe ||= [ map { /(.*?)\t(.*)/ && { bus => 'DMI', driver => $1, description => $2 }; } $> ? () : c::dmi_probe() ]; @$dmi_probe; } # pcmcia_probe provides field "device", used in network.pm # => probeall with $probe_type is unsafe sub probeall() { return if $::noauto; pci_probe(), usb_probe(), firewire_probe(), pcmcia_probe(), dmi_probe(); } sub probeall_update_cache() { return if $::noauto; @pci = pci_probe__real(), @usb = usb_probe__real(), firewire_probe(), pcmcia_probe(), dmi_probe(); } sub matching_desc__regexp { my ($regexp) = @_; grep { $_->{description} =~ /$regexp/i } probeall(); } sub matching_driver__regexp { my ($regexp) = @_; grep { $_->{driver} =~ /$regexp/i } probeall(); } sub matching_driver { my (@list) = @_; grep { member($_->{driver}, @list) } probeall(); } sub probe_name { my ($name) = @_; map { $_->{driver} =~ /^$name:(.*)/ } probeall(); } sub probe_unique_name { my ($name) = @_; my @l = uniq(probe_name($name)); if (@l > 1) { log::l("oops, more than one $name from probe: ", join(' ', @l)); } $l[0]; } sub stringlist { my ($b_verbose) = @_; map { my $ids = $b_verbose || $_->{description} eq '(null)' ? sprintf("vendor:%04x device:%04x", $_->{vendor}, $_->{id}) : ''; my $subids = $_->{subid} && $_->{subid} != 0xffff ? sprintf("subv:%04x subd:%04x", $_->{subvendor}, $_->{subid}) : ''; sprintf("%-16s: %s%s%s", $_->{driver} || 'unknown', $_->{description}, $_->{media_type} ? sprintf(" [%s]", $_->{media_type}) : '', $ids || $subids ? " ($ids" . ($ids && $subids && " ") . "$subids)" : '', ); } probeall(); } sub tryOpen($) { my $F; sysopen($F, devices::make($_[0]), c::O_NONBLOCK()) && $F; } sub tryWrite($) { my $F; sysopen($F, devices::make($_[0]), 1 | c::O_NONBLOCK()) && $F; } my @dmesg; sub syslog() { if (-r "/tmp/syslog") { map { /<\d+>(.*)/ } cat_("/tmp/syslog"); } else { @dmesg = `/bin/dmesg` if !@dmesg; @dmesg; } } sub get_mac_model() { my $mac_model = cat_("/proc/device-tree/model") || die "Can not open /proc/device-tree/model"; log::l("Mac model: $mac_model"); $mac_model; } sub get_mac_generation() { cat_('/proc/cpuinfo') =~ /^pmac-generation\s*:\s*(.*)/m ? $1 : "Unknown Generation"; } sub hasSMP() { return if $::testing; (any { /NR_CPUS limit of 1 reached/ } syslog()) || any { /\bProcessor #(\d+)\s+(\S*)/ && $1 > 0 && $2 ne 'invalid' } syslog(); } sub hasPCMCIA() { $::o->{pcmcia} } #- because /proc/pcmcia seems not to be present on 2.4 at least (or use /var/run/stab) my (@dmis, $dmidecode_already_runned); # we return a list b/c several DMIs have the same name: sub dmidecode() { return @dmis if $dmidecode_already_runned; return if $>;