CPAN: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „Das CPAN, Comprehensive Perl Archive Network, ist ein weltweit verteiltes Netzwerk für Perl-Module, das seit 1995 besteht und aktuell etwa 200 000 Module umfa…“) |
(RPM-Sektion eingefügt) |
||
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
= CPAN = | |||
Das CPAN, Comprehensive Perl Archive Network, ist ein weltweit verteiltes Netzwerk für Perl-Module, das seit 1995 besteht und aktuell etwa 200 000 Module umfasst. | Das CPAN, Comprehensive Perl Archive Network, ist ein weltweit verteiltes Netzwerk für Perl-Module, das seit 1995 besteht und aktuell etwa 200 000 Module umfasst. | ||
Siehe auch hier eine [https://www.cpan.org/modules/INSTALL.html Zusammenfassung des CPAN-Projektes]. | Siehe auch hier eine [https://www.cpan.org/modules/INSTALL.html Zusammenfassung des CPAN-Projektes]. | ||
==Clients== | |||
===Plattformunabhängig=== | == Clients == | ||
=== Plattformunabhängig === | |||
Das CPAN bietet drei plattformunabhängige Clients an, von denen zwei hier beschrieben werden. Die ''Empfehlung'' ist, <code>cpanm</code> zu nutzen. | Das CPAN bietet drei plattformunabhängige Clients an, von denen zwei hier beschrieben werden. Die ''Empfehlung'' ist, <code>cpanm</code> zu nutzen. | ||
====cpanminus==== | |||
==== cpanminus ==== | |||
[https://metacpan.org/pod/distribution/App-cpanminus/bin/cpanm cpanminus] (<code>cpanm</code>) ist der bevorzugte Weg, wie CPAN-Pakete installiert werden sollten. cpan-minus ist, wie <code>cpan</code> ein CPAN-Paket, das aber auch für viele Betriebssystem als fertiges Paket portiert wurde. | [https://metacpan.org/pod/distribution/App-cpanminus/bin/cpanm cpanminus] (<code>cpanm</code>) ist der bevorzugte Weg, wie CPAN-Pakete installiert werden sollten. cpan-minus ist, wie <code>cpan</code> ein CPAN-Paket, das aber auch für viele Betriebssystem als fertiges Paket portiert wurde. | ||
cpan-minus bietet einen [http://cpanmin.us/ Quickstart] an, der auf jedem System läuft, auf dem Perl installiert ist. Dazu muss folgender Befehl auf der Kommandozeile ausgeführt werden:<pre>curl -L https://cpanmin.us | perl - App::cpanminus</pre>Aus Sicherheitsgründen sollte vor Ausführung des Befehls überprüft werden, was unter [http://cpanmin.us/ cpanmin.us] zu finden ist, da ggf. Schadcode unbemerkt eingeschmuggelt werden könnte. | cpan-minus bietet einen [http://cpanmin.us/ Quickstart] an, der auf jedem System läuft, auf dem Perl installiert ist. Dazu muss folgender Befehl auf der Kommandozeile ausgeführt werden: | ||
<pre>curl -L https://cpanmin.us | perl - App::cpanminus</pre> | |||
Aus Sicherheitsgründen sollte vor Ausführung des Befehls überprüft werden, was unter [http://cpanmin.us/ cpanmin.us] zu finden ist, da ggf. Schadcode unbemerkt eingeschmuggelt werden könnte. | |||
Ist der Client <code>cpanm</code> installiert, kann mit | |||
<pre>cpanm Paket::Name</pre> | |||
ein Paket (in diesem Falle das nicht-existende Paket <code>Paket::Name</code>) installiert werden. Die Option <code>--sudo</code> sorgt dafür, dass cpanminus die Installation als Superuser versucht (ggf. muss ein Passwort eingegeben werden). | |||
==== Exkurs: cpan-outdated ==== | |||
Das Paket [https://metacpan.org/pod/distribution/cpan-outdated/script/cpan-outdated <code>cpan-outdated</code>] erzeugt eine cpanminus-kompatible Liste an CPAN-Paketen, die aktualisiert werden können, z.B. | |||
Das Paket [https://metacpan.org/pod/distribution/cpan-outdated/script/cpan-outdated <code>cpan-outdated</code>] erzeugt eine cpanminus-kompatible Liste an CPAN-Paketen, die aktualisiert werden können, z.B.<pre>$ cpan-outdated | <pre>$ cpan-outdated | ||
A/AN/ANDK/CPAN-2.27.tar.gz | A/AN/ANDK/CPAN-2.27.tar.gz | ||
L/LE/LEONT/Test-Harness-3.42.tar.gz | L/LE/LEONT/Test-Harness-3.42.tar.gz | ||
Zeile 34: | Zeile 51: | ||
A/AT/ATOOMIC/Devel-PPPort-3.58.tar.gz | A/AT/ATOOMIC/Devel-PPPort-3.58.tar.gz | ||
M/MS/MSHELOR/Digest-SHA-6.02.tar.gz | M/MS/MSHELOR/Digest-SHA-6.02.tar.gz | ||
R/RJ/RJBS/Email-Sender-1.300034.tar.gz</pre>Sehr nützlich ist die Kombination aus cpanminus und cpan-outdated: | R/RJ/RJBS/Email-Sender-1.300034.tar.gz</pre> | ||
Sehr nützlich ist die Kombination aus cpanminus und cpan-outdated: | |||
Ein Modul lässt sich am einfachsten mit<pre>cpan install PAKET::NAME</pre>installieren (hier das nicht-existente Paket <code>PAKET::NAME</code>). <code>cpan</code> eignet sich weniger gut um Module zu installieren oder zu aktualisieren, aber sehr gut um nach Paketen zu suchen:<pre>i /JSON/</pre>findet jedes Paket, das die Zeichenkette <code>JSON</code> im Bereich Autor, Bundle, Distribution oder Modul enthält. Das sind meist viele Ergebnisse, aber liefert einen Überblick "was geht". | <pre>cpan-outdated | cpanm --sudo</pre> | ||
Diese Befehlssequenz aktualisiert alle aktualisierbaren CPAN-Pakete mit Hilfe von cpanminus (als Superuser). | |||
==== cpan ==== | |||
[https://metacpan.org/pod/CPAN <code>cpan</code>] ist der mit jeder Perl-Installation mitgelieferte Client für das CPAN und lässt sich entweder mit | |||
<pre>perl -MCPAN -e shell</pre> | |||
oder | |||
<pre>cpan</pre> | |||
starten. Es wird ein interaktiver Client gestartet; mit <code>h</code> kann eine sehr umfangreiche Hilfe aufgerufen werden. | |||
Ein Modul lässt sich am einfachsten mit | |||
<pre>cpan install PAKET::NAME</pre> | |||
installieren (hier das nicht-existente Paket <code>PAKET::NAME</code>). <code>cpan</code> eignet sich weniger gut um Module zu installieren oder zu aktualisieren, aber sehr gut um nach Paketen zu suchen: | |||
<pre>i /JSON/</pre> | |||
findet jedes Paket, das die Zeichenkette <code>JSON</code> im Bereich Autor, Bundle, Distribution oder Modul enthält. Das sind meist viele Ergebnisse, aber liefert einen Überblick "was geht". | |||
Erfahrungsgemäß ist <code>cpan</code> recht störrisch in der Handhabung. Deshalb empfehle ich die Nutzung von cpanminus. | Erfahrungsgemäß ist <code>cpan</code> recht störrisch in der Handhabung. Deshalb empfehle ich die Nutzung von cpanminus. | ||
===OS-Paketmanager=== | |||
====Debian und Derivate (Ubuntu, Raspbian, etc.)==== | === OS-Paketmanager === | ||
Vom Debian-Projekt werden viele, aber lange nicht alle, Pakete des CPAN auch als Pakete für den eingebauten Paketmanager <code>apt</code> [https://packages.debian.org/stable/perl/ bereitsgestellt]. Dort sind momentan etwa 4 000 Pakete verfügbar, d.h. rund 2% der im CPAN verfügbaren Pakete. Es ist nicht immer trivial, ein Paket zu finden. Ein einfacher Fall ist z.B. das Paket <code>Readonly</code>, | |||
==== Debian und Derivate (Ubuntu, Raspbian, etc.) ==== | |||
Vom Debian-Projekt werden viele, aber lange nicht alle, Pakete des CPAN auch als Pakete für den eingebauten Paketmanager <code>apt</code> [https://packages.debian.org/stable/perl/ bereitsgestellt]. Dort sind momentan etwa 4 000 Pakete verfügbar, d.h. rund 2% der im CPAN verfügbaren Pakete. Es ist nicht immer trivial, ein Paket zu finden. Ein einfacher Fall ist z.B. das Paket <code>Readonly</code>, das über <code>cpanm Readonly</code> oder <code>apt-get install libreadonly-perl</code> installiert werden könnte. Im Allgemeinen kann man sagen, dass sich der Name des <code>apt</code>-Paketes aus dem Prefix <code>lib</code>, gefolgt vom Paketnamen in Kleinbuchstaben, bei dem die <code>::</code> durch <code>-</code> ersetzt wurden, und dem Suffix <code>-perl</code> zusammensetzt: | |||
{| | {| | ||
!CPAN | ! CPAN | ||
!Debian-Paket | ! Debian-Paket | ||
|- | |- | ||
|Rose::URI | | Rose::URI | ||
|librose-uri-perl | | librose-uri-perl | ||
|- | |- | ||
|Sah::Schemas::Rinci | | Sah::Schemas::Rinci | ||
|libsah-schemas-rinci-perl | | libsah-schemas-rinci-perl | ||
|}Kein Beispiel wäre vollständig ohne Ausnahme, z.B.: | |} | ||
Kein Beispiel wäre vollständig ohne Ausnahme, z.B.: | |||
[https://metacpan.org/pod/distribution/Lingua-Romana-Perligata/lib/Lingua/Romana/Perligata.pm <code>libromana-perligata-perl</code>] installiert das Perl-Paket [https://metacpan.org/pod/distribution/Lingua-Romana-Perligata/lib/Lingua/Romana/Perligata.pm <code>Lingua::Romana::Perligata</code>], müsste nach der selbstgewählten Konvention aber <code>liblingua-romana-perligata-perl</code> heißen. | [https://metacpan.org/pod/distribution/Lingua-Romana-Perligata/lib/Lingua/Romana/Perligata.pm <code>libromana-perligata-perl</code>] installiert das Perl-Paket [https://metacpan.org/pod/distribution/Lingua-Romana-Perligata/lib/Lingua/Romana/Perligata.pm <code>Lingua::Romana::Perligata</code>], müsste nach der selbstgewählten Konvention aber <code>liblingua-romana-perligata-perl</code> heißen. | ||
Zeile 59: | Zeile 100: | ||
Vorteilhaft ist, dass man die Pakete zusammen mit anderen Debian-Paketen automatisch auf dem aktuellen Stand halten kann, z.B. [https://wiki.debian.org/UnattendedUpgrades <code>unattended-upgrades</code>] - man spart so eine doppelte Implementierung der Updates. | Vorteilhaft ist, dass man die Pakete zusammen mit anderen Debian-Paketen automatisch auf dem aktuellen Stand halten kann, z.B. [https://wiki.debian.org/UnattendedUpgrades <code>unattended-upgrades</code>] - man spart so eine doppelte Implementierung der Updates. | ||
Wiederum von Nachteil ist, dass man mit einer auf ein Release festgelegten Quelle irgendwann auch keine Updates der Perl-Pakete mehr | Wiederum von Nachteil ist, dass man mit einer auf ein Release festgelegten Quelle irgendwann auch keine Updates der Perl-Pakete mehr erhält. | ||
====SuSE Linux==== | |||
==== SuSE Linux ==== | |||
YaST bietet aktuell etwa 3 121 der rund 200 000 Pakete in [https://build.opensuse.org/project/show/devel:languages:perl <code>devel:languages:perl</code>] an, dazu kommen noch einige Community-Pakete mit einer trivial nicht feststellbaren Anzahl an Paketen. Im Paket [https://build.opensuse.org/package/show/devel:languages:perl:CPAN-A/perl-App-cpanminus <code>perl-App-cpanminus</code>] ist <code>cpanm</code> enthalten. | YaST bietet aktuell etwa 3 121 der rund 200 000 Pakete in [https://build.opensuse.org/project/show/devel:languages:perl <code>devel:languages:perl</code>] an, dazu kommen noch einige Community-Pakete mit einer trivial nicht feststellbaren Anzahl an Paketen. Im Paket [https://build.opensuse.org/package/show/devel:languages:perl:CPAN-A/perl-App-cpanminus <code>perl-App-cpanminus</code>] ist <code>cpanm</code> enthalten. | ||
====RedHat Linux==== | |||
====MacOS==== | ==== RedHat Linux ==== | ||
Der RPM bietet eine nicht trivial feststellbare Anzahl an Perl-Paketen an, die Gesamtsumme beträgt um die 8000 - inkl. verschiedener Plattformen (i386, etc.). Auch hier lässt sich festhalten, dass die out of the shelf installierbaren Pakete auf einen Bruchteil der im CPAN verfügbaren reduziert. | |||
==== MacOS ==== | |||
Für MacOS gilt, dass das installierte Perl den <code>cpan</code>-Client und eine Auswahl an Module mitbringt. <code>cpanm</code> lässt sich installieren und sollte auch der Weg der Wahl sein. Es ist außerdem möglich, Pakete über [https://www.macports.org/ MacPorts] zu installieren. MacPorts bietet noch weniger Pakete (aktuell 1 797 für Perl 5.26, 1 799 für Perl 5.28) als Debian. | Für MacOS gilt, dass das installierte Perl den <code>cpan</code>-Client und eine Auswahl an Module mitbringt. <code>cpanm</code> lässt sich installieren und sollte auch der Weg der Wahl sein. Es ist außerdem möglich, Pakete über [https://www.macports.org/ MacPorts] zu installieren. MacPorts bietet noch weniger Pakete (aktuell 1 797 für Perl 5.26, 1 799 für Perl 5.28) als Debian. | ||
====Windows==== | |||
==== Windows ==== | |||
[https://www.activestate.com/products/perl/downloads/ ActiveState] bietet eine Perl-Distribution an, die bereits mit einigen Module, 214 bei [https://platform.activestate.com/ActiveState/ActivePerl-5.28 Perl 5.28], ausgeliefert wird. | [https://www.activestate.com/products/perl/downloads/ ActiveState] bietet eine Perl-Distribution an, die bereits mit einigen Module, 214 bei [https://platform.activestate.com/ActiveState/ActivePerl-5.28 Perl 5.28], ausgeliefert wird. | ||
==Empfohlene Pakete== | |||
== Empfohlene Pakete == | |||
Im FHEM-Umfeld werden aktuell rund 120 CPAN-Pakete (mit Sub-Paketen) eingesetzt die keine [https://www.perl.com/article/what-is-the-perl-core-/ Core-Module] sind und ggf. für ein FHEM-Modul [[Meta|nachinstalliert]] werden müssen: | Im FHEM-Umfeld werden aktuell rund 120 CPAN-Pakete (mit Sub-Paketen) eingesetzt die keine [https://www.perl.com/article/what-is-the-perl-core-/ Core-Module] sind und ggf. für ein FHEM-Modul [[Meta|nachinstalliert]] werden müssen: | ||
*Authen::OATH | |||
*AutoLoader | * Authen::OATH | ||
*B | * AutoLoader | ||
*Carp | * B | ||
*Color | * Carp | ||
*Compress::Zlib | * Color | ||
*Convert::Base32 | * Compress::Zlib | ||
*Cpanel::JSON::XS | * Convert::Base32 | ||
*Crypt::Argon2 | * Cpanel::JSON::XS | ||
*Crypt::CBC | * Crypt::Argon2 | ||
*Crypt::Cipher::AES | * Crypt::CBC | ||
*Crypt::ECB | * Crypt::Cipher::AES | ||
*Crypt::Mode::CBC | * Crypt::ECB | ||
*Crypt::MySQL | * Crypt::Mode::CBC | ||
*Crypt::NaCl::Sodium | * Crypt::MySQL | ||
*Crypt::Rijndael | * Crypt::NaCl::Sodium | ||
*Crypt::Rijndael_PP | * Crypt::Rijndael | ||
*Crypt::URandom | * Crypt::Rijndael_PP | ||
*DBI | * Crypt::URandom | ||
*DBI::Const::GetInfoType | * DBI | ||
*Data::Dumper | * DBI::Const::GetInfoType | ||
*Data::UUID | * Data::Dumper | ||
*Date::Parse | * Data::UUID | ||
*DateTime | * Date::Parse | ||
*Device::Firmata | * DateTime | ||
*Device::Firmata::Base | * Device::Firmata | ||
*Device::Firmata::Constants | * Device::Firmata::Base | ||
*Device::Firmata::Error | * Device::Firmata::Constants | ||
*Device::Firmata::Language | * Device::Firmata::Error | ||
*Device::Firmata::Platform | * Device::Firmata::Language | ||
*Device::Firmata::Protocol | * Device::Firmata::Platform | ||
*Device::SerialPort | * Device::Firmata::Protocol | ||
*Device::USB | * Device::SerialPort | ||
*Digest::CRC | * Device::USB | ||
*Digest::SHA1 | * Digest::CRC | ||
*Encode::Detect::Detector | * Digest::SHA1 | ||
*Expect | * Encode::Detect::Detector | ||
*File::HomeDir | * Expect | ||
*HTML::Entities | * File::HomeDir | ||
*HTML::Parser | * HTML::Entities | ||
*HTTP::Cookies | * HTML::Parser | ||
*HTTP::Daemon | * HTTP::Cookies | ||
*HTTP::Headers | * HTTP::Daemon | ||
*HTTP::Request | * HTTP::Headers | ||
*HTTP::Request::Common | * HTTP::Request | ||
*IO::Interface::Simple | * HTTP::Request::Common | ||
*IO::Socket::Multicast | * IO::Interface::Simple | ||
*IO::Socket::Multicast6 | * IO::Socket::Multicast | ||
*IO::Socket::SSL | * IO::Socket::Multicast6 | ||
*IO::Socket::Timeout | * IO::Socket::SSL | ||
*IO::String | * IO::Socket::Timeout | ||
*Image::ExifTool | * IO::String | ||
*Image::LibRSVG | * Image::ExifTool | ||
*Image::Size | * Image::LibRSVG | ||
*Inline | * Image::Size | ||
*JSON | * Inline | ||
*JSON::MaybeXS | * JSON | ||
*JSON::XS | * JSON::MaybeXS | ||
*JSON::backportPP | * JSON::XS | ||
*JsonMod::JSON::Path::Node | * JSON::backportPP | ||
*LWP | * JsonMod::JSON::Path::Node | ||
*LWP::Simple | * LWP | ||
*LWP::UserAgent~6 | * LWP::Simple | ||
*Linux::Inotify2 | * LWP::UserAgent~6 | ||
*LiquidCrystal | * Linux::Inotify2 | ||
*Lirc::Client | * LiquidCrystal | ||
*List::MoreUtils | * Lirc::Client | ||
*MIME::Lite | * List::MoreUtils | ||
*MP3::Info | * MIME::Lite | ||
*MP3::Tag | * MP3::Info | ||
*MP3::Tag::CDDB_File | * MP3::Tag | ||
*MP3::Tag::Cue | * MP3::Tag::CDDB_File | ||
*MP3::Tag::File | * MP3::Tag::Cue | ||
*MP3::Tag::ID3v1 | * MP3::Tag::File | ||
*MP3::Tag::ID3v2 | * MP3::Tag::ID3v1 | ||
*MP3::Tag::ImageExifTool | * MP3::Tag::ID3v2 | ||
*MP3::Tag::ImageSize | * MP3::Tag::ImageExifTool | ||
*MP3::Tag::Inf | * MP3::Tag::ImageSize | ||
*MP3::Tag::LastResort | * MP3::Tag::Inf | ||
*MP3::Tag::ParseData | * MP3::Tag::LastResort | ||
*Mail::IMAPClient | * MP3::Tag::ParseData | ||
*Mojolicious~5.54 | * Mail::IMAPClient | ||
*Net::Address::IP::Local | * Mojolicious~5.54 | ||
*Net::Bonjour | * Net::Address::IP::Local | ||
*Net::FTPSSL | * Net::Bonjour | ||
*Net::Jabber | * Net::FTPSSL | ||
*Net::MQTT::Constants | * Net::Jabber | ||
*Net::MQTT::Message | * Net::MQTT::Constants | ||
*Net::MQTT::Message::JustMessageId | * Net::MQTT::Message | ||
*Net::Rendezvous | * Net::MQTT::Message::JustMessageId | ||
*Net::SIP | * Net::Rendezvous | ||
*Net::SIP::Packet | * Net::SIP | ||
*Net::SMTP::SSL | * Net::SIP::Packet | ||
*Net::Telnet | * Net::SMTP::SSL | ||
*Net::UPnP::AV::MediaRenderer | * Net::Telnet | ||
*Net::UPnP::AV::MediaServer | * Net::UPnP::AV::MediaRenderer | ||
*Net::UPnP::ControlPoint | * Net::UPnP::AV::MediaServer | ||
*Net::UPnP::Device | * Net::UPnP::ControlPoint | ||
*Net::UPnP::Service | * Net::UPnP::Device | ||
*Net::XMPP::Namespaces | * Net::UPnP::Service | ||
*Nmap::Parser | * Net::XMPP::Namespaces | ||
*Path::Tiny | * Nmap::Parser | ||
*Paws::Polly | * Path::Tiny | ||
*Perl::PrereqScanner::NotQuiteLite | * Paws::Polly | ||
*RPC::XML::Client | * Perl::PrereqScanner::NotQuiteLite | ||
*RPC::XML::Server | * RPC::XML::Client | ||
*RiveScript | * RPC::XML::Server | ||
*SOAP::Lite | * RiveScript | ||
*Text::Iconv | * SOAP::Lite | ||
*Try::Tiny | * Text::Iconv | ||
*UPnP::Common | * Try::Tiny | ||
*UPnP::ControlPoint | * UPnP::Common | ||
*URI::Escape | * UPnP::ControlPoint | ||
*WWW::Jawbone::Up | * URI::Escape | ||
*Win32::SerialPort | * WWW::Jawbone::Up | ||
*XML::LibXML | * Win32::SerialPort | ||
*XML::Parser::Lite | * XML::LibXML | ||
[https://raw.githubusercontent.com/fhem/doc-wiki/master/DE/Howtos/fhem-cpan-modules.txt Liste als plain text], z.B. um sie | * XML::Parser::Lite | ||
[https://raw.githubusercontent.com/fhem/doc-wiki/master/DE/Howtos/fhem-cpan-modules.txt Liste als plain text], z.B. um sie bei einer automatisierten Installation verwenden zu können. Die Liste wurde mit <code>Perl::PrereqScanner</code> aus dem <code>FHEM/</code>-Verzeichnis erstellt, durch <code>Core::List</code> gefiltert und mit <code>cpanm</code> auf Nicht-CPAN-Module (z.B. <code>FHEM::Meta</code> oder <code>DevIO</code>) geprüft. | |||
[[Kategorie:HOWTOS]] | |||
[[Kategorie:Systemadministration]] | |||
[[Kategorie:Perl]] |
Aktuelle Version vom 16. November 2020, 10:19 Uhr
CPAN
Das CPAN, Comprehensive Perl Archive Network, ist ein weltweit verteiltes Netzwerk für Perl-Module, das seit 1995 besteht und aktuell etwa 200 000 Module umfasst.
Siehe auch hier eine Zusammenfassung des CPAN-Projektes.
Clients
Plattformunabhängig
Das CPAN bietet drei plattformunabhängige Clients an, von denen zwei hier beschrieben werden. Die Empfehlung ist, cpanm
zu nutzen.
cpanminus
cpanminus (cpanm
) ist der bevorzugte Weg, wie CPAN-Pakete installiert werden sollten. cpan-minus ist, wie cpan
ein CPAN-Paket, das aber auch für viele Betriebssystem als fertiges Paket portiert wurde.
cpan-minus bietet einen Quickstart an, der auf jedem System läuft, auf dem Perl installiert ist. Dazu muss folgender Befehl auf der Kommandozeile ausgeführt werden:
curl -L https://cpanmin.us | perl - App::cpanminus
Aus Sicherheitsgründen sollte vor Ausführung des Befehls überprüft werden, was unter cpanmin.us zu finden ist, da ggf. Schadcode unbemerkt eingeschmuggelt werden könnte.
Ist der Client cpanm
installiert, kann mit
cpanm Paket::Name
ein Paket (in diesem Falle das nicht-existende Paket Paket::Name
) installiert werden. Die Option --sudo
sorgt dafür, dass cpanminus die Installation als Superuser versucht (ggf. muss ein Passwort eingegeben werden).
Exkurs: cpan-outdated
Das Paket cpan-outdated
erzeugt eine cpanminus-kompatible Liste an CPAN-Paketen, die aktualisiert werden können, z.B.
$ cpan-outdated A/AN/ANDK/CPAN-2.27.tar.gz L/LE/LEONT/Test-Harness-3.42.tar.gz B/BI/BINGOS/Archive-Tar-2.36.tar.gz T/TO/TODDR/autodie-2.32.tar.gz R/RU/RURBAN/B-Debug-1.26.tar.gz I/IL/ILMARI/bareword-filehandles-0.007.tar.gz P/PJ/PJACKLAM/bignum-0.51.tar.gz X/XS/XSAWYERX/Carp-1.50.tar.gz L/LE/LEEJO/CGI-4.47.tar.gz A/AT/ATOOMIC/Clone-0.45.tar.gz M/ML/MLEHMANN/common-sense-3.75.tar.gz P/PM/PMQS/Compress-Raw-Bzip2-2.093.tar.gz P/PM/PMQS/Compress-Raw-Zlib-2.093.tar.gz P/PM/PMQS/IO-Compress-2.093.tar.gz H/HM/HMBRAND/Config-Perl-V-0.31.tgz A/AT/ATOOMIC/TimeDate-2.33.tar.gz P/PM/PMQS/DB_File-1.853.tar.gz H/HU/HURRICUP/Devel-Camelcadedb-v2019.1.tar.gz P/PJ/PJCJ/Devel-Cover-1.36.tar.gz A/AT/ATOOMIC/Devel-PPPort-3.58.tar.gz M/MS/MSHELOR/Digest-SHA-6.02.tar.gz R/RJ/RJBS/Email-Sender-1.300034.tar.gz
Sehr nützlich ist die Kombination aus cpanminus und cpan-outdated:
cpan-outdated | cpanm --sudo
Diese Befehlssequenz aktualisiert alle aktualisierbaren CPAN-Pakete mit Hilfe von cpanminus (als Superuser).
cpan
cpan
ist der mit jeder Perl-Installation mitgelieferte Client für das CPAN und lässt sich entweder mit
perl -MCPAN -e shell
oder
cpan
starten. Es wird ein interaktiver Client gestartet; mit h
kann eine sehr umfangreiche Hilfe aufgerufen werden.
Ein Modul lässt sich am einfachsten mit
cpan install PAKET::NAME
installieren (hier das nicht-existente Paket PAKET::NAME
). cpan
eignet sich weniger gut um Module zu installieren oder zu aktualisieren, aber sehr gut um nach Paketen zu suchen:
i /JSON/
findet jedes Paket, das die Zeichenkette JSON
im Bereich Autor, Bundle, Distribution oder Modul enthält. Das sind meist viele Ergebnisse, aber liefert einen Überblick "was geht".
Erfahrungsgemäß ist cpan
recht störrisch in der Handhabung. Deshalb empfehle ich die Nutzung von cpanminus.
OS-Paketmanager
Debian und Derivate (Ubuntu, Raspbian, etc.)
Vom Debian-Projekt werden viele, aber lange nicht alle, Pakete des CPAN auch als Pakete für den eingebauten Paketmanager apt
bereitsgestellt. Dort sind momentan etwa 4 000 Pakete verfügbar, d.h. rund 2% der im CPAN verfügbaren Pakete. Es ist nicht immer trivial, ein Paket zu finden. Ein einfacher Fall ist z.B. das Paket Readonly
, das über cpanm Readonly
oder apt-get install libreadonly-perl
installiert werden könnte. Im Allgemeinen kann man sagen, dass sich der Name des apt
-Paketes aus dem Prefix lib
, gefolgt vom Paketnamen in Kleinbuchstaben, bei dem die ::
durch -
ersetzt wurden, und dem Suffix -perl
zusammensetzt:
CPAN | Debian-Paket |
---|---|
Rose::URI | librose-uri-perl |
Sah::Schemas::Rinci | libsah-schemas-rinci-perl |
Kein Beispiel wäre vollständig ohne Ausnahme, z.B.:
libromana-perligata-perl
installiert das Perl-Paket Lingua::Romana::Perligata
, müsste nach der selbstgewählten Konvention aber liblingua-romana-perligata-perl
heißen.
Vorteilhaft ist, dass man die Pakete zusammen mit anderen Debian-Paketen automatisch auf dem aktuellen Stand halten kann, z.B. unattended-upgrades
- man spart so eine doppelte Implementierung der Updates.
Wiederum von Nachteil ist, dass man mit einer auf ein Release festgelegten Quelle irgendwann auch keine Updates der Perl-Pakete mehr erhält.
SuSE Linux
YaST bietet aktuell etwa 3 121 der rund 200 000 Pakete in devel:languages:perl
an, dazu kommen noch einige Community-Pakete mit einer trivial nicht feststellbaren Anzahl an Paketen. Im Paket perl-App-cpanminus
ist cpanm
enthalten.
RedHat Linux
Der RPM bietet eine nicht trivial feststellbare Anzahl an Perl-Paketen an, die Gesamtsumme beträgt um die 8000 - inkl. verschiedener Plattformen (i386, etc.). Auch hier lässt sich festhalten, dass die out of the shelf installierbaren Pakete auf einen Bruchteil der im CPAN verfügbaren reduziert.
MacOS
Für MacOS gilt, dass das installierte Perl den cpan
-Client und eine Auswahl an Module mitbringt. cpanm
lässt sich installieren und sollte auch der Weg der Wahl sein. Es ist außerdem möglich, Pakete über MacPorts zu installieren. MacPorts bietet noch weniger Pakete (aktuell 1 797 für Perl 5.26, 1 799 für Perl 5.28) als Debian.
Windows
ActiveState bietet eine Perl-Distribution an, die bereits mit einigen Module, 214 bei Perl 5.28, ausgeliefert wird.
Empfohlene Pakete
Im FHEM-Umfeld werden aktuell rund 120 CPAN-Pakete (mit Sub-Paketen) eingesetzt die keine Core-Module sind und ggf. für ein FHEM-Modul nachinstalliert werden müssen:
- Authen::OATH
- AutoLoader
- B
- Carp
- Color
- Compress::Zlib
- Convert::Base32
- Cpanel::JSON::XS
- Crypt::Argon2
- Crypt::CBC
- Crypt::Cipher::AES
- Crypt::ECB
- Crypt::Mode::CBC
- Crypt::MySQL
- Crypt::NaCl::Sodium
- Crypt::Rijndael
- Crypt::Rijndael_PP
- Crypt::URandom
- DBI
- DBI::Const::GetInfoType
- Data::Dumper
- Data::UUID
- Date::Parse
- DateTime
- Device::Firmata
- Device::Firmata::Base
- Device::Firmata::Constants
- Device::Firmata::Error
- Device::Firmata::Language
- Device::Firmata::Platform
- Device::Firmata::Protocol
- Device::SerialPort
- Device::USB
- Digest::CRC
- Digest::SHA1
- Encode::Detect::Detector
- Expect
- File::HomeDir
- HTML::Entities
- HTML::Parser
- HTTP::Cookies
- HTTP::Daemon
- HTTP::Headers
- HTTP::Request
- HTTP::Request::Common
- IO::Interface::Simple
- IO::Socket::Multicast
- IO::Socket::Multicast6
- IO::Socket::SSL
- IO::Socket::Timeout
- IO::String
- Image::ExifTool
- Image::LibRSVG
- Image::Size
- Inline
- JSON
- JSON::MaybeXS
- JSON::XS
- JSON::backportPP
- JsonMod::JSON::Path::Node
- LWP
- LWP::Simple
- LWP::UserAgent~6
- Linux::Inotify2
- LiquidCrystal
- Lirc::Client
- List::MoreUtils
- MIME::Lite
- MP3::Info
- MP3::Tag
- MP3::Tag::CDDB_File
- MP3::Tag::Cue
- MP3::Tag::File
- MP3::Tag::ID3v1
- MP3::Tag::ID3v2
- MP3::Tag::ImageExifTool
- MP3::Tag::ImageSize
- MP3::Tag::Inf
- MP3::Tag::LastResort
- MP3::Tag::ParseData
- Mail::IMAPClient
- Mojolicious~5.54
- Net::Address::IP::Local
- Net::Bonjour
- Net::FTPSSL
- Net::Jabber
- Net::MQTT::Constants
- Net::MQTT::Message
- Net::MQTT::Message::JustMessageId
- Net::Rendezvous
- Net::SIP
- Net::SIP::Packet
- Net::SMTP::SSL
- Net::Telnet
- Net::UPnP::AV::MediaRenderer
- Net::UPnP::AV::MediaServer
- Net::UPnP::ControlPoint
- Net::UPnP::Device
- Net::UPnP::Service
- Net::XMPP::Namespaces
- Nmap::Parser
- Path::Tiny
- Paws::Polly
- Perl::PrereqScanner::NotQuiteLite
- RPC::XML::Client
- RPC::XML::Server
- RiveScript
- SOAP::Lite
- Text::Iconv
- Try::Tiny
- UPnP::Common
- UPnP::ControlPoint
- URI::Escape
- WWW::Jawbone::Up
- Win32::SerialPort
- XML::LibXML
- XML::Parser::Lite
Liste als plain text, z.B. um sie bei einer automatisierten Installation verwenden zu können. Die Liste wurde mit Perl::PrereqScanner
aus dem FHEM/
-Verzeichnis erstellt, durch Core::List
gefiltert und mit cpanm
auf Nicht-CPAN-Module (z.B. FHEM::Meta
oder DevIO
) geprüft.