<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Development on ISG Blog · D-MATH</title><link>https://isg-blog.math.ethz.ch/tags/development/</link><description>Recent content in Development on ISG Blog · D-MATH</description><generator>Hugo</generator><language>en-gb</language><lastBuildDate>Thu, 25 Jun 2026 21:29:22 +0200</lastBuildDate><atom:link href="https://isg-blog.math.ethz.ch/tags/development/index.xml" rel="self" type="application/rss+xml"/><item><title>Moodle Development Environment</title><link>https://isg-blog.math.ethz.ch/posts/moodle-development-environment/</link><pubDate>Thu, 20 Jun 2024 14:25:07 +0200</pubDate><guid>https://isg-blog.math.ethz.ch/posts/moodle-development-environment/</guid><description>&lt;h2 id="develop-moodle"&gt;Develop moodle&lt;/h2&gt;
&lt;p&gt;Resources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/moodlehq/moodle-docker"&gt;https://github.com/moodlehq/moodle-docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/moodlehq"&gt;https://github.com/moodlehq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hub.docker.com/r/moodlehq/moodle-php-apache"&gt;https://hub.docker.com/r/moodlehq/moodle-php-apache&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The following setup can be used to set up a moodle development environment, with rootless podman:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# D-MATH link podman-compose&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ln -s /usr/bin/podman-compose ~/bin/docker-compose
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# D-MATH clone moodle-docker repo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone https://github.com/moodlehq/moodle-docker.git
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd moodle-docker
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# D-MATH set variables&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export MOODLE_DOCKER_DB_PORT&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;15432&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export MOODLE_DOCKER_APP_VERSION&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;18080&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export MOODLE_DOCKER_SELENIUM_VNC_PORT&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;15900&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export MOODLE_DOCKER_WEB_PORT&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;18000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Change ./moodle to your /path/to/moodle if you already have it checked out&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export MOODLE_DOCKER_WWWROOT&lt;span style="color:#f92672"&gt;=&lt;/span&gt;./moodle
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# D-MATH add custom configuration&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat &lt;span style="color:#e6db74"&gt;&amp;lt;&amp;lt;EOF &amp;gt; local.yml
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;services:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; webserver:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; volumes:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; - &amp;#34;${MOODLE_DOCKER_WWWROOT}/../moodledata:/var/www/moodledata&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; db:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; environment:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; PGDATA: /var/lib/postgresql/data/pgdata
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; volumes:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; - &amp;#34;${MOODLE_DOCKER_WWWROOT}/../database:/var/lib/postgresql/data&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Choose a db server (Currently supported: pgsql, mariadb, mysql, mssql, oracle)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export MOODLE_DOCKER_DB&lt;span style="color:#f92672"&gt;=&lt;/span&gt;pgsql
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# D-MATH creating files with group access for moodle code&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;umask &lt;span style="color:#ae81ff"&gt;007&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Get Moodle code, you could select another version branch (skip this if you already got the code)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone -b MOODLE_404_STABLE git://git.moodle.org/moodle.git $MOODLE_DOCKER_WWWROOT
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# D-MATH add folder for moodle data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir moodledata
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir database
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# D-MATH setgid for automatic setting group permission&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;chmod &lt;span style="color:#ae81ff"&gt;2770&lt;/span&gt; moodle
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;chmod &lt;span style="color:#ae81ff"&gt;2770&lt;/span&gt; moodledata
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;chmod &lt;span style="color:#ae81ff"&gt;2770&lt;/span&gt; database
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Ensure customized config.php for the Docker containers is in place&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cp config.docker-template.php $MOODLE_DOCKER_WWWROOT/config.php
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# D-MATH set the permission to 33 inside the container for moodle code&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman unshare chown &lt;span style="color:#ae81ff"&gt;33&lt;/span&gt; -R moodle
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman unshare chown &lt;span style="color:#ae81ff"&gt;33&lt;/span&gt; -R moodledata
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman unshare chown &lt;span style="color:#ae81ff"&gt;999&lt;/span&gt; -R database
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Start up containers, choose docker.io to download the images&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;bin/moodle-docker-compose up -d
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Shut down and destroy containers&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#bin/moodle-docker-compose down&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Above we set the webserver port to &lt;code&gt;18000&lt;/code&gt; so this means you now need to connect to http://localhost:18000 in your browser to see the application.&lt;/p&gt;</description></item><item><title>Build Automation with GitLab Pipelines</title><link>https://isg-blog.math.ethz.ch/posts/build-automation-with-gitlab-pipelines/</link><pubDate>Wed, 03 Apr 2024 07:58:15 +0200</pubDate><guid>https://isg-blog.math.ethz.ch/posts/build-automation-with-gitlab-pipelines/</guid><description>&lt;p&gt;Do you still recompile and run your program (and ideally your tests) after every change, like developers did 20 years ago? Do your teammates still bother you about your specific setup that is needed to compile/run your projects? Well, then we’ve got some news for you!&lt;/p&gt;
&lt;p&gt;We’ve set up GitLab Instance Runners on our central computing servers, so that people can run their build automation on powerful, independent machines. All managed and fully integrated on our &lt;a href="https://gitlab.math.ethz.ch"&gt;GitLab Server&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>minikube (Kubernetes Development)</title><link>https://isg-blog.math.ethz.ch/posts/minikube-kubernetes-development/</link><pubDate>Tue, 31 Oct 2023 12:07:58 +0100</pubDate><guid>https://isg-blog.math.ethz.ch/posts/minikube-kubernetes-development/</guid><description>&lt;p&gt;If you want to develop something for kubernetes, you may need to run minikube. This can be done on our linux installations. The following commands should start a working “kubernetes cluster” on your installation:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir ~/bin/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wget https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 -O ~/bin/minikube
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;chmod &lt;span style="color:#ae81ff"&gt;755&lt;/span&gt; ~/bin/minikube
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd ~/bin/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;./minikube config set rootless true
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;./minikube config set driver podman
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;./minikube config set container-runtime containerd
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;./minikube start --cni calico
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After minikube has started, you can check all running pods with the following:&lt;/p&gt;</description></item><item><title>Howto use docker at D-MATH</title><link>https://isg-blog.math.ethz.ch/posts/howto-use-docker-at-d-math/</link><pubDate>Wed, 17 May 2023 10:31:22 +0200</pubDate><guid>https://isg-blog.math.ethz.ch/posts/howto-use-docker-at-d-math/</guid><description>&lt;p&gt;To use docker at D-MATH is to use podman -&amp;gt; &lt;a href="https://podman.io/"&gt;https://podman.io/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;With podman you can use all docker commands just write podman instead of docker in the command, all the parameters stay the same.&lt;/p&gt;
&lt;p&gt;With podman we are able to provide a possibility that a user without administrative rights can download and run docker images.&lt;/p&gt;
&lt;h4 id="example-1"&gt;Example 1&lt;/h4&gt;
&lt;p&gt;The following example will run the latest docker image of alpine linux (&lt;a href="https://hub.docker.com/_/alpine"&gt;https://hub.docker.com/_/alpine&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;code&gt;podman run -ti -v $(pwd):/home/test alpine:latest&lt;/code&gt;&lt;/p&gt;</description></item></channel></rss>