Einträge zu Tag: Debian

Hilfreiche apt-Kommandos zur Versionsprüfung

Erstellt: 25.12.2016 10:09

Ich durfte vor einer Weile ein Debian-System aufräumen welches "ein wenig Chaotisch" war durch das mischen diversester Repositories.
Deshalb hier ein paar nützliche Kommandos zum Kontrollieren der Paket-Versionen, zugehörigen Repositories und Dateien der Debian-Pakete.

Installierte Paket-Versionen auflisten mit Repository

# apt-show-versions [vim]
vim:amd64/jessie 2:7.4.488-7+deb8u1 uptodate
[...]

...ohne Paketname listet apt-show-versions alle auf dem System installierten Pakete auf, jeweils auf einer Zeile pro Paket. Dies ist nützlich herauszufinden welche Pakete zum Beispiel aus Testing sind während der Rest aus Stable stammt oder gar neuer oder älter als eine in einem Repository verfügbare Version.

Verfügbare Versionen eines Paketes anzeigen mit Repository

# apt-cache policy vim
vim:
  Installed: 2:7.4.488-7+deb8u1
  Candidate: 2:7.4.488-7+deb8u1
  Version table:
 *** 2:7.4.488-7+deb8u1 0
        500 http://security.debian.org/ jessie/updates/main amd64 Packages
        100 /var/lib/dpkg/status
     2:7.4.488-7 0
        500 http://mirror.switch.ch/ftp/mirror/debian/ jessie/main amd64 Packages

...im Prinzip ähnlich wie apt-show-versions, jedoch eine andere Art der Darstellung.

Paket nur herunterladen

# apt-get [-t stable] download vim
Get:1 http://security.debian.org/ jessie/updates/main vim amd64 2:7.4.488-7+deb8u1 [953 kB]
Fetched 953 kB in 0s (4'056 kB/s)

...falls mal was total verhunzt ist und man es manuell installieren möchte.

Paketherkunft einer Datei herausfinden

Zu welchem Paket gehört eine Datei?

# apt-file search /usr/bin/vim
graphviz: /usr/bin/vimdot
vim: /usr/bin/vim.basic
[...]

Dateien eines installierten Paketes auflisten

# dpkg-query -L vim
[...]
/usr/bin/vim.basic
/usr/share/doc/vim

Dateien von einem vorliegendem aber nicht installiertem Paket auflisten

# dpkg-deb -c sl_3.03-17_amd64.deb
[...]
-rwxr-xr-x root/root     11480 2012-03-29 16:43 ./usr/games/sl
[...]

Mit der md5-Summe prüfen ob alle Dateien zu einem installiertem Paket in Ordnung sind

# debsums vim
/usr/bin/vim.basic                                                            OK
/usr/share/bug/vim/presubj                                                    OK
/usr/share/bug/vim/script                                                     OK
/usr/share/lintian/overrides/vim                                              OK
[...]



Tagged: Debian Linux

Kommentar verfassen | Nach oben

Displayport schaltet sich aus aber nichtmehr ein

Erstellt: 15.01.2016 08:58

Der Displayport ist teils ein wenig leidig. Wird der Monitor ausgeschaltet oder ausgesteckt, aktiviert sich der Port nichtmehr. Der Bildschirm bleibt schwarz weil die Grafikkarte kein Signal mehr liefert.

Dagegen gibt es zwei Lösungen, entweder man benutzt (z.B. und sofern möglich) einen Displayport-zu-HDMI-Adapter oder man weckt den Port mit xrandr wieder auf.

Ersteres unterdrückt das vom Displayport genutzte Datenformat welches das Problem verursacht und zwingt die Grafikkarte HDMI-Signale zu senden.
(Sollte diese Erklärung falsch sein, macht mich darauf aufmerksam. ;) )

Nun zur Softwarelösung. Ist der Bildschirm schon dunkel, ist es möglich per SSH mit xrandr das Signal wieder einzuschalten:

$ xrandr
Screen 0: minimum 8 x 8, current 1920 x 1200, maximum 32767 x 32767
DP1 disconnected (normal left inverted right x axis y axis)
DP2 connected 1920x1200+0+0 (normal left inverted right x axis y axis) 518mm x 324mm
   1920x1200     59.95*+
   1920x1080     60.00 
[...]
DP3 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

Auf dem Problemrechner über SSH die DISPLAY-Variable setzen um den Screen zu definieren und mit xrandr den Bildschirm in Standardauflösung aktivieren:

$ ssh user@dunklerrechner

$ export DISPLAY=:0
$ xrandr --output DP2 --auto

Das Ganze geht aber auch von selbst:

...automagisiert mit udev!

Zuerst wird über udevadm ausgelesen was für Events - zum Beispiel beim Ein- und Ausschalten des Monitors - generiert werden:

$ udevadm monitor
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent

KERNEL[71528.979723] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
UDEV  [71529.116551] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
KERNEL[71531.400604] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
UDEV  [71531.598893] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)

Mit den ausgelesenen Event-Parametern (card0, drm, change) kann nun ein udev-Rules-File (/etc/udev/rules.d/70-dp-repair.rules) erstellt werden.

/usr/local/bin/dp-repair.sh ist hierbei das Script welches ausgeführt wird, wenn dieses Event eintritt. "user" sollte gegen den eigenen User ersetzt werden:

# /etc/udev/rules.d/70-dp-repair.rules
KERNEL=="card0", SUBSYSTEM=="drm", ACTION=="change", RUN+="/bin/su user -c /usr/local/bin/dp-repair.sh"

Hier noch das Beispielscript /usr/local/bin/dp-repair.sh. Es grept nach conntecteten Ports und aktiviert diese mit der Standardauflösung. Je nach Setup muss man dieses doch sehr simple Script noch den Bedürfnissen anpassen:

#!/bin/bash
# /usr/local/bin/dp-repair.sh
export DISPLAY=:0
for DPPORTS in $(xrandr | grep " connected " | awk '{ print$1 }'); do
        /usr/bin/xrandr --output $DPPORTS --auto
done;

Ausführbar machen:

# chmod +x /usr/local/bin/dp-repair.sh

Ein komplexeres Script zur Monitorsteuerung gibts unter: https://github.com/geyslan/xrasengan

Nun schaltet udev den Displayport automatisch wieder ein.



Tagged: Debian Hardware Linux ssh udev X11

Kommentar verfassen | Nach oben

Debian-Grundsystem auf CF-Karte installieren

Erstellt: 02.01.2016 13:05

Auf Embedded-Boards wie der Alix, kann ein Betriebssystem meistens nicht direkt installiert werden.
Deshalb installiere ich in diesem Beispiel von einem Debian-Hostsystem mit debootstrap ein bootbares Debian-Grundsystem auf eine CF-Karte.

Hierbei handelt es sich noch nicht um eine optimierte Konfiguration sondern um einen allgemeinen Leitfaden.


In diesem Beispiel wird angenommen, dass die CF-Karte auf dem Hostsystem /dev/sdc ist. Mit dmesg kann man sich informieren, welches Laufwerk zuletzt eingesteckt wurde.

Auf dem Hostsystem werden zuerst parted zum partitionieren, debootstrap für die Installation des Grundsystems und makedev zum initialisieren des /dev auf der CF-Karte installiert:

# aptitude install parted debootstrap makedev

Nun wird die CF-Karte vorbereitet. Dafür werden zuerst vorhandene Partitionen gelöscht, wie die FAT32-Partition(-en), die beim Kauf der Karte meistens vorhanden sind. parted ist ein einfaches Werkzeug dafür. "p" zeigt an, was sich auf der Karte befindet. "?" gibt eine Befehlsübersicht und mit "q" verlässt man parted wieder.

# parted /dev/sdc
(parted) p                                                               
Model: Generic- Compact Flash (scsi)
Disk /dev/sdc: 16.0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
 1      4162kB  16.0GB  16.0GB  primary  fat32        boot, lba

