FreeBSD ➔ BasePorts


Writing Icon

Lizenz: Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)
Letzte Aktualisierung:
Veröffentlicht:
Verfasser: Markus Kohlmeyer
Beitragender: Jesco Freund
Beitragender: Eckhard Doll
Beitragender: Olaf Uecker


In diesem HowTo beschreibe ich step-by-step die Installation einiger Ports (Packages / Pakete) welche auf keinem FreeBSD 64Bit BaseSystem auf einem dedizierten Server, auch RootServer genannt, fehlen sollten.

Zu den Voraussetzungen für dieses HowTo siehe bitte: FreeBSD ➔ Remote Installation ➔ Voraussetzungen

Einleitung

Unsere BasePorts werden am Ende folgende Dienste umfassen.

  • SUDO 1.8.23
  • GDBM 1.13
  • SQLite 3.23.1
  • Berkeley DB 5.3.28
  • LibreSSL 2.7.3
  • Perl 5.26.2
  • Python 2.7.15
  • Python 3.6.5
  • Ruby 2.4.4
  • TCL 8.6.8
  • LUA 5.2.4

Einloggen und zu root werden

putty -ssh -P 2222 -i "%USERPROFILE%\VirtualBox VMs\FreeBSD\ssh\id_rsa.ppk" admin@127.0.0.1

su - root

Portstree einrichten

Um unser Basissystem um sinnvolle Programme erweitern zu können, fehlt uns noch der sogenannte Portstree. Diesen laden wir uns nun mittels portsnap herunter (kann durchaus eine Stunde oder länger dauern).

portsnap fetch extract

Damit ist der Portstree einsatzbereit. Um den Tree künftig zu aktualisieren genügt der folgende Befehl.

portsnap fetch update

Wichtige Informationen zu neuen Paketversionen finden sich in /usr/ports/UPDATING und sollten dringend beachtet werden.

less /usr/ports/UPDATING

Software installieren

WICHTIG: An diesem Punkt müssen wir uns entscheiden, ob wir die Pakete/Ports in Zukunft bequem als vorkompiliertes Binary-Paket per pkg install <category/portname> mit den Default-Optionen installieren wollen oder ob wir die Optionen und somit auch den Funktionsumfang beziehungsweise die Features unserer Pakete/Ports selbst bestimmen wollen.

In diesem HowTo werden wir uns für die zweite Variante entscheiden, da uns dies viele Probleme durch unnötige oder fehlende Features und Abhängigkeiten ersparen wird. Andererseits verlieren wir dadurch den Komfort von pkg bei der Installation und den Updates der Pakete/Ports. Ebenso müssen wir zwangsweise für alle Pakete/Ports die gewünschten Optionen manuell setzen und die Pakete/Ports auch selbst kompilieren.

Dieses Vorgehen ist deutlich zeitaufwendiger und erfordert auch etwas mehr Wissen über die jeweiligen Pakete/Ports und deren Features, dafür entschädigt es uns aber mit einem schlankeren, schnelleren und stabileren System und bietet uns gegebenenfalls nützliche/erforderliche zusätzliche Funktionen und Sicherheitsfeatures. Auch die potentielle Gefahr für Sicherheitslücken sinkt dadurch, da wir unnütze Pakete/Ports gar nicht erst als Abhängigkeiten mitinstallieren müssen.

Wir deaktivieren also zuerst das Default-Repository von pkg, um versehentlichen Installationen von Binary-Paketen durch pkg vorzubeugen.

mkdir -p /usr/local/etc/pkg/repos
echo "FreeBSD: { enabled: no }" > /usr/local/etc/pkg/repos/FreeBSD.conf

So ganz ohne komfortable Tools ist das Basis-System etwas mühselig zu administrieren. Deshalb werden wir aus den Ports nun ein paar etwas häufiger benötigte Anwendungen installiert.

