Containerisierung und Agile Softwareentwicklung: Potentiale, Hindernisse und bewährte Methoden

Die Agile Softwareentwicklung hat die Art und Weise, wie wir Software erstellen und bereitstellen, revolutioniert, indem sie iterative Entwicklungszyklen und eine ständige Feedback-Schleife fördert. Parallel dazu hat die Einführung der Containerisierungstechnologie das Spielfeld verändert und bietet eine Reihe von Vorteilen, die sich hervorragend in das agile Paradigma einfügen.

Chancen der Containerisierung für die Agile Softwareentwicklung

Die Containerisierung hat sich als ein enormer Katalysator für die Agile Softwareentwicklung erwiesen. Sie ermöglicht eine schnelle und flexible Bereitstellung von Anwendungen, indem sie eine isolierte Umgebung bereitstellt, in der Anwendungen unabhängig von der zugrunde liegenden Infrastruktur ausgeführt werden können. Dieser Ansatz unterstützt eine effizientere Nutzung von Ressourcen, fördert die Zusammenarbeit und Integration von Entwicklungs- und Betriebsteams und reduziert die Abhängigkeit von spezifischen Betriebssystemen oder Umgebungen.

Die Containerisierung unterstützt auch die Skalierung und Resilienz von Anwendungen. Durch die Nutzung von Container-Orchestrierungsplattformen wie Kubernetes können Teams Anwendungen schnell und nahtlos auf eine größere Anzahl von Servern oder sogar über verschiedene Cloud-Umgebungen hinweg skalieren. Darüber hinaus erhöht die Fähigkeit von Containern, bei Ausfällen schnell neu zu starten, die Gesamtresilienz des Systems.

Herausforderungen bei der Containerisierung von Anwendungen in der Agile Softwareentwicklung

Trotz der vielfältigen Vorteile stellt die Containerisierung auch eine Reihe von Herausforderungen dar. Eine davon ist die erhöhte Komplexität bei der Verwaltung von Container-Orchestrierung und -Deployment. Kubernetes, eine führende Plattform in diesem Bereich, hat zwar eine beeindruckende Funktionalität, aber auch eine steile Lernkurve und kann komplex in der Handhabung sein.

Die Integration von Container-Plattformen in bestehende Tools und Prozesse kann ebenfalls schwierig sein. Viele traditionelle Entwicklungs- und Bereitstellungstools sind nicht darauf ausgelegt, mit Containern zu arbeiten, und erfordern Anpassungen oder sogar vollständige Überarbeitungen, um effektiv genutzt werden zu können.

Darüber hinaus birgt die Containerisierung potenzielle Sicherheitsrisiken. Containeranwendungen eröffnen neue Angriffsvektoren, und die Fehlkonfiguration von Containern kann zu erheblichen Sicherheitsproblemen führen. Zudem besteht eine Abhängigkeit von der Verfügbarkeit und Stabilität der zugrunde liegenden Infrastruktur, was ein zusätzliches Risiko darstellen kann.

Best Practices für die Verwendung von Containern in der Agile Softwareentwicklung

Trotz dieser Herausforderungen gibt es eine Reihe von bewährten Methoden, die Unternehmen dabei unterstützen können, das Potenzial der Containerisierung voll auszuschöpfen. Dazu gehört das Etablieren von klaren Entwicklungs- und Bereitstellungsprozessen für Containeranwendungen. Diese Prozesse sollten den gesamten Lebenszyklus des Containers abdecken, von der Entwicklung und dem Testing über die Bereitstellung bis hin zum Monitoring und zur Wartung.

Ein weiterer wichtiger Aspekt ist die Automatisierung von Build-, Test- und Bereitstellungsprozessen. Tools wie Jenkins, GitLab CI/CD und Spinnaker können hierbei helfen, die Effizienz zu steigern und menschliche Fehler zu minimieren. Insbesondere in Kombination mit Container-Orchestrierungstools wie Kubernetes kann dies zu einer erheblichen Beschleunigung der Entwicklung und Bereitstellung führen.

In Bezug auf Sicherheitsaspekte sollten Unternehmen robuste Zugriffskontrollen implementieren und Verschlüsselung sowohl für Daten in Ruhe als auch für Daten während der Übertragung einsetzen. Tools zur Erkennung von Sicherheitslücken, wie z.B. Aqua Security und Twistlock, können kontinuierliche Scans von Containerbildern durchführen, um bekannte Schwachstellen zu identifizieren und zu beheben.