(parted) rm 1 # Löscht die Partition Nummer eins

Jetzt kann eine eigene Partitionierung geschrieben werden. Um es einfach zu halten, werden hier nur zwei Partitionen erstellt, eine für das System (8192MiB) und eine für Swap (128MiB). Der Platz dahinter wird freigelassen.

(parted) mklabel msdos
Warning: The existing disk label on /dev/sdc will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? yes                                                  
(parted) unit MiB
(parted) mkpart primary 0% 8192
(parted) mkpart primary 8192 8320
(parted) set 1 boot on
(parted) p                                                               
Model: Generic- Compact Flash (scsi)
Disk /dev/sdc: 15248MiB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start    End      Size     Type     File system  Flags
 1      1.00MiB  8192MiB  8191MiB  primary               boot, lba
 2      8192MiB  8320MiB  128MiB   primary               lba
(parted) q

...und /dev/sdc1 mit ext4 sowie /dev/sdc2 mit als swap formatieren:

# mkfs.ext4 /dev/sdc1
# mkswap /dev/sdc2

Ein Verzeichnis zum Mounten der CF-Karte erstellen und diese mounten:

# mkdir /mnt/cfcard
# mount /dev/sdc1 /mnt/cfcard/

Nun kann das Grundsystem installiert werden, debootstrap werden dabei die Architektur (bei der Alix i386), die Distribution (jessie), das Verzeichnis der gemounteten CF-Karte (jessie) und ein Spiegelserver von Debian mitgegeben, hier wäre das der Spiegel vom Schweizer Institut Switch (http://mirror.switch.ch/ftp/mirror/debian/).
Das ganze dauert nun eine Weile, bis am Ende die Meldung über den Abschluss der Installation kommt.

# debootstrap --arch i386 jessie /mnt/cfcard http://mirror.switch.ch/ftp/mirror/debian/
[...]
I: Base system installed successfully.

Eine initiale Struktur im /dev der CF-KArte wird angelegt.

# cd /mnt/cfcard/dev
# MAKEDEV generic

Nun werden die System-Mountpunkte hinzugefügt und das chroot betreten

# mount -t proc proc /mnt/cfcard/proc/
# mount -o bind /dev /mnt/cfcard/dev/
# mount -t sysfs sys /mnt/cfcard/sys/
# chroot /mnt/cfcard /bin/bash

Am besten installiert man nun den Lieblingseditor.

# apt-get install vim

Als nächstes müssen die beiden zu Anfangs erstellen Partitionen nach /etc/fstab eingetragen werden, damit diese beim Booten gemounted werden können

Die dafür nötige UUID erfährt man mit blkid, da die CF-Karte immernoch auf /dev/sdc ist, kann direkt danach gegrept werden:

# blkid | grep sdc
/dev/sdc1: UUID="5a63a141-ac3a-4e8e-a11f-3bc37a8895e7" TYPE="ext4" PARTUUID="2d4512a0-01"
/dev/sdc2: UUID="59bec5fd-811b-436f-b629-9cd6555e150e" TYPE="swap" PARTUUID="2d4512a0-02"

Diese Werte trägt man anschliessend mit dem zuvor installierten Editor nach /etc/fstab ein, zusammen mit den restlichen Parametern:

# /etc/fstab
UUID=5a63a141-ac3a-4e8e-a11f-3bc37a8895e7 / ext4 noatime,errors=remount-ro       0       1
UUID=59bec5fd-811b-436f-b629-9cd6555e150e none swap sw 0 0
tmpfs /tmp tmpfs defaults,noatime 0 0

Eine /etc/hostname und eine /etc/hostname mit dem Hostnamen des Systems werden ebenfalls erstellt oder ergänzt (diese wurden vom Hostsystem übernommen):

# /etc/hosts
127.0.0.1       localhost meinsystem meinsystem.xig.lan
::1             localhost ip6-localhost ip6-loopback meinsystem meinsystem.xig.lan
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

# /etc/hostname
meinsystem

Ebenfalls erstellt und konfiguriert werden sollte /etc/resolv.conf (auch diese wurde vom Hostsystem übernommen und kann so gelassen werden wie sie ist, falls das Gewünschte drinn steht)

# /etc/resolv.conf
nameserver 172.20.1.1
search xig.lan

Damit das Gerät auch über das Netzwerk erreichbar ist, braucht es eine anfängliche Netzwerkkonfiguration in /etc/network/interfaces. Die Alix hat zwei Ethernet-Schnittstellen, für den Anfang konfiguriere ich diese mit DHCP, je nach Vorliebe können auch feste IPs vergeben werden, dies lasse ich hier allerdings aus.

# /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp
# This is an autoconfigured IPv6 interface
iface eth0 inet6 auto

# The primary network interface
allow-hotplug eth1
iface eth1 inet dhcp
# This is an autoconfigured IPv6 interface
iface eth1 inet6 auto

Damit nach dem ersten Booten Pakete installiert werden können, braucht es in /etc/apt/sources.list für Debian Jessie folgende Einträge:

# /etc/apt/sources.list
deb http://mirror.switch.ch/ftp/mirror/debian/ jessie main non-free contrib
deb-src http://mirror.switch.ch/ftp/mirror/debian/ jessie main non-free contrib

deb http://mirror.switch.ch/ftp/mirror/debian/ jessie-updates main
deb-src http://mirror.switch.ch/ftp/mirror/debian/ jessie-updates main

deb http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main contrib non-free

Der erste Eintrag (deb http://mirror.switch.ch/ftp/mirror/debian jessie main) sollte schon vorhanden sein durch debootstrap, je nach Geschmack wird noch mit "non-free contrib" gewürzt, damit nicht-freie Paketquellen mit einbezogen werden.

Jetzt werden noch locales und die Zeitzone konfiguriert:

# apt-get install locales
# dpkg-reconfigure locales
# dpkg-reconfigure tzdata

Wird am System eine Tastatur angeschlossen sein, konfiguriert man noch diese:

# apt-get install console-setup
# dpkg-reconfigure keyboard-configuration

(An dieser Stelle könnte jetzt noch die Serielle Schnittstelle konfiguriert werden, da der Artikel aber schon ziemlich lang ist und man über SSH zugreifen kann, lasse ich dies aus.)

Jetzt braucht das System natürlich noch einen Kernel. Vorhande Kernel auflisten:

# apt-cache search linux-image
linux-image-3.16.0-4-586 - Linux 3.16 for older PCs
linux-image-3.16.0-4-686-pae - Linux 3.16 for modern PCs
linux-image-3.16.0-4-686-pae-dbg - Debugging symbols for Linux 3.16.0-4-686-pae
linux-image-3.16.0-4-amd64 - Linux 3.16 for 64-bit PCs
linux-image-486 - Linux for older PCs (dummy package)
linux-image-586 - Linux for older PCs (meta-package)
linux-image-686-pae - Linux for modern PCs (meta-package)
linux-image-686-pae-dbg - Debugging symbols for Linux 686-pae configuration (meta-package)
linux-image-amd64 - Linux for 64-bit PCs (meta-package)

Die Meta-Pakete zeigen immer auf den jeweils aktuellsten Kernel, deshalb empfielt es sich, sich für einen von diesen zu entscheiden. Für die alte Alix ist linux-image-586 das Richtige:

# apt-get install linux-image-586

Ohne Bootloader geht garnichts, auch dieser muss installiert und auf die CF-Karte (immernoch /dev/sdc) installiert werden:

# apt-get install grub-pc
# grub-install /dev/sdc
# update-grub

Damit per SSH zugegriffen werden kann, braucht es auch noch einen SSH-Server, das Meta-Paket ssh installiert Server und Client.

# apt-get install ssh

root-Passwort setzen:

# passwd

User anlegen (für den SSH-Login):

# adduser user

Aufräumen:

# apt-get clean

Chroot verlassen und die CF-Karte unmounten:

# exit
# cd
# umount /mnt/cfcard/dev
# umount /mnt/cfcard/sys
# umount /mnt/cfcard/proc
# umount /mnt/cfcard

Nun kann die CF-Karte in das System (z.B. die Alix) eingesetzt, das System mit dem Netzwerk verbunden und gebootet werden.

Sollte man wie oben DHCP konfiguriert haben, findet man das System relativ leicht mit nmap, das Netz muss natürlich auf das Eigene angepasst werden:

# nmap -sP 172.20.1.00/24
Nmap scan report for 172.20.1.188
Host is up (-0.10s latency).
MAC Address: 00:0D:B9:15:E6:C9 (PC Engines GmbH)

(Alternativ schaut man im Log des DHCP-Servers ;) )

Nun kann mit dem zuvor angelegten User auf das frische System eingelogt werden:

$ ssh user@172.20.1.188

 



Tagged: Alix Debian Grub Hardware Linux

Kommentar verfassen | Nach oben

Korruptes Debian-Paket

Erstellt: 22.12.2015 08:26

Wurde ein Debianpaket nicht sauber heruntergeladen, kann es beschädigt sein. Da es jedoch im Cache ist, wird es bei jedem Versuch Pakete zu installieren wieder erfolglos von Neuem verarbeitet.

Vorbereitung zum Entpacken von .../zenity-common_3.18.1.1-1_all.deb ...
Entpacken von zenity-common (3.18.1.1-1) ...
dpkg-deb (Unterprozess): Archiv-Element wird dekomprimiert: lzma-Fehler: komprimierte Daten sind beschädigt
dpkg: Fehler beim Bearbeiten des Archives /var/cache/apt/archives/zenity-common_3.18.1.1-1_all.deb (--unpack): defektes Tar-Dateisystem - Paketarchiv ist defekt
dpkg-deb: Fehler: Unterprozess <Dekompression> gab den Fehlerwert 2 zurück

Ein simples Leeren des Caches hilft:

# apt-get clean



Tagged: Debian Linux

Kommentar verfassen | Nach oben

In Debian prüfen ob eine Datei zum Paket gehört

Erstellt: 23.11.2015 21:03

Ist eine installierte Datei aus dem Debian-Repository verdächtig, vielleicht weil der Hash nichtmehr stimmt oder aus anderen Gründen, kann überprüft werden ob sie überhaupt zu einem Paket gehört und wenn ja, ob ihr Hash-Wert korrekt ist.Benötigt werden hierfür die Pakete apt-file und debsums.

Zuerst wird die DB geupdated von apt-file.

# apt-file update

Danach kann herausgefunden werden zu welchem Paket das File, in diesem Beispiel der Befehl less, gehört. Gibt es keine genaue Übereinstimmung, gehört die Datei zu keinem Paket.

# apt-file search /usr/bin/less
less: /usr/bin/less

Wenn man nun weiss, dass das Paket "less" heisst, können die Checksummen des Pakets geprüft werden.

# debsums less
/bin/less                                                                     OK
/bin/lessecho                                                                 OK
/bin/lesskey                                                                  OK
/bin/lesspipe                                                                 OK
/usr/lib/mime/packages/less                                                   OK
/usr/share/doc/less/LESSOPEN                                                  OK
/usr/share/doc/less/README.Debian                                             OK
/usr/share/doc/less/changelog.Debian.gz                                       OK
/usr/share/doc/less/changelog.gz                                              OK
/usr/share/doc/less/copyright                                                 OK
/usr/share/man/man1/less.1.gz                                                 OK
/usr/share/man/man1/lessecho.1.gz                                             OK
/usr/share/man/man1/lesskey.1.gz                                              OK
/usr/share/man/man1/lesspipe.1.gz                                             OK

Steht beim gesuchten File (/bin/less) und beim Rest "OK", sind die Files in ordnung.



Tagged: Debian

Kommentar verfassen | Nach oben

« ältere Einträge