Die von uns jeweils gewünschten Build-Optionen der Ports legen wir dabei mittels der options-Files des neuen Portkonfigurationsframeworks OptionsNG fest.

Wir installieren ports-mgmt/pkg und dessen Abhängigkeiten.

cd /usr/ports/ports-mgmt/pkg
make config-recursive all install clean-depends clean

pkg check -B -d -a

Die /etc/periodic.conf wird um folgenden Inhalt erweitert.

cat >> /etc/periodic.conf << "EOF"
daily_backup_pkg_enable="YES"
daily_status_pkg_changes_enable="YES"
weekly_status_pkg_enable="YES"
security_status_pkgaudit_enable="YES"
security_status_pkgchecksum_enable="YES"
"EOF"

Dieser Cronjob prüft täglich um 7:00 Uhr ob es Updates für die installierten Pakete gibt und ob darin gegebenenfalls wichtige Sicherheitsupdates enthalten sind. Das Ergebnis wird automatisch per Mail an root (siehe /etc/mail/aliases) gesendet.

cat >> /etc/crontab << "EOF"
0       7       *       *       *       root    /usr/sbin/portsnap -I cron update && /usr/local/sbin/pkg version -vIL= && /usr/local/sbin/pkg audit -F
"EOF"

Wir installieren sysutils/devcpu-data und dessen Abhängigkeiten.

cd /usr/ports/sysutils/devcpu-data
make LICENSES_ACCEPTED=EULA config-recursive all install clean-depends clean

echo 'microcode_update_enable="YES"' >> /etc/rc.conf

Wir installieren security/sudo und dessen Abhängigkeiten.

mkdir -p /var/db/ports/security_sudo
cat > /var/db/ports/security_sudo/options << "EOF"
_OPTIONS_READ=sudo-1.8.23
_FILE_COMPLETE_OPTIONS_LIST=AUDIT DISABLE_AUTH DISABLE_ROOT_SUDO INSULTS LDAP NOARGS_SHELL OPIE PAM SSSD
OPTIONS_FILE_SET+=AUDIT
OPTIONS_FILE_UNSET+=DISABLE_AUTH
OPTIONS_FILE_UNSET+=DISABLE_ROOT_SUDO
OPTIONS_FILE_UNSET+=INSULTS
OPTIONS_FILE_UNSET+=LDAP
OPTIONS_FILE_UNSET+=NOARGS_SHELL
OPTIONS_FILE_UNSET+=OPIE
OPTIONS_FILE_UNSET+=PAM
OPTIONS_FILE_UNSET+=SSSD
"EOF"

cd /usr/ports/security/sudo
make config-recursive all install clean-depends clean

Wir installieren devel/re2c und dessen Abhängigkeiten.

cd /usr/ports/devel/re2c
make config-recursive all install clean-depends clean

Wir installieren lang/perl5.26 und dessen Abhängigkeiten.

mkdir -p /var/db/ports/databases_gdbm
cat > /var/db/ports/databases_gdbm/options << "EOF"
_OPTIONS_READ=gdbm-1.13
_FILE_COMPLETE_OPTIONS_LIST=COMPAT
OPTIONS_FILE_UNSET+=COMPAT
"EOF"

mkdir -p /var/db/ports/devel_readline
cat > /var/db/ports/devel_readline/options << "EOF"
_OPTIONS_READ=readline-7.0.3
_FILE_COMPLETE_OPTIONS_LIST=TERMCAP
OPTIONS_FILE_SET+=TERMCAP
"EOF"

mkdir -p /var/db/ports/lang_perl5.26
cat > /var/db/ports/lang_perl5.26/options << "EOF"
_OPTIONS_READ=perl5-5.26.2
_FILE_COMPLETE_OPTIONS_LIST=DOT_INC GDBM MULTIPLICITY PERL_64BITINT PERL_MALLOC SITECUSTOMIZE
OPTIONS_FILE_UNSET+=DOT_INC
OPTIONS_FILE_UNSET+=GDBM
OPTIONS_FILE_SET+=MULTIPLICITY
OPTIONS_FILE_SET+=PERL_64BITINT
OPTIONS_FILE_UNSET+=PERL_MALLOC
OPTIONS_FILE_UNSET+=SITECUSTOMIZE
"EOF"

cd /usr/ports/lang/perl5.26
make config-recursive all install clean-depends clean

Wir installieren devel/pcre und dessen Abhängigkeiten.

mkdir -p /var/db/ports/devel_pcre
cat > /var/db/ports/devel_pcre/options << "EOF"
_OPTIONS_READ=pcre-8.40
_FILE_COMPLETE_OPTIONS_LIST=MAN3 STACK_RECURSION
OPTIONS_FILE_SET+=MAN3
OPTIONS_FILE_SET+=STACK_RECURSION
"EOF"

cd /usr/ports/devel/pcre
make config-recursive all install clean-depends clean

Wir installieren databases/sqlite3 und dessen Abhängigkeiten.

mkdir -p /var/db/ports/databases_sqlite3
cat > /var/db/ports/databases_sqlite3/options << "EOF"
_OPTIONS_READ=sqlite3-3.23.1
_FILE_COMPLETE_OPTIONS_LIST=ARMOR DBPAGE DBSTAT DIRECT_READ EXTENSION FTS3_TOKEN FTS4 FTS5 LIKENOTBLOB MEMMAN METADATA NULL_TRIM RBU SECURE_DELETE STMT STSHELL UNKNOWN_SQL UNLOCK_NOTIFY UPD_DEL_LIMIT URI URI_AUTHORITY TS0 TS1 TS2 TS3 STAT3 STAT4 JSON1 SESSION OFFSET SER1 SOUNDEX ICU UNICODE61 RTREE RTREE_INT READLINES READLINEP EDITLINE
OPTIONS_FILE_SET+=ARMOR
OPTIONS_FILE_SET+=DBPAGE
OPTIONS_FILE_SET+=DBSTAT
OPTIONS_FILE_SET+=DIRECT_READ
OPTIONS_FILE_SET+=EXTENSION
OPTIONS_FILE_SET+=FTS3_TOKEN
OPTIONS_FILE_SET+=FTS4
OPTIONS_FILE_SET+=FTS5
OPTIONS_FILE_SET+=LIKENOTBLOB
OPTIONS_FILE_SET+=MEMMAN
OPTIONS_FILE_SET+=METADATA
OPTIONS_FILE_UNSET+=NULL_TRIM
OPTIONS_FILE_SET+=RBU
OPTIONS_FILE_SET+=SECURE_DELETE
OPTIONS_FILE_SET+=STMT
OPTIONS_FILE_SET+=STSHELL
OPTIONS_FILE_UNSET+=UNKNOWN_SQL
OPTIONS_FILE_SET+=UNLOCK_NOTIFY
OPTIONS_FILE_UNSET+=UPD_DEL_LIMIT
OPTIONS_FILE_SET+=URI
OPTIONS_FILE_SET+=URI_AUTHORITY
OPTIONS_FILE_UNSET+=TS0
OPTIONS_FILE_UNSET+=TS1
OPTIONS_FILE_SET+=TS2
OPTIONS_FILE_UNSET+=TS3
OPTIONS_FILE_UNSET+=STAT3
OPTIONS_FILE_SET+=STAT4
OPTIONS_FILE_SET+=JSON1
OPTIONS_FILE_SET+=SESSION
OPTIONS_FILE_SET+=OFFSET
OPTIONS_FILE_SET+=SER1
OPTIONS_FILE_SET+=SOUNDEX
OPTIONS_FILE_SET+=ICU
OPTIONS_FILE_UNSET+=UNICODE61
OPTIONS_FILE_SET+=RTREE
OPTIONS_FILE_UNSET+=RTREE_INT
OPTIONS_FILE_UNSET+=READLINES
OPTIONS_FILE_UNSET+=READLINEP
OPTIONS_FILE_SET+=EDITLINE
"EOF"

cd /usr/ports/databases/sqlite3
make config-recursive all install clean-depends clean

Wir installieren devel/pcre2 und dessen Abhängigkeiten.

mkdir -p /var/db/ports/devel_m4
cat > /var/db/ports/devel_m4/options << "EOF"
_OPTIONS_READ=m4-1.4.18
_FILE_COMPLETE_OPTIONS_LIST=LIBSIGSEGV
OPTIONS_FILE_SET+=LIBSIGSEGV
"EOF"

mkdir -p /var/db/ports/devel_pcre2
cat > /var/db/ports/devel_pcre2/options << "EOF"
_OPTIONS_READ=pcre2-10.21
_FILE_COMPLETE_OPTIONS_LIST=STACK_RECURSION
OPTIONS_FILE_SET+=STACK_RECURSION
"EOF"

cd /usr/ports/devel/pcre2
make config-recursive all install clean-depends clean

Wir installieren security/libressl und dessen Abhängigkeiten.

cat >> /etc/make.conf << "EOF"
DEFAULT_VERSIONS+=ssl=libressl
"EOF"

mkdir -p /var/db/ports/security_openssl
cat > /var/db/ports/security_openssl/options << "EOF"
_OPTIONS_READ=openssl-1.0.2
_FILE_COMPLETE_OPTIONS_LIST=EC MAN3 PADLOCK RFC3779 SHARED ZLIB EXPCIPHERS RC5 MD2 ASM SSE2 SCTP SSL2 SSL3
OPTIONS_FILE_SET+=EC
OPTIONS_FILE_SET+=MAN3
OPTIONS_FILE_UNSET+=PADLOCK
OPTIONS_FILE_UNSET+=RFC3779
OPTIONS_FILE_SET+=SHARED
OPTIONS_FILE_UNSET+=ZLIB
OPTIONS_FILE_UNSET+=EXPCIPHERS
OPTIONS_FILE_UNSET+=RC5
OPTIONS_FILE_UNSET+=MD2
OPTIONS_FILE_SET+=ASM
OPTIONS_FILE_SET+=SSE2
OPTIONS_FILE_SET+=SCTP
OPTIONS_FILE_UNSET+=SSL2
OPTIONS_FILE_UNSET+=SSL3
"EOF"

mkdir -p /var/db/ports/security_libressl
cat > /var/db/ports/security_libressl/options << "EOF"
_OPTIONS_READ=libressl-2.7.3
_FILE_COMPLETE_OPTIONS_LIST=MAN3 NC
OPTIONS_FILE_SET+=MAN3
OPTIONS_FILE_SET+=NC
"EOF"

cd /usr/ports/security/libressl
make config-recursive all install clean-depends clean

Wir konfigurieren openssl.

cp /etc/ssl/openssl.cnf /usr/local/openssl/openssl.cnf

Wir installieren security/ca_root_nss und dessen Abhängigkeiten.

mkdir -p /var/db/ports/security_ca_root_nss
cat > /var/db/ports/security_ca_root_nss/options << "EOF"
_OPTIONS_READ=ca_root_nss-3.37
_FILE_COMPLETE_OPTIONS_LIST=ETCSYMLINK
OPTIONS_FILE_SET+=ETCSYMLINK
"EOF"

cd /usr/ports/security/ca_root_nss
make config-recursive all install clean-depends clean

Wir installieren lang/lua52 und dessen Abhängigkeiten.

cd /usr/ports/lang/lua52
make config-recursive all install clean-depends clean

Wir installieren lang/tcl86 und dessen Abhängigkeiten.

mkdir -p /var/db/ports/lang_tcl86
cat > /var/db/ports/lang_tcl86/options << "EOF"
_OPTIONS_READ=tcl86-8.6.8
_FILE_COMPLETE_OPTIONS_LIST=MODULES TCLMAN TZDATA
OPTIONS_FILE_SET+=MODULES
OPTIONS_FILE_SET+=TCLMAN
OPTIONS_FILE_SET+=TZDATA
"EOF"

cd /usr/ports/lang/tcl86
make config-recursive all install clean-depends clean

Wir installieren lang/python27 und dessen Abhängigkeiten.

mkdir -p /var/db/ports/lang_python27
cat > /var/db/ports/lang_python27/options << "EOF"
_OPTIONS_READ=python27-2.7.15
_FILE_COMPLETE_OPTIONS_LIST=LIBFFI PYMALLOC UCS2 UCS4
OPTIONS_FILE_SET+=LIBFFI
OPTIONS_FILE_SET+=PYMALLOC
OPTIONS_FILE_UNSET+=UCS2
OPTIONS_FILE_SET+=UCS4
"EOF"

cd /usr/ports/lang/python2
make config-recursive all install clean-depends clean

Wir installieren lang/python36 und dessen Abhängigkeiten.

mkdir -p /var/db/ports/lang_python36
cat > /var/db/ports/lang_python36/options << "EOF"
_OPTIONS_READ=python36-3.6.5
_FILE_COMPLETE_OPTIONS_LIST=LIBFFI PYMALLOC FNV SIPHASH
OPTIONS_FILE_SET+=LIBFFI
OPTIONS_FILE_SET+=PYMALLOC
OPTIONS_FILE_UNSET+=FNV
OPTIONS_FILE_SET+=SIPHASH
"EOF"

cd /usr/ports/lang/python3
make config-recursive all install clean-depends clean

Wir installieren lang/python und dessen Abhängigkeiten.

cd /usr/ports/lang/python
make config-recursive all install clean-depends clean

Wir installieren databases/py-bsddb und dessen Abhängigkeiten.

mkdir -p /var/db/ports/databases_db5
cat > /var/db/ports/databases_db5/options << "EOF"
_OPTIONS_READ=db5-5.3.28
_FILE_COMPLETE_OPTIONS_LIST=JAVA L10N SQL TCL
OPTIONS_FILE_UNSET+=JAVA
OPTIONS_FILE_UNSET+=L10N
OPTIONS_FILE_UNSET+=SQL
OPTIONS_FILE_UNSET+=TCL
"EOF"

cd /usr/ports/databases/py-bsddb
make config-recursive all install clean-depends clean

Wir installieren databases/py-bsddb3 und dessen Abhängigkeiten.

cd /usr/ports/databases/py-bsddb3
make config-recursive all install clean-depends clean

Wir installieren lang/ruby24 und dessen Abhängigkeiten.

mkdir -p /var/db/ports/math_gmp
cat > /var/db/ports/math_gmp/options << "EOF"
_OPTIONS_READ=gmp-6.1.2
_FILE_COMPLETE_OPTIONS_LIST=CPU_OPTS
OPTIONS_FILE_UNSET+=CPU_OPTS
"EOF"

mkdir -p /var/db/ports/lang_ruby24
cat > /var/db/ports/lang_ruby24/options << "EOF"
_OPTIONS_READ=ruby-2.4.4
_FILE_COMPLETE_OPTIONS_LIST=CAPIDOCS GMP RDOC
OPTIONS_FILE_UNSET+=CAPIDOCS
OPTIONS_FILE_SET+=GMP
OPTIONS_FILE_SET+=RDOC
"EOF"

cd /usr/ports/lang/ruby24
make config-recursive all install clean-depends clean

Wir installieren devel/ruby-gems und dessen Abhängigkeiten.

cd /usr/ports/devel/ruby-gems
make config-recursive all install clean-depends clean

Wir installieren databases/ruby-bdb und dessen Abhängigkeiten.

cd /usr/ports/databases/ruby-bdb
make config-recursive all install clean-depends clean

Wie geht es weiter?

Viel Spass mit den neuen FreeBSD BasePorts.


Über den Autor