Schlagwort-Archive: Linux

Continuous Integration – Jenkins Installation (Debian)

Jenkins

Der nachfolgende Artikel beschreibt die Jenkins Installation unter Debian. Jenkins ist ein Open Source Continuous Integration Server mit dessen Hilfe der Build Prozess automatisiert werden kann. Zeitgesteuert oder bei jeder Änderung  des Codes im Software Repository kann Jenkins automatisiert Unit-Tests durchführen und die Software „bauen“.

Voraussetzungen

Java 8 Runtime Edition oder Development Kit.

Installation

Die nachfolgenden Installationsschritte orientieren sich an https://jenkins.io/doc/book/installing/:

wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | apt-key add -
sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
apt-get update
apt-get install jenkins

Konfiguration

Nach der Installation ist Jenkins unter http://<server>:8080 aufzurufen. Hat alles funktioniert, erscheint die Seite „Unlock Jenkins“. Dem dort angegebenen Logfile ist ein Passwort zu entnehmen und einzugeben.

cat /var/lib/jenkins/secrets/initialAdminPassword

Jetzt noch Plugins installieren und einen administrativen Benutzer anlege, dann ist Jenkins für weitere Schritte bereit.

Have fun!

Postfix als Mail Relay konfigurieren (Debian 6, Debian 7)

Einleitung

Wer Postfix als Mailserver an einem DSL-Anschluss betreibt, steht vor dem Problem, dass nahezu jeder Mailserver diese Mails ablehnt. Grund dafür ist, dass die meisten DNS-Blacklists IP-Adressen aus für DSL-Anschlüsse typischen dynamischen Adressbereichen blacklisten. Ausweg ist hier, solche Mailserver für das Relaying zu konfigurieren. Hierzu werden Benutzerdaten für einen „realen“ Mailserver mit statischer IP-Adresse benötigt, z.B. der Mailserver eines großen Mailproviders oder des ISPs. Im Beispiel wird hierzu krausix.de als Mailserver genutzt, ferner wird davon ausgegangen, dass krausix.de SASL-Authentifizierung beherrscht. Die beschriebene Konfiguration bezieht sich lediglich auf den Mailserver hinter dem DSL-Anschluss.

Konfiguration Postfix

Die relevante Konfiguration erfolgt in /etc/postfix/main.cf, die Zugangsdaten werden in /etc/postfix/sasl_password hinterlegt.

Postfix wird so angepasst, dass krausix.de als Relayhost genutzt wird:

postconf -e 'relayhost = smtp.krausix.de'

SASL-Authentifizierung wird aktiviert und die Herkunft der Zugangsdaten wird bekanntgegeben:

postconf -e 'smtp_sasl_auth_enable = yes'
postconf -e 'smtp_sasl_security_options = noanonymous'
postconf -e 'smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd'

Die Zugangsdaten werden bereitgestellt:

vi /etc/postfix/sasl_password


smtp.krausix.de	meinbenutzername:meinpasswort

Im Anschluss sollte diese Information vor neugierigen Augen geschützt und in einem für Postfix lesbaren Format bereitgestellt werden:

chown root:root /etc/postfix/sasl_passwd
chmod 600 /etc/postfix/sasl_passwd
postmap /etc/postfix/sasl_passwd

Ein Neustart von Postfix komplettiert das Ganze:

/etc/init.d/postfix restart

Test

echo "Dies ist eine Testmail" > testmail.txt
mail -s "Test" meinbenutzer@meinpostfach.tld < testmail.txt

 

Samba- / CIFS-Freigabe über SSH mit putty tunneln (Windows 7)

Einleitung

Nachfolgend wird beschrieben, wie mit Windows 7 auf entfernte Samba Shares über SSH zugegriffen werden kann. Voraussetzung ist ein laufender SSH-Server.

Dienst „Server“ anhalten

Zunächst werden die Dateifreigabedienste gestoppt und der Starttyp auf „Manuell“ gestellt. Dies wird entweder in der Dienstesteuerung durchgeführt oder aber per Kommandozeile (Start > Ausführen > cmd > Rechtsklick „als Administrator ausführen“) erledigt:

net stop "Server"
sc config LanmanServer start= deman

Neustart

Nach dem Beenden der Dateifreigabedienste ist ein Neustart zwingend erforderlich.

Andernfalls kommt es (Putty-Log) zu folgender Fehlermeldung:

Local port 192.168.100.254:445 forwarding to 192.168.100.100:254 failed: Network error: Permission denied

Putty

In Putty werden nun nach dem Neustart (!) die lokalen Ports 139 und 445 auf den Samba-Server umgeleitet. Hierzu wird jeweils unter Connection > SSH > Tunnnels bei „Source port“ IP und Port des Loopbackadapters eingetragen,  bei „Destination“ IP und Port des Samba-Servers (im Beispiel 192.168.100.100):

Source port: 139
Destination: 192.168.100.100:139

Source port: 445
Destination: 192.168.100.100:445

Netzlaufwerk verbinden

Ist die SSH-Session geöffnet, kann das Laufwerk verbunden werden. Im Windows-Datei-Explorer (Windows-Taste + E) einen Rechtsklick auf „Computer“, dann „Netzlaufwerk verbinden…“. Hier wird dann \\127.0.0.1\FREIGABE eingetragen, wobei FREIGABE entsprechend angepasst werden muss.

Dienst „Server“ starten

Die Dateifreigabedienste können nun wieder gestartet werden. Analog zum Beenden wird entweder in der Dienstesteuerung oder aber per Kommandozeile (Start > Ausführen > cmd > Rechtsklick „als Administrator ausführen“) gestartet:

net start "Server"

Windows Firewall

Sofern die Firewall nachfragt, ob der Zugriff erlaubt werden soll, muss dies bestätigt werden.

ProFTP mit MySQL

Vorwort

Zum schnellen und unkomplizierten Dateiaustausch soll ein FTP Server installiert werden. Damit die Administration nicht auf der Konsole erfolgen muss, wird die MySQL Nutzung aktiviert.

Pakete

apt-get install proftpd proftpd-mod-mysql

Konfiguration

vi /etc/proftpd/proftpd.conf

Hier wird zunächst IPv6 deaktiviert, danach folgen die Kofigurationszeilen für den SQL-Zugriff.

# Use this to jail all users in their homes
DefaultRoot                     ~

# The passwords in MySQL are encrypted using CRYPT
SQLAuthTypes            Plaintext Crypt
SQLAuthenticate         users groups

# used to connect to the database
# databasename@host database_user user_password
SQLConnectInfo  proftpd@localhost proftpd proftpd

# Here we tell ProFTPd the names of the database columns in the "usertable"
# we want it to interact with. Match the names with those in the db
SQLUserInfo     ftpuser userid passwd uid gid homedir shell

# Here we tell ProFTPd the names of the database columns in the "grouptable"
# we want it to interact with. Again the names match with those in the db
SQLGroupInfo    ftpgroup groupname gid members

# set min UID and GID - otherwise these are 999 each
SQLMinID        500

# create a user's home directory on demand if it doesn't exist
#SQLHomedirOnDemand on
CreateHome on

# Update count every time user logs in
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser

# Update modified everytime user uploads or deletes a file
SQLLog  STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser

# User quotas
# ===========
QuotaEngine on
QuotaDirectoryTally on
QuotaDisplayUnits Mb
QuotaShowQuotas on

SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM ftpquotalimits WHERE name = '%{0}' AND quota_type = '%{1}'"

SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM ftpquotatallies WHERE name = '%{0}' AND quota_type = '%{1}'"

SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'" ftpquotatallies

SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" ftpquotatallies

QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally

RootLogin off
RequireValidShell off

Gruppe und Benutzer werden erstellt:

groupadd ftpgroup
useradd -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuse

Ferner müssen noch Kommentare in /etc/proftpd/modules.conf for die folgenden Module entfernt werden:

LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
LoadModule mod_quotatab_sql.

 Datenbank

Die mitgelieferten Skripte laufen z. T. auf Fehler. Hier angepasste SQLs:

CREATE TABLE ftpgroup (
groupname varchar(16) NOT NULL default "",
gid smallint(6) NOT NULL default "5500",
members varchar(16) NOT NULL default "",
KEY groupname (groupname)
) TYPE=MyISAM COMMENT="ProFTP group table";

CREATE TABLE ftpquotalimits (
name varchar(30) default NULL,
quota_type enum("user","group","class","all") NOT NULL default "user",
per_session enum("false","true") NOT NULL default "false",
limit_type enum("soft","hard") NOT NULL default "soft",
bytes_in_avail int(10) unsigned NOT NULL default "0",
bytes_out_avail int(10) unsigned NOT NULL default "0",
bytes_xfer_avail int(10) unsigned NOT NULL default "0",
files_in_avail int(10) unsigned NOT NULL default "0",
files_out_avail int(10) unsigned NOT NULL default "0",
files_xfer_avail int(10) unsigned NOT NULL default "0"
) TYPE=MyISAM;

CREATE TABLE ftpquotatallies (
name varchar(30) NOT NULL default "",
quota_type enum("user","group","class","all") NOT NULL default "user",
bytes_in_used int(10) unsigned NOT NULL default "0",
bytes_out_used int(10) unsigned NOT NULL default "0",
bytes_xfer_used int(10) unsigned NOT NULL default "0",
files_in_used int(10) unsigned NOT NULL default "0",
files_out_used int(10) unsigned NOT NULL default "0",
files_xfer_used int(10) unsigned NOT NULL default "0"
) TYPE=MyISAM;

CREATE TABLE ftpuser (
id int(10) unsigned NOT NULL auto_increment,
userid varchar(32) NOT NULL default "",
passwd varchar(32) NOT NULL default "",
uid smallint(6) NOT NULL default "5500",
gid smallint(6) NOT NULL default "5500",
homedir varchar(255) NOT NULL default "",
shell varchar(16) NOT NULL default "/sbin/nologin",
count int(11) NOT NULL default "0",
accessed datetime NOT NULL default "0000-00-00 00:00:00",
modified datetime NOT NULL default "0000-00-00 00:00:00",
PRIMARY KEY (id),
UNIQUE KEY userid (userid)
) TYPE=MyISAM COMMENT="ProFTP user table";

 Los gehts

/etc/init.d/proftpd restart

In der Tabelle ftpgroup ist groupname=ftpgroup mit der entsprechenden GID (/etc/group) und members=ftpuser einzutragen.

Die Tabelle ftpuser wird u.a. mit einer laufenden Nummer (id), einem FTP-Benutzer (userid), einem Password und einem Homeverzeichnis, welches beim ersten FTP-Login automatisch erstellt wird, gefüllt.

Die Tabelle ftpquotalimits wird schließlich mit den gewünschten Limits versehen.

Installation FOG Free Computer Cloning Solution (Debian)

Vorwort

FOG (http://www.fogproject.org/) ist eine freie Lösung zum Clonen und Verteilen von Betriebssystemimages. Nachfolgend ist die Installation unter Debian beschrieben.

Clamav

Zunächst werden vor der eigentlichen Installation die Pakete entfernt, diese machen laut Wiki Probleme bei der FOG-Installation.

 apt-get remove --purge clamav-freshclam clamav clamav-daemon

Anschließend werden die nachfolgenden Paketquellen eingebunden.

vi /etc/apt/sources.list

Folgende Zeile wird ergänzt:

deb http://ftp.de.debian.org/debian stable-updates main contrib non-free

Und schließlich:

apt-get update

FOG-Installation

Zunächst wird die aktuelle FOG-Version (Stand Dezember 2013) beschafft und das Installationsskript ausgeführt.

cd /opt/
wget http://downloads.sourceforge.net/project/freeghost/FOG/fog_0.32/fog_0.32.tar.gz
tar -xvzf fog_0.32.tar.gz
cd fog_0.32/bin/
./installfog.sh

Bei der Frage nach der Linuxversion wird 2 ausgewählt, als Installationstyp N (normaler Server) eingetragen. Danach erfolgt die Abfrage der IP-Adresse. Es wird kein DHCP-Server angegeben und FOG wird auch nicht als DHCP-Server konfiguriert. Ebenfalls sollte die Frage nach der Installation zusätzlicher Sprachpakete verneint werden, zumindest unter Debian 7 führt diese zu einer Fehlermeldung. Stattdessen wird im Nachgang ProxyDHCP eingerichtet.

Sind alle Angaben erfolgt, erscheint die getroffene Auswahl noch einmal als Übersicht und die Installation kann gestartet werden.

MySQL

Die Zugangsdaten zur Datenbank können lt. Installationsanweisung in den Konfigurationsdateien gesetzt werden.

ACHTUNG: ich konnte trotz Anpassen der Konfigurationsdateien FOG nicht starten. Als Workaround habe ich lokal eine MySQL-Datenbank mit leerem Passwort installiert. Nach dem Aufruf der Web-Oberfläche habe ich die Datenbank erstellt und anschließend exportiert:

mysqldump --allow-keywords -x -v fog > fogbackup.sql

Die Datenbank (fog) habe ich dann auf dem eigentlichen MySQL-Server erstellt und  über die Managementoberfläche phpMyAdmin importiert. Im Anschluss mussten die Zugangsdaten dann noch in der Konfigurationsdatei angepasst werden:

vi /var/www/fog/commons/config.php

Folgende Zeilen sind relevant:

define( "MYSQL_HOST", "192.168.100.30" );
define( "MYSQL_DATABASE", "fog" );
define( "MYSQL_USERNAME", "fog" );
define( "MYSQL_PASSWORD", "passwort" );

ProxyDHCP

Zunächst wird DNSMASQ installiert und konfiguriert.

 apt-get install dnsmasq

Die Konfiguration erfolgt in der Datei /etc/dnsmasq.d/ltsp.conf aus dem FOG Wiki:

# Sample configuration for dnsmasq to function as a proxyDHCP server,
# enabling LTSP clients to boot when an external, unmodifiable DHCP
# server is present.
# The main dnsmasq configuration is in /etc/dnsmasq.conf;
# the contents of this script are added to the main configuration.
# You may modify the file to suit your needs.

# Don't function as a DNS server:
port=0

# Log lots of extra information about DHCP transactions.
log-dhcp

# Dnsmasq can also function as a TFTP server. You may uninstall
# tftpd-hpa if you like, and uncomment the next line:
# enable-tftp

# Set the root directory for files available via FTP.
tftp-root=/tftpboot

# The boot filename.
dhcp-boot=pxelinux.0

# rootpath option, for NFS
dhcp-option=17,/images

# kill multicast
dhcp-option=vendor:PXEClient,6,2b

# Disable re-use of the DHCP servername and filename fields as extra
# option space. That's to avoid confusing some old or broken DHCP clients.
dhcp-no-override

# PXE menu.  The first part is the text displayed to the user.  The second is the timeout, in seconds.
pxe-prompt="Press F8 for boot menu", 3

# The known types are x86PC, PC98, IA64_EFI, Alpha, Arc_x86,
# Intel_Lean_Client, IA32_EFI, BC_EFI, Xscale_EFI and X86-64_EFI
# This option is first and will be the default if there is no input from the user.
pxe-service=X86PC, "Boot from network", pxelinux

# A boot service type of 0 is special, and will abort the
# net boot procedure and continue booting from local media.
pxe-service=X86PC, "Boot from local hard disk", 0

# If an integer boot service type, rather than a basename is given, then the
# PXE client will search for a suitable boot service for that type on the
# network. This search may be done by multicast or broadcast, or direct to a
# server if its IP address is provided.
# pxe-service=x86PC, "Install windows from RIS server", 1

# This range(s) is for the public interface, where dnsmasq functions
# as a proxy DHCP server providing boot information but no IP leases.
# Any ip in the subnet will do, so you may just put your server NIC ip here.
# Since dnsmasq is not providing true DHCP services, you do not want it
# handing out IP addresses.  Just put your servers IP address for the interface
# that is connected to the network on which the FOG clients exist.
# If this setting is incorrect, the dnsmasq may not start, rendering
# your proxyDHCP ineffective.
dhcp-range=192.168.1.10,proxy

# This range(s) is for the private network on 2-NIC servers,
# where dnsmasq functions as a normal DHCP server, providing IP leases.
# dhcp-range=192.168.0.20,192.168.0.250,8h

# For static client IPs, and only for the private subnets,
# you may put entries like this:
# dhcp-host=00:20:e0:3b:13:af,10.160.31.111,client111,infinite

NFS Mount

EIne einfache Lösung ist es, in der /etc/fstab dauerhaft eine NFS-Freigabe zu mounten. Als Ziel wird das /images Verzeichnis gewählt.

192.168.100.1:/var/nfs        /images nfs     defaults        0       0