Changes in getlino


Fixed a bug in getlino startsite when writing the file.


Fixed #5530 (getlino startsite says Error: Invalid front_end name ‘None’). Optimize output of getlino list. Replace python-dev by python3-dev to fix “Package ‘python-dev’ has no installation candidate”


Fixed a bug that caused getlino configure --clone to reinstall itself, which later caused “jinja2.exceptions.TemplateNotFound:”.


Add a default server section to nginx.conf to avoid Invalid HTTP_HOST header.


Release to PyPI.


Removed the branch option from getlino config. Getlino is now branch-agnostic: it always uses the default branch of a repository.


getlino.utils.Installer.write_file() now creates the directory if needed.


When running as root, getlino now stores its configuration file in the virtual environment and no longer under /etc/getlino/getlino.conf. The /etc/getlino/getlino.conf may theoretically still get used when getlino is installed without any virtualenv into the system Python (which currently is not recommended but might make sense when Lino becomes a Debian package). After upgrading you should manually run:

# mv /etc/getlino/getlino.conf $VIRTUAL_ENV/.getlino.conf


Release to PyPI.


Fixed #4722. The script generated by getlino startsite now also updates the internal dependencies (rstgen, lino, xl and –for some apps– welfare).


getlino now uses async consumers instead of running a separate linod process. Cheat sheet for the upgrade:

  • re-run getlino startsite on each production site

  • remove the supervisor conf files for the linod processes.


getlino startsite no longer creates a database and a db user when a exists. When run for an existing site, it now “reinstalls” only what’s missing.

Release to PyPI.

Fix some typo bugs and other optimizations after using getlino startsite on the field.

Release to PyPI.


getlino list now supports site features without description.

Release to PyPI.


Release to PyPI, which fixes multiple minor bugs. For example (excerpt from git log): add GitPython to requirements, fix missing app sections in apps.rst, add avanti and polly to tested_applications, activate make_help_pages by default after startsite, explicitly specify db_engine, (…)

Fixed 2 bugs reported after the release: getlino startsite created a file with empty --db-port. It also refused to proceed when not running as root (and when the site wanted mysql or postgresql as --db-engine).


New command getlino startproject.

Release to PyPI


getlino configure was saying error “Unable to locate package libreoffice-headless”. Yes indeed, there is no such package in buster, we must install libreoffice-common instead.

Release to PyPI.


Fixed #4218 (getlino says AttributeError: ‘list’ object has no attribute ‘add’).

Release to PyPI.


Added a new command getlino list.


Updated the KNOWN_REPOS in getlino.utils: the following repositories have moved to GitLab: lino, xl, noi, cosi, voga, avanti, welfare, weleup, welcht


You can now run getlino configure as root with --clone and without --shared-env, provided that you activated a virtualenv before calling getlino. In that case getlino will install clones into the current virtualenv and store the current virtualenv in the system-wide config file. Miscellaneous optimizations and bugfixes when setting up a demo server.

Release to PYPI.

More minor bugfixes: wasn’t set to executable. configure failed when –https was given but no –web-server


getlino forgot to run sudo ln -s /snap/bin/certbot /usr/bin/certbot when installing certbot.


When –https is specified but certbot is not installed, getlino now installs it using snapd (no longer using wget and apt-get)


Release 21.3.0 to PyPI.


Optimization: When getlino asks to change file permissions, it now formats them as “rwx” style strings instead of decimal integers.


Fixed #3998 (getlino says Invalid value for ‘–web-server’: invalid choice: . (choose from nginx, apache)). Reactivated UbuntuDockerTest in test suite. getlino now upgrades the system not only when you are root but also when you are member of sudo. It no longer asks “Upgrade the system?” as a separate question, only when it actually wants to install packages (and when you are either root or sudoer).


Fixed a bug in the generated file: it was testing if [-f media/uploads] instead of if [-d media/uploads], as a result the uploads were never included in the snapshot.


Fixed a problem when using apache config: certbot made a copy of the 80 conf file, but failed to copy the WSGI* directives. Now getlino creates a 443 site with snakeoil certificate already from the beginning. Added uploads to

Released version 21.2.1 to PyPI.


Changed the number of nginx worker processes in the uwsgi.ini script from 2 to 1 as every worker process immobilizes about 5 to 6% of 2GB of RAM even when nobody is using the site.

Added support for apache web server. Until now, getlino always installed nginx (when running as root). Now getlino configure has a new option –web-server, which can be “nginx”, “apache” or empty. Changed behaviour: When not given, getlino will not setup any web server configuration, even when running as root.

The test suite now also tests for “ERROR” (not just “Error”) in the output of Increased the wait time for supervisor to restart from 10 to 20 seconds because with only 10 seconds it failed once.

Released version 21.2.0 to PyPI.


Fixed several minor bugs in getlino startsite: Fixed a typo bug that caused --https to fail at the last step (when calling certbot for the new subdomain). Some config files were generated with a leading newline, and the make_snapshot cron job even with leading blanks on every line. The nginx.conf file was still pointing /static/ to a directory static, but the new default name for this is static_root.


getlino configure now again installs (or instructs to install) apt packages libldap2-dev and libsasl2-dev, which are –as it seems– required for django_auth_ldap.


When invoking getlino configure without sudo, it no longer asks for –usergroup.

Released getlino 20.9.0 to PyPI.


getlino can now install certbot either using the Debian packager or using certbot-auto. getlino now supports calling Installer.run_apt_install() more than once during an installation session.


getlino startsite has now the database options (db-engine, db-user etc) so that you can override them per site without needing to run getlino configure. Added a new choice lino.projects.std for the APPNAME argument of getlino startsite. Fixed a warning bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8) during test run.


Released getlino 20.7.5 to PyPI. With a few bugfixes.


Released getlino 20.7.3 to PyPI. After some subtle changes.

Released getlino 20.7.4 to PyPI. After some more subtle changes.


Released getlino 20.7.2 to PyPI.


getlino failed on Python 3.8 because it was using the deprecated platform.dist. Now it uses distro.

getlino now shows its version.

Released getlino 20.7.1 to PyPI.

local-prefix was root_only, which caused configure to fail when not run as root.


getlino failed on Windows because the grp module is not available there. Now we simply skip the group ownership check when running on Windows.

Reorganized the Docker files.

Released getlino 20.7.0 to PyPI.


getlino startsite now creates a daily cron job that runs


Remove useless command to copy “mysql_config” file for MariaDB.


Bugfix : getlino configure without –clone, the –shared-env now defaults to an empty string.


getlino configure now defaults --shared-env to the current VIRTUAL_ENV only when --clone was given, not always. And it creates the repos_base only then.


Fix typo with apt_packages of DbEngine. Release 20.4.5 version to PyPI.


Remove certbot for www domain Release 20.4.3 version to PyPI.


Update the virualenv usage. Fix issue with installing mariadb for debian distribution instead of mysql


Add the ciao projet to KNOWN_REPOS. Add ‘sudo’ to the certbot command.

Fix some issues with creating user and database with the getlino startsite .

Released version 20.1 to PyPI Released version 20.1.1 to PyPI

No need for ‘sudo’ for certbot command

Released version 20.1.2 to PyPI


When the user is not root , the getlino startsite command doesn’t create the and the directory nginx.


The script generated by getlino configure into the shared virtualenv was still using the project_dir.


The --https option was appending directly to the main /etc/crontab file. Fixed.

Fixed some minor bugs. For example the --redis option was ignored when not running as root.

Released 19.11.0 to PyPI.


getlino configure --db-user option now creates the shared database user. The items of getlino.utils.DB_ENGINES are no longer named tuples but real objects with methods.


getlino no longer depends on cookiecutter. The separate cookiecutter-startsite repository is no longer used because all templates are now below getlino/templates.

Released version 19.10.6 to PyPI (versions 19.10.3 to 19.10.5 are broken versions, don’t use them).


Released version 19.10.0 to PyPI.

Fixed some bugs: Running getlino configure without --db-port caused an error Invalid value for "--db-port": invalid choice: . (choose from 5432, 3306, 0). The --db-port option is no longer a choice (it is not limited to these values). The --clone option sometimes had True as default value when it shouldn’t.

Released version 19.10.1 to PyPI.

Found another bug: with --clone, getlino didn’t clone the repositories using their nickname, which later caused failures when trying to install them.

Released version 19.10.2 to PyPI.

Fixed some more bugs: Running getlino configure without --db-port caused an error Invalid value for "--db-port": invalid choice: . (choose from 5432, 3306, 0). The --db-port option is not a choice (it must not limited to these values). The --clone option sometimes had True as default value.


The --db-port shows the default ports of databases.


The --clone option installs all contributor repositories, i.e. those required to build the book. Some repositories were still missing. Fixed. Also separated the sequence of resulting actions: first run “git clone” for all repos, then “pip install -e”.


Optimized behaviour when running as non-root: The default value for --devtools is now True in that case. --db-engine had a wrong default value “sqlite” (must be “sqlite3”), getlino tried to create the directories given by --log-base and --backups-base (which failed because not running as root).


When running as root, getlino configure now also creates empty directories for --log-base and --backups-base and sets their permissions.


When running as root, getlino now also installs the build-essential Debian package because this is maybe needed for installing Python extensions.

getlino didn’t set the group owner in some cases (e.g. the lino_local directory and a project’s virtualenv).

getlino configure now also creates a ~/.bash_aliases file. But only when you aren’t running as root. After running getlino configure as root, you may want to run it once more without being root to create a .bash_aliases file to your home directory.

Released getlino 19.9.6 to PyPI, immediately followed by a bug-fix release 19.9.7


Added more demo projects to be used by the getlino configure command. Released getlino 19.9.5.


Renamed the --contrib option to --clone because it is also used when configuring a demo server. It means “clone all known repositories to the –repos-base and install them to the shared-env using pip -e.” This change requires that you run getlino configure once after upgrade, or manually edit your getlino config file.

The configure command now supports --clone without specifying a –repos-base. In that case it uses the repositories subdir of the shared-env.

New option --shared-env for startsite. When used with startsite, it overrides the value specified during configure.

Released getlino 19.9.4 on PyPI.


Released getlino 19.9.2 on PyPI, followed by a bugfix release 19.9.3.


Also write logrotate config file for supervisor.

Changed some default values in getlino configure: The default value for --clone was wrong : when running as root, it is not a contributor environment. --shared-env and --repos-base are now empty when VIRTUAL_ENV is not set. And --db-engine is now mysql when running as root.

Released getlino 19.9.0 to PyPI, followed by a bugfix release 19.9.1.


Released getlino 19.8.1 on PyPI.


Released getlino 19.8.0 on PyPI.


Added a first meaningful unit test (test_docker_prod).