Schließlich ist die Überwachung und Protokollierung von Containeranwendungen in Echtzeit von entscheidender Bedeutung. Tools wie Prometheus und Grafana bieten wertvolle Einblicke in die Leistung und den Zustand von Containeranwendungen und ermöglichen es Teams, Probleme schnell zu erkennen und zu beheben.

Netplan v0.106 is now available

I’m happy to announce that Netplan version 0.106 is now available on GitHub and is soon to be deployed into an Ubuntu/Debian/Fedora installation near you! Six months and 65 commits after the previous version, this release is brought to you by 4 free software contributors from around the globe.

Highlights

Highlights of this release include the new netplan status command, which queries your system for IP addresses, routes, DNS information, etc… in addition to the Netplan backend renderer (NetworkManager/networkd) in use and the relevant Netplan YAML configuration ID. It displays all this in a nicely formatted way (or alternatively in machine readable YAML/JSON format).

Furthermore, we implemented a clean libnetplan API which can be used by external tools to parse Netplan configuration, migrated away from non-inclusive language (PR#303) and improved the overall Netplan documentation. Another change that should be noted, is that the match.macaddress stanza now only matches on PermanentMACAddress= on the systemd-networkd backend, as has been the case on the NetworkManager backend ever since (see PR#278 for background information on this slight change in behavior).

Changelog

Bug fixes:

Netplan v0.105 is now available

I’m happy to announce that Netplan version 0.105 is now available on GitHub and is soon to be deployed into an Ubuntu/Debian installation near you! Six month and exactly 100 commits after the previous version, this release is brought to you by 7 free software contributors from around the globe.

Changelog

  • Add support for VXLAN tunnels (#288), LP#1764716
  • Add support for VRF devices (#285), LP#1773522
  • Add support for InfiniBand (IPoIB) (#283), LP#1848471
  • Allow key configuration for GRE tunnels (#274), LP#1966476
  • Allow setting the regulatory domain (#281), LP#1951586
  • Documentation improvements & restructuring (#287)
  • Add meson build system (#268)
  • Add abigail ABI compatibility checker (#269)
  • Update of Fedora RPM spec (#264)
  • CI improvements (#265#282)
  • Netplan set uses the consolidated libnetplan YAML parser (#254)
  • Refactor ConfigManager to use the libnetplan YAML parser (#255)
  • New netplan_netdef_get_filepath API (#275)
  • Improve NetworkManager device management logic (#276), LP#1951653

Bug fixes

Netplan v0.104 is now available

I’m happy to announce that netplan.io version 0.104 is now available on Github and has been uploaded into the next Ubuntu LTS release, code name “Jammy”: netplan.io 0.104-0ubuntu1! This is a big release that has been brought to you by 10 contributors around the globe.

Changelog:

  • Enable embedded-switch-mode setting on SmartNICs (#253)
  • Permit multiple patterns for the driver globs in match (#202), LP#1918421
  • Improve routing capabilities (#248), LP#1892272LP#1805038
  • Support additional link offload options for networkd (#225) (#242), LP#1771740
    • receive-checksum-offloadtransmit-checksum-offloadtcp-segmentation-offload,
      tcp6-segmentation-offloadgeneric-segmentation-offloadgeneric-receive-offload,
      large-receive-offload
  • Consolidate enum-to-string arrays (#230)
  • Handle differing ip6-privacy default value for NetworkManager (#263)
  • YAML state tracking (--state rootdir) for DBus API and netplan try (#231), LP#1943120
  • Support ConfigureWithoutCarrier (ignore-carrier) for networkd (#215)
  • Move primary git branch master to main
  • Documentation improvements (#226)
  • Compatibility for glib-2.70 (#235)
  • Cleanup Makefile, install only public headers
  • Improve test reliability & enable integration testing CI for autopkgtests
  • Netplan get to use the libnetplan parser (#252)
  • libnetplan:
    • introduce the notion of NetplanState (#232)
    • use an explicit parser context (#233)
    • expose coherent generator APIs (#239)
    • improve overall error handling (#234)
    • consolidation of YAML parsing into the library (#241#249#250#251)
  • Restrict the symbol export to a determined public API (#227)
    • WARNING: We dropped some internal symbols from the API that we know
      have no external consumers (that we are aware of)
    • 0.103: _serialize_yamlcontains_netdef_typetmpvalidate_default_route_consistency
    • 0.102: cur_filenamenetplan_netdef_new
    • 0.100: address_option_handlersis_hostnamevalidate_ovs_targetwireguard_peer_handlers
    • 0.99: current_fileis_ip4_addressis_ip6_addressmissing_id,
      missing_ids_foundparser_errorvalidate_backend_rulesvalidate_netdef_grammar,
      yaml_error

Bug fixes:

  • Fix removal of defunct OVS vlan interfaces (#256), LP#1959147
  • Make ConfigManager cleanup on destruction (#259), LP#1959729
  • Do not write unvalidated YAML from keyfile (#247), LP#1952967
  • Disable temporary address generation for real with NetworkManager (#244), LP#1948027
    • this is a slight change in behavior for NM, but is in line with the docs
      and implementation of the networkd backend renderer
  • Ignore empty YAML hints and delete files on set network=null (#246), LP#1946957
  • Wait for ‘netplan try’ to be ready in DBus API (#245), LP#1949893
  • Initialize self.state in apply (#243), LP#1949104
  • Driver fallback to nl80211 and/or wext for wpa_supplicant (#240), LP#1814012
  • Handle missing gateway in keyfile routes, keep dns-search fallback (#238)
  • Make it possible to unset a whole devtype subtree (#236), LP#1942930
  • Fix normalization of multiple keys on a single dict in tests (#229)
  • Add default-routes feature flag
  • Fix memory leaks, dangling pointers & overall cleanup of API data (#228)
  • Small whitespace and formatting fixes & shipping EditorConfig (#224)

Simple EOS Dev Environment

This is a beginner’s guide, to setup a simple development environment for the EOSIO blockchain, which will get you up and running in five simple steps from zero to your first smart contract in less than 10 minutes. Afterwards, you will know how to code and test your own smart contracts on an EOS testnet quickly and for free. In this guide we make use of simple tools, which offer a great developer experience, such as the eosio.cdt (Contract Development Toolkit), the Kylin testnet and the eosc command line wallet. We’re using a development machine, running the Ubuntu 18.04 operating system.

So let’s get started!

1. Account, Keys and Tokens

The Kylin Testnet, which is run by several high class block producers, allows easy and fast access to a (non-productive) EOSIO blockchain, using it’s free Account and Faucet services. We’re going to create a new EOS account (12 character name) on the testnet, including @owner and @active keypairs and charge it up with 100 dummy EOS tokens.

Let’s call our new EOS account: dummyaccount

curl http://faucet.cryptokylin.io/create_account?dummyaccount

{
  "msg": "succeeded",
  "keys": {
    "active_key": {
      "public": "EOS7kNBssiunoW7VGcx79BXGUvjbgcaPva4azRwhuTXRfJJ192DJ2",
      "private": "5J1SYvRP1JpWBtk85a4zAbXUmAyBqtr3r58hLuDF5YX6HdcfTYo"
    },
    "owner_key": {
      "public": "EOS6nUXrdodNwRspd7Z42Yp8nRH44wuJNYYoVHSMddr28KKS6Ke4J",
      "private": "5KQzVMR9sZ8sRmRb3NQEzyW43peUow6pYLo831AAXGyEZP7h77z"
    }
  },
  "account": "dummyaccount"
}

curl http://faucet.cryptokylin.io/get_token?dummyaccount

{ "msg": "succeeded" }

Save your @owner and @active keypairs somewhere safe, you’ll need them for the next steps.

2. Wallet and CLI

Next we will download and install the eosc command line wallet, by EOS Canada, in order to interact with the EOS blockchain (currently v1.1.0). This will help us to safely store our private keys and send transactions to the blockchain.

mkdir eosc && cd eosc
curl -LO https://github.com/eoscanada/eosc/releases/download/v1.1.0/eosc_1.1.0_linux_x86_64.tar.gz
tar xzvf ./eosc_1.1.0_linux_x86_64.tar.gz

Now we can use it to import our EOS account via the @active key. This will create a file, named eosc-vault.json, which will contain your encrypted private key.

./eosc vault create --import

- Paste your @active private key from above.
  5J1SYvRP1JpWBtk85a4zAbXUmAyBqtr3r58hLuDF5YX6HdcfTYo
- Hit ENTER.
- Choose a passphrase

3. Account Setup

Here we will issue three ./eosc commands, to setup our account for the deployment of a smart contract. We delegate 20 EOS tokens as blockchain resources (5 EOS staked for NET, 15 EOS staked for CPU) and use some more EOS tokens to buy 500 KiB of RAM as storage for our smart contract. Finally, we check our account with the eosc get account command.

Hint: We need approximately 10x the bytes of RAM as is the filesize of our WASM binary contract, due to the overhead of the virtual machine. So if our compiled contract file (e.g. hello.wasm) has a filesize of 10 KiB, we need approximately 100 KiB in RAM resources on the EOSIO blockchain, to deploy the contract.

./eosc -u https://kylin.eoscanada.com system delegatebw dummyaccount dummyaccount 5 15

./eosc -u https://kylin.eoscanada.com system buyrambytes dummyaccount dummyaccount 512000

./eosc -u https://kylin.eoscanada.com get account dummyaccount
privileged:   false
created at:   2018-11-15 14:45:25 +0000 UTC

permissions:
     "owner" w/1         :  +1 EOS6nUXrdodNwRspd7Z42Yp8nRH44wuJNYYoVHSMddr28KKS6Ke4J
           "active" w/1  :  +1 EOS7kNBssiunoW7VGcx79BXGUvjbgcaPva4azRwhuTXRfJJ192DJ2

memory:
      quota:           506.8  KB   used:           3.490  KB

net bandwidth:
      staked:              5.0000  EOS    (total stake delegated from account to self)
      delegated:           1.0000  EOS    (total stake delegated to account from others)
      used:                   257  bytes
      available:            11.18  MB
      limit:                11.18  MB

cpu bandwidth:
      staked:             15.0000  EOS  (total stake delegated from account to self)
      delegated:           1.0000  EOS  (total stake delegated to account from others)
      used:                 1.129  ms
      available:            807.2  ms
      limit:                808.3  ms

EOS balances:
      liquid:             67.8553  EOS
      staked:             20.0000  EOS
      unstaking:           0.0000  EOS
      total:              87.8553  EOS

voted for:
      

voter info:
      proxy:                
      is proxy:             false
      staked:               200000
      vote weight:          0.000000
      proxied vote weight:  0.000000

4. Contract Development Toolkit

Download and install the latest version of eosio.cdt (currently v1.4.1). This will give you access to the smart contract WASM and ABI compilers/generators, as well as to the eosio C/C++ libraries and header files. Get it at: https://github.com/EOSIO/eosio.cdt/releases

curl -LO https://github.com/EOSIO/eosio.cdt/releases/download/v1.4.1/eosio.cdt-1.4.1.x86_64.deb
sudo dpkg -i ./eosio.cdt-1.4.1.x86_64.deb

5. Compile and Deploy a Smart Contract

Let’s create a simple “Hello World” smart contract, by creating a file with the following contents, named hello.cpp:

#include <eosiolib/eosio.hpp>
#include <eosiolib/print.hpp>

using namespace eosio;

CONTRACT hello : public contract {
  public:
      using contract::contract;

      ACTION hi( name user ) {
         print( "Hello, ", name{user});
      }

      ACTION yo( name user ) {
         print( "Yo, ", name{user});
      }
};
EOSIO_DISPATCH( hello, (hi)(yo) )

This C++ file can now be compiled and deployed to the EOS blockchain, using the eosio.cdt Contract Development Toolkit. After compilation we will get a binary WASM file hello.wasm of about 2.3 KiB (needs ~23 KiB of eosio RAM) and a file named hello.abi, which describes the interface of our code’s actions.

eosio-cpp -o hello.wasm hello.cpp --abigen

./eosc -u https://kylin.eoscanada.com system setcontract dummyaccount ./hello.wasm ./hello.abi

./eosc -u https://kylin.eoscanada.com tx create dummyaccount yo '{"user":"bob"}' -p dummyaccount

Congratulations!

After finishing the five simple steps above, you can now officially call yourself a “Blockchain Expert”. 😉

Feel free to experiment with the above mentioned tools, keep on improving your EOSIO knowledge with help of the hyperlinks I put into the article and continue to develop you very own EOS smart contracts!

If you liked this tutorial, please consider a donation to my EOS account: teammaerdian

Freifunk mit Ubiquiti UniFi AP

Freifunk.net

Inhalt

Was ist Freifunk.net?

Die Initiative Freifunk.net ist ein nicht-komerzielles, gemeinschaftliches Projekt vieler Freiwilliger, die sich zum Ziel gesetzt haben ein unabhängiges und dezentrales WLAN-Netzwerk aufzubauen, welches von Jederman frei zugänglich, unzensiert und anonym verwendet werden kann und außerdem die Netzneutralität wahrt. Die Initiative ist dabei in lokalen Freifunk-Communities organisiert, welche in jeder größeren und kleineren Stadt anzutreffen sind.

Das Freifunk-Netz erstreckt sich bereits über ganz Deutschland und wächst mit jedem Unterstützer ein Stückchen weiter. Ob auch in deiner Nähe schon ein Freifunk-Zugangspunkt ist, über den du ohne Anmeldung einen freien Internet-Zugang bekommen kannst, erfährst du auf der Freifunk-Karte!

Mitmachen darf jeder! Zum Unterstützen der Idee tritt man am besten mit seiner lokalen Freifunk-Community in Kontakt. Dort kann man sich informieren und austauschen und im Regelfall auch einen eigenen, vorkonfigurierten Freifunk-Router ab 20€ beziehen. Schau also einfach vorbei, z.B. bei Freifunk-München!

Freifunk verbindet!

Freifunk Technik

Freifunk ist als Mesh-Netzwerk konzipiert. Das bedeutet, dass sich benachbarte Freifunk-Router (Knoten) automatisch miteinander verbinden. Netzwerk-Pakete werden dann auf ihrem Weg vom Benutzer (z.B. Smartphone) von Knoten zu Knoten weitergeleitet bis sie ihr Ziel (z.B. Wikipedia) erreichen. Um auch in Situationen in denen keine benachbarten Freifunk-Knoten in Reichweite sind einen Zugang zum Freifunk-Netz zu bekommen, betreiben die Freifunk Communities VPN-Gateways. Isolierte Knoten können so über den privaten Internetzugang des Knoten-Betreibers eine verschlüsselte VPN-Verbindung zum restlichen Freifunk-Netz herstellen. Vom VPN-Gateway aus kann – über eine Verbindung ins Ausland – auch das Internet erreicht werden. Auf diese Weise wird geschickt das rechtliche Problem der deutschen Störerhaftung umgangen.

Auf Freifunk-Routern läuft eine speziell angepasste Version der freien OpenWrt Firmware, namens Gluon. Gluon stellt dabei eine stark vereinfachte Web-Oberfläche bereit, welche zum Einrichten und Konfigurieren eines Freifunk-Knotens verwendet werden kann. Außerdem enthält Gluon einen Autoupdater, welcher den eigenen Freifunk-Knoten immer automatisch auf den aktuellen Softwarestand updatet. Für erfahrene Benutzer gibt es zusätzlich die Möglichkeit sich per SSH auf dem Router einzuloggen, um den vollen Funktionsumfang von OpenWrt auszunutzen.

Unterstützte Hardware

Durch die OpenWrt Basis der Freifunk Firmware “Gluon” gibt es eine breite Auswahl an unterstützen Routern. Zu den geläufigsten Modellen zählen Router der Firmen TP-Link und Ubiquiti Networks. Welche Router im einzelnen unterstützt werden erfährt man auf der Website der lokalen Freifunk-Community. Wegen eines sehr guten Preis-Leistungs-Verhältnisses (Preis < 20€) erfreut sich der Router “TP-Link TL-WR841N” zur Zeit sehr großer Beliebtheit.

Ubnt UniFi APIch habe mich für meinen ersten Freifunk-Knoten für das Modell “Ubiquiti UniFi AP Long Range” (Ubnt UAP-LR) entschieden. Dieser bietet eine sehr gute Reichweite von bis zu 180m, eine leichte Verkabelung dank Stromversorgung über das Netzwerkkabel und wird offiziell von meiner Freifunk-Community (Freifunk-München) unterstützt. Die Freifunk Installation und Konfiguration dieses Routers möchte ich im folgenden exemplarisch für “Freifunk-München” erläutern.

UniFi Router flashen

Nach dem Auspacken und Anschließen des UniFi AP ans lokale Heim-Netzwerk bekommt dieser per DHCP automatisch eine IP-Adresse zugewiesen (<UAP-IP>), welche in der Web-Oberfläche des privaten Internet-Routers (z.B. FritzBox) nachgeschaut werden kann. Mit einem Linux-Computer erfolgt die Installation der Freifunk Firmware (Gluon) auf dem UniFi AP danach in 3 einfachen Schritten:

  1. Via SSH in die original Software des UAP einloggen:
    ssh ubnt@<UAP-IP> #(Passwort: ubnt)
  2. UniFi Factory-Firmware der lokalen Freifunk-Community ins /tmp Verzeichnis des Routers downloaden, z.B.:
    cd /tmp
    wget http://firmware.ffmuc.net/stable/factory/gluon-ffmuc-v2015.2-ubiquiti-unifi.bin
  3. Freifunk-Firmware auf den Router flashen:
    fwupdate.real -m gluon-ffmuc-v2015.2-ubiquiti-unifi.bin -d

Nachdem das Kommando ‘fwupdate.real’ erfolgreich ausgeführt wurde, gibt es das Wort “Done” aus und der Router kann vom Strom-/Netzwerkkabel und vom Heim-Netzwerk (am PoE-Adapter) getrennt werden. (Quelle)

UniFi Router konfigurieren

Anstelle vom Heim-Netzwerk (z.B. FritzBox) sollte der Router jetzt direkt mit dem eigenen Computer verbunden werden. Nachdem das Strom-/Netzwerkkabel wieder angesteckt wurde startet der UniFi AP die neu installierte Freifunk-Firmware im Setup/Config-Mode. Alternativ erreicht man den Config-Mode durch drücken der Reset-Taste für ca. 3 Sekunden. Den Config-Mode kann man daran erkennen, dass die grüne LED des Routers blinkt (ca. 1x pro Sekunde).

Gluon Web UIIm Config-Mode hat der UAP die IP-Adresse 192.168.1.1 und betreibt einen DHCP-Server, so dass der eigene Computer automatisch eine IP-Adresse aus dem Bereich 192.168.1.x/24 zugewiesen bekommen sollte. Alternativ kann dem eigenen Computer auch manuell eine IP-Adresse aus diesem Bereich gegeben werden (z.B. 192.168.1.100). Steht die Verbindung zwischen Computer und Router, kann die Gluon Web-Oberfläche auf http://192.168.1.1 erreicht werden.

Die Gluon Web-Oberfläche stellt verschiedene Felder zum Konfigurieren des Knoten bereit (Name, Kontakt, Geo-Koordinaten, Bandbreitenlimitierung, …) und ist weitgehend selbsterklärend. Nach abschließen der Konfiguration muss der Router nochmals neu gestartet werden. Auch kann er nun wieder mit dem lokalen Heim-Netzwerk verbunden werden, so dass er ggf. übers Internet eine Verbindung zum Freifunk-VPN-Gateway herstellen kann. Der Router startet nun in den Normal-Mode: Die grüne LED leuchtet dauerhaft.

Für erfahrene Benutzer gibt es zusätzlich zum Normal-Mode und Config-Mode auch noch den Failsafe-Mode. Dieser kann erreicht werden wenn im Bootvorgang des Routers mehrfach die Reset-Taste gedrückt wird. Im Failsafe-Mode blinkt die grüne LED sehr schnell (schneller als 1x pro Sekunde). In diesem Modus sind alle Services deaktiviert und der Router ist nur per Telnet/SSH auf 192.168.1.1 zu erreichen.
(Quelle 1, Quelle 2, Quelle 3)

Viel Spaß mit eurem eigenen Freifunk-Knoten!

GTA04 booting SHR in 17 seconds

Video

This video shows the Openmoko/Goldelico GTA04 booting SHR Linux in 17 seconds.
Note: SHR is not yet optimized for a fast bootup on the GTA04.

Got interrested?

If you’re interrested to participate in this open hardware and free and open source software effort, please jump in:
Get your GTA04 now by participating in the GTA04 Group Buy Tour.

Get more information at: www.gta04.org

Creative Commons Lizenzvertrag