GitHub Package Registry für Maven Packages nutzen

Vor einigen Wochen hat GitHub die GitHub Package Registry vorgestellt. Mit dieser ist es möglich fertige Packages direkt beim Projekt auf GitHub zu hosten. Aktuell unterstützt werden, neben Maven-Packages, unter anderem die Paketsysteme von NPM, Ruby, und NuGet. GitHub selbst definiert den Zweck der Registry wie folgt:

GitHub Package Registry allows you to develop your code and host your packages in one place. You can use packages from GitHub Package Registry as a dependency in your source code on GitHub.

Nach einer Registrierung unter github.com/features/package-registry kann das erste Paket für die Package Registry erstellt werden. Dazu muss im entsprechenden Java-Projekt in der pom.xml folgender Block hinzugefügt werden:

<!-- Definition for uploading artifact to custom repository -->
<distributionManagement>
    <repository>
        <id>github</id>
        <name>GitHub OWNER Apache Maven Packages</name>
        <url>https://maven.pkg.github.com/OWNER/mediawikixml</url>
    </repository>
</distributionManagement>

Das Wort OWNER muss dabei durch den eigenen GitHub-Nutzernamen ausgetauscht werden. Anschließend müssen die Zugangsdaten für GitHub hinterlegt werden. Dazu wird die Maven settings.xml geöffnet:

nano ~/.m2/settings.xml

Zu der Einstellungsdatei wird nun folgender Block hinzugefügt:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <activeProfiles>
    <activeProfile>github</activeProfile>
  </activeProfiles>

  <profiles>
    <profile>
      <id>github</id>
      <repositories>
        <repository>
          <id>central</id>
          <url>https://repo1.maven.org/maven2</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </repository>
        <repository>
          <id>github</id>
          <name>GitHub OWNER Apache Maven Packages</name>
          <url>https://maven.pkg.github.com/OWNER</url>
        </repository>
      </repositories>
    </profile>
  </profiles>

  <servers>
    <server>
      <id>github</id>
      <username>USERNAME</username>
      <password>TOKEN</password>
    </server>
  </servers>
</settings>

Auch hier muss OWNER wieder durch den eigenen Nutzernamen ersetzt werden. Bei der Konfiguration müssen daneben die Felder USERNAME und TOKEN gefüllt werden. Das Token wird in den Einstellungen von GitHub unter Settings – Developer settings – Personal access tokens erzeugt.

Ein Personal Access Token muss für die Package Registry erzeugt werden

Nachdem das Token erzeugt wurde und die Konfiguration für Maven entsprechend hinterlegt wurde, kann das Package mittels:

mvn deploy

deployed werden und erscheint somit in der Package Registry. Angesehen werden kann das Paket nun mittels der URL:

https://github.com/OWNER/REPOSITORY/packages/

Zur Einbindung des neuen Paketes in einem anderes Projekt muss der pom.xml des anderen Projektes folgender Block hinzugefügt werden:

<!-- External non standard repositories -->
<repositories>
    <repository>
        <id>github</id>
        <url>https://maven.pkg.github.com/OWNER/REPOSITORY</url>
    </repository>
</repositories>

Anschließend kann das neue Paket ganz normal als Dependency hinzugefügt werden:

<dependency>
    <groupId>org.example</groupId>
    <artifactId>libtest</artifactId>
    <version>1.0.1</version>
</dependency>

Damit können schnell Pakete über die GitHub Package Registry bereitgestellt werden.

Homebrew deinstallieren #2

Vor ein paar Jahren schrieb ich einen Artikel, in welchem beschrieben wurde wie der macOS Paketmanager Homebrew wieder deinstalliert werden konnte. Mittlerweile gibt es eine einfachere Methode zur Deinstallation von Homebrew, welche hier ebenfalls beschrieben werden soll.

Das Projekt des Homebrew (un)installer auf GitHub

Hintergrund ist die Erweiterung des Homebrew-Installationsprogramms. Im Terminal unter macOS kann Homebrew über den Homebrew (un)installer mittels:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

deinstalliert werden. Dabei werde alle über Homebrew installierten Applikationen ebenfalls entfernt.

Webseiten aus der Wayback Machine herunterladen

Wenn man eine nicht mehr verfügbare Webseite aufrufen möchte oder einen älteren Stand einer Webseite benötigt ist die Wayback Machine vom Internet Archive stets zur Stelle. Das Internet Archive ist eine gemeinnützige Organisation, welche seit 2007 offiziell als Bibliothek vom US-amerikanischen Bundesstaat Kalifornien anerkannt ist.

archive.org/web/

Manchmal benötigt man einen Snapshot einer bestimmten Version der Webseite und möchte diesen nicht umständlich über das Webinterface der Wayback Machine herunterladen. In diesem Fall kann sich des Tools wayback-machine-downloader bedienen. Dieses Tool, welches in Ruby geschrieben ist, kann einfach über den Ruby-Paketmanager installiert werden:

gem install wayback_machine_downloader

Anschließend kann das Tool genutzt werden:

wayback_machine_downloader http://example.com

Damit wird der letzte gesammelte Snapshot heruntergeladen. Daneben existieren Option wie die –to Optionen um den Snapshot nur aus einem bestimmten Zeitraum zu holen. Da ich mehrere Snapshots einer Seite benötigte habe ich das ganze in ein Skript gegossen:

#sh

for i in `seq 127 1`;
  do
    # Define date postfix
    DATE_POSTFIX="28120000";
			
    # Linux (Linux date)
    #DATE=`date +%Y%m -d "$i month ago"`    
				
    # macOS (BSD date) 
    DATE=`date -j -v-${i}m +%Y%m` 
    
    # Add date postfix
    DATE=$DATE$DATE_POSTFIX
				
    # Create folder for snapshot
    mkdir $DATE
    cd $DATE

    # Download snapshot
    wayback_machine_downloader http://example.com --to $DATE

    # Leave folder
    cd ..
  done  

In diesem Skript wird durch das Skript 127 Monate in die Vergangenheit gereist und ein Snapshot der Webseite heruntergeladen. Das ganze läuft so lange durch bis das Ende der Schleife erreicht ist. So erhält man pro Monat einen Snapshot. Der Wayback Machine Downloader, dessen Quelltext auf GitHub zu finden ist, ist unter der MIT Lizenz lizenziert und damit freie Software.

Wayback Machine Downloader

Das Internet Archive betreibt mit der Wayback Machine ein Archiv des Web. In diesem Archiv kann man sich frühere Version einer Webseite ansehen. Problematisch wird es, wenn man einen Snapshot einer bestimmten Version einer Webseite benötigt. Bei größeren Webseiten ist der manuelle Download zeitaufwendig. Mit dem Wayback Machine Downloader – einem in Ruby geschriebenen Tool – ist es möglich einen solchen Snapshot automatisiert herunterzuladen. Dazu muss das Tool im ersten Schritt über das Terminal installiert werden:

gem install wayback_machine_downloader

Lauffähig ist der Downloader dabei unter Linux, Mac OS X und Windows. Nach der Installation kann ein Snapshot mittels:

wayback_machine_downloader http://example.com -t 20060716231334

heruntergeladen werden. Je nach Größe der Webseite kann der Vorgang dabei einige Stunden dauern. Der Quelltext ist auf GitHub zu finden. Lizenziert ist der Wayback Machine Downloader unter der MIT-Lizenz und damit freie Software.

osTicket

Im Open Source Bereich gibt es ja durchaus einige Ticketsysteme, wie z.B. das Open Ticket Request System (OTRS). Problematisch an den meisten Open Source Ticketsystemen ist dabei der Umstand das diese meist nicht bei den Wald- und Wiesenprovidern laufen, da es dort meist nur PHP und MySQL gibt. OTRS z.B. benötigt Perl, andere Systeme benötigen Ruby. Auf der Suche nach einem System welches auf einem solchen LAMP System läuft, habe ich osTicket gefunden. Dabei handelt es sich um ein freies Ticketsystem unter GPL. Problematisch sehe ich bloß das letzte Release welches im Jahr 2010 aufgelegt wurden. Das System selbst ist unter http://osticket.com zu finden. Derzeit scheint es leider kein halbwegs aktuelles Open Source Ticketsystem (welches unter PHP und MySQL läuft) zu geben.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/Open_Ticket_Request_System
http://en.wikipedia.org/wiki/Comparison_of_ticket-tracking_systems