SVN Locks auslesen und als Tabelle im Web darstellen

In Subversion kann man via

svnadmin lslocks /srv/svn-parent/$REP_NAME/

die jeweils in einem Repository befindlichen Locks auf Dateien auslesen.

Das würde auf der Konsole dann so aussehen:

Pfad: /trunk/scaling.tdms_index
UUID-Marke: opaquelocktoken:a956dfad-8b20-43a1-84c0-789290b1c611
Eigentümer: USERNAME
Erstellt: 2016-08-17 20:10:56 +0200 (Mi, 17. Aug 2016)
Läuft ab:
Kommentar (1 Zeile):

...

Das ist weder übersichtlich, noch informativ, wenn man sich einen Überblick verschaffen möchte.

Daher gibt es hier zum Download eine kleine Webapplikation, die die Informationen schöner und übersichtlicher darstellt. Der Inhalt muss auf dem Subversion Server selbst in ein neues Verzeichnis des Apache Servers gelegt werden.

2016-08-30 15_45_01-Subversion Server - Locks

In der Anwendung kann man die Einträge über die Suche oben rechts filtern.

Das enthaltene PHP-Skript greift auf eine Datei zu, die die Ausgabe des o.g. Befehls enthält.

Um das Ausgabeformat anzupassen, muss folgendes Shell Skript als Cronjob regelmäßig laufen und die Ausgabe in das root Verzeichnis der Applikation legen:

[fusion_builder_container hundred_percent=”yes” overflow=”visible”][fusion_builder_row][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”]


#!/bin/bash
# Das Programm dient dazu alle Locks mehrerer Repos auszugeben

# Deklarationen
SVN_SOURCE_DIR="/srv/svn-parent/"

# Alle Repositories auflisten und in LIST_REPS zwischenspeichern
find $SVN_SOURCE_DIR -maxdepth 1 -type d | sort > LIST_REPS

# 1 Zeile löschen (srv/svn-parent ist kein Repo)
sed -i 1D /root/LIST_REPS

# Schleife um Locks im jeweiligen Repostiory zu finden
for line in `cat /root/LIST_REPS`;do
REP=$line
REP_NAME=$(basename $REP)
# Locks ausgeben
echo [repository:$REP_NAME]
svnadmin lslocks /srv/svn-parent/$REP_NAME/
done

In der Crontab folgendes hinzufügen:

*/5 * * * * /root/show_locks > /var/www/locks/svn/locks_unsorted

Diese Lösung ist nicht unbedingt “sauber” programmiert, aber funktional…[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]

Advertisements

Automatische Updates installieren unter Ubuntu/Debian

Genutzt wird das Tool unattended-upgrades, dessen Aufgabe es ist, die letzten (Sicherheits-) Patches automatisch einzuspielen.

Unattended Upgrades

Zum Installieren muss folgender Befehl ausgeführt werden:

apt-get install unattended-upgrades

Die Standardkonfiguration findet man unter /etc/apt/apt.conf.d/50unattended-upgrades

Die Konfiguration passt soweit, das Durchlesen kann aber nicht schaden, um es nach seinen Vorstellungen anzupassen.
Hier wird angepasst, welche Pakete installiert werden sollen:

// Automatically upgrade packages from these (origin:archive) pairs
Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}-security";
        "${distro_id}:${distro_codename}-updates";
//      "${distro_id}:${distro_codename}-proposed";
//      "${distro_id}:${distro_codename}-backports";
};

Diese Zeile sollte auskommentiert/angepasst werden, um Benachrichtigungsmails zu erhalten:

Unattended-Upgrade::Mail "root";

Automatischer Aufruf durch /etc/apt/apt.conf.d/20auto-upgrades

Zum Aktivieren von unattended-upgrades, kann das Erstellen der apt Konfig Datei unter /etc/apt/apt.conf.d/20auto-upgrades genutzt werden.
Folgende Beispiel-Konfig kann genutzt werden:

// Do "apt-get update" automatically every n-days (0=disable)
APT::Periodic::Update-Package-Lists "1";

// Run the "unattended-upgrade" security upgrade script
// every n-days (0=disabled)
// Requires the package "unattended-upgrades" and will write
// a log in /var/log/unattended-upgrades
APT::Periodic::Unattended-Upgrade "1";

// Do "apt-get autoclean" every n-days (0=disable)
APT::Periodic::AutocleanInterval "7";

Um sicher zu sein, dass das Skript funktioniert, kann man es mit folgendem Befehl testen:
unattended-upgrade --debug --dry-run
Das sollte dann in etwa so ausssehen:

[...]
Option --dry-run given, *not* performing real actions
Packages that will be upgraded: libcurl3 libcurl3-gnutls
Writing dpkg log to '/var/log/unattended-upgrades/unattended-upgrades-dpkg_2016-09-09_08:33:07.332526.log'
Reading changelogs...
/usr/bin/dpkg --status-fd 9 --unpack --auto-deconfigure /var/cache/apt/archives/libcurl3-gnutls_7.35.0-1ubuntu2.9_amd64.deb /var/cache/apt/archives/libcurl3_7.35.0-1ubuntu2.9_amd64.deb
/usr/bin/dpkg --status-fd 11 --configure libcurl3-gnutls:amd64 libcurl3:amd64
All upgrades installed
InstCount=2 DelCount=0 BrokenCount=0

Damit die automatischen Updates auch ausgeführt werden, muss sichergestellt sein, dass das Cron Skript von apt auch aktiviert ist.
ls -la /etc/cron.daily/ zeigt die Cron Skripte an, die täglich durchgeführt werden. Das apt Skript muss vorhanden sein. Wenn es die Endung “.disabled” hat, einfach umbenennen mv /etc/cron.daily/apt.disabled /etc/cron.daily/apt

Microsoft Office Wörterbuch verteilen (via GPO)

Wenn es ein firmen weites Wörterbuch gibt, wäre es schön, wenn es auch automatisch an alle Benutzer verteilt wird.

Das Wörterbuch in Office ist eine einfache Textdatei mit der Endung “*.dic”.

Am bestern verteilt man die Datei via Gruppenrichtlinie auf die Clients in ein zentrales Verzeichnis.

Desweiteren muss noch die Registry angepasst werden, um das Wörterbuch automatisch zu laden:

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER:SoftwareMicrosoftShared ToolsProofing Tools1.0Custom Dictionaries]

"2"="C:Tmpjenstestet.dic"
"2_state"=hex:01,00,00,00

Anschließend sollte es so aussehen:
2016-08-05 14_16_39-Registrierungs-Editor
2016-08-05 14_17_03-Word-Optionen

Das eigene Wörterbuch “CUSTOM.DIC” kann nicht entfernt werden bzw. wird immer wieder neu angelegt. Ebenfalls ist auf die Nummerierung der Registry zu achten. Sie muss zwingend aufeinander folgen.

Azure MVA Kurse

Frei verfügbare Microsoft Virtual Academy Kurse zum Thema Azure:

So bauen Sie mit Microsoft Azure hybride IT-Infrastrukturen für ihr Unternehmen auf (D)

Cloud Hosting mit Azure App Service Web Apps (D)

Verschlüsselung von VMs in Azure mit CloudLink (D)

Datensicherung mit Azure Backup (D)

Technische Grundlagen für Microsoft Azure IaaS (E)

Optimierte Arbeitsauslastungsarchitektur und Verwaltungsfunktionen in Azure (E)

Microsoft Azure Pack: Database as a Service (DBaaS) (E)

Schnellere und skalierbare Lösungen dank Open-Source-Technologien (E)

Ausführliche Erläuterungen zu Szenarien und Mustern des Azure-Ressourcen-Managers (E)

Hybrid IT Management Part 1: Insights, Visibility, and Security Analytics (E)

Hybrid IT Management Part 2: Cloud-Enabled Protection (E)

Common Tasks for Linux on Azure (E)

Orchestrating Data and Services with Azure Data Factory (E)

Create a Dynamic Datacenter with Hybrid Software-Defined Networking (E)

Data Storage and Processing in the Cloud Demystified (E)

Design and Implement Cloud Data Platform Solutions (E)

Extend Your Datacenter to the Cloud (E)

 

MVA

Jira Re-Indexing failed: failed to locate current segments_N file

Der Jira Index wurde beschädigt und kann nicht wiederhergestellt werden.

The issue index is inconsistent with the database state. Database has (5681) issues but the index has (0) issues.

Die Datenbank an sich ist noch intakt, jedoch wurde der Jira eigene Index zerstört.

Eine Neuindexierung über System – Advanced – Indexing schlägt fehl.

Im Catalina Log taucht folgende Meldung auf:
tail /opt/atlassian/jira/logs/catalina.out -f

[fusion_builder_container hundred_percent="yes" overflow="visible"][fusion_builder_row][fusion_builder_column type="1_1" background_position="left top" background_color="" border_size="" border_color="" border_style="solid" spacing="yes" background_image="" background_repeat="no-repeat" padding="" margin_top="0px" margin_bottom="0px" class="" id="" animation_type="" animation_speed="0.3" animation_direction="left" hide_on_mobile="no" center_content="no" min_height="none"][...]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at com.atlassian.jira.task.ForkedThreadExecutor$ForkedRunnableDecorator.run(ForkedThreadExecutor.java:216)
        at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.lucene.index.CorruptIndexException: failed to locate current segments_N file
        at org.apache.lucene.index.IndexFileDeleter.(IndexFileDeleter.java:219)
        at org.apache.lucene.index.IndexWriter.(IndexWriter.java:1173)
        at com.atlassian.jira.index.DefaultIndexEngine.clean(DefaultIndexEngine.java:176)
        ... 28 more

Zum Beheben, kann man Jira zwingen, den Index neu aufzubauen.
Dazu den Dienst stoppen, alle vorhandenen Indexdateien löschen/umbenennen und Jira neu starten.
service jira stop
cd /var/atlassian/application-data/jira/caches
mv indexes indexes_old
mkdir indexes
chown jira:jira indexes -R
service jira start

Achtung: Es werden bis zu Neuindexierung keinerlei Issues angezeigt!
Dann kann man die Neuindexierung im Menü starten.
jira-reindexing

[...]
JiraTaskExectionThread-1 INFO braun 628x131x1 7gi885 172.30.18.99,127.0.0.1 /secure/admin/IndexReIndex.jspa [c.a.j.w.a.admin.index.IndexAdminImpl] Re-indexing started
JiraTaskExectionThread-1 INFO braun 628x131x1 7gi885 172.30.18.99,127.0.0.1 /secure/admin/IndexReIndex.jspa [c.a.j.util.index.CompositeIndexLifecycleManager] Reindex All starting...
JiraTaskExectionThread-1 INFO braun 628x131x1 7gi885 172.30.18.99,127.0.0.1 /secure/admin/IndexReIndex.jspa [c.a.j.w.a.admin.index.IndexAdminImpl] Re-indexing is 0% complete. Current index: Issue
JiraTaskExectionThread-1 INFO braun 628x131x1 7gi885 172.30.18.99,127.0.0.1 /secure/admin/IndexReIndex.jspa [c.a.j.issue.index.DefaultIndexManager] ReindexAll in foreground: {indexIssues=true, indexChangeHistory=true, indexComments=true, indexWorklogs=true, forceReloadFromDatabase=false}
IssueIndexer:thread-7 INFO braun 628x131x1 7gi885 172.30.18.99,127.0.0.1 /secure/admin/IndexReIndex.jspa [c.a.j.w.a.admin.index.IndexAdminImpl] Re-indexing is 1% complete. Current index: Issue
[...]
JiraTaskExectionThread-1 INFO braun 628x131x1 7gi885 172.30.18.99,127.0.0.1 /secure/admin/IndexReIndex.jspa [c.a.j.w.a.admin.index.IndexAdminImpl] Re-indexing is 100% complete. Current index: PortalPage
JiraTaskExectionThread-1 INFO braun 628x131x1 7gi885 172.30.18.99,127.0.0.1 /secure/admin/IndexReIndex.jspa [c.a.j.util.index.CompositeIndexLifecycleManager] Reindex took: 390ms. Indexer: SharedEntityIndexManager: paths: []
JiraTaskExectionThread-1 INFO braun 628x131x1 7gi885 172.30.18.99,127.0.0.1 /secure/admin/IndexReIndex.jspa [c.a.j.w.a.admin.index.IndexAdminImpl] Re-indexing is 100% complete. Current index:
JiraTaskExectionThread-1 INFO braun 628x131x1 7gi885 172.30.18.99,127.0.0.1 /secure/admin/IndexReIndex.jspa [c.a.j.util.index.CompositeIndexLifecycleManager] Reindex All complete. Total time: 95451ms. Reindex run: 27

[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]

Bluescreen Domain Controller – C00002E2 Directory Services Could Not Start

Nach einem Storage Crash konnte der zweite Domain Controller nicht mehr starten.

STOP: c00002e2 Directory Services could not start because of the following error:
A device attached to the system is not functioning.
Error Status: 0xc0000001.
Please shutdown this system and reboot into Directory Services Restore Mode, check the event log for more detailed information.

bluescreen-c00002e2
Das Problem ist, dass es sich hierbei um die Datenbank des AD handelt…

Zunächst bootet man via F8 in den Verzeichniswiederherstellungsmodus (Directory Services Restore Mode).
Ist die Maschine gebootet und man konnte sich anmelden, startet man eine Konsole und gibt folgendes ein:
ntdsutil.exe
activate instance ntds
files

Sollte es dort ein Problem geben, so erscheint eine Fehlermeldung:

Could not initialize the Jet engine: Jet Error -501. Failed to open DIT for AD DS/LDS instance NTDS. Error -2147418113

Um sie zu beheben, muss man alle Logdateien im Verzeichnis C:windowsntds umbenennen. .log -> .log_old o.ä.
Anschließend kann der Server neu gestartet werden und die Datenbank sollte wieder in Ordnung sein.