archlinux / archweb

Arch Linux website code
https://archlinux.org
GNU General Public License v2.0
309 stars 126 forks source link
archlinux django python website

Archweb README

Build Status

To get a pretty version of this document, run

$ markdown README > README.html

License

See LICENSE file.

Authors

See AUTHORS file.

Dependencies

Python dependencies

More detail in requirements.txt and requirements_prod.txt; it is best to use virtualenv and pip to handle these. But if you insist on (Arch Linux) packages, you will probably want the following:

Testing Installation

  1. Run python -m venv env.

    cd /path/to/archweb && python -m venv ./env/
  2. Activate the virtualenv.

    source ./env/bin/activate
  3. Install dependencies through pip.

    pip install -r requirements.txt
  4. Copy local_settings.py.example to local_settings.py and modify. Make sure to uncomment the appropriate database section (either sqlite or PostgreSQL).

  5. Migrate changes.

    ./manage.py migrate
  6. Load the fixtures to pre populate some data. If you don't want some of the provided data, adjust the file glob accordingly.

    ./manage.py loaddata main/fixtures/*.json
    ./manage.py loaddata devel/fixtures/*.json
    ./manage.py loaddata mirrors/fixtures/*.json
    ./manage.py loaddata releng/fixtures/*.json
  7. Use the following commands to start a service instance

    ./manage.py runserver
  8. To optionally populate the database with real data:

    wget http://mirrors.kernel.org/archlinux/core/os/x86_64/core.db.tar.gz
    ./manage.py reporead x86_64 core.db.tar.gz
    # Package file listing
    wget http://mirrors.kernel.org/archlinux/core/os/x86_64/core.files.tar.gz
    ./manage.py reporead --filesonly x86_64 core.files.tar.gz

Alter architecture and repo to get x86_64 and packages from other repos if needed.

  1. Database Updates for Added/Removed packages

    sqlite3 archweb.db < packages/sql/update.sqlite3.sql

For PostgreSQL use packages/sql/update.postgresql_psycopg2.sql

Testing SMTP server

To be able to create an account on your test environment an SMTP server is required. A simple debugging SMTP server can be setup using Python and aiosmtpd.

Install aiosmtpd

    pip install aiosmtpd

Run the server

    python -m aiosmtpd -n -l localhost:1025

In local_settings.py add entries to set EMAIL_HOST to 'localhost' and EMAIL_PORT to 1025.

Running tests and coverage

Install the test dependencies:

    pip install -r requirements_test.txt

To the unittests execute the following commands:

    make collectstatic
    make test

Running coverage:

    make coverage
    make open-coverage

Django Debug toolbar

To use the Django Debug toolbar install django-debug-toolbar and in local_settings.py set DEBUG_TOOLBAR to True.

Management commands

Archweb provides multiple management commands for importing various sorts of data. An overview of commands:

Updating iPXE images

The binaries required for iPXE based netboot are updated by copying them from the ipxe package to the static content directory (with the run_ipxe script the binaries may be tested beforehand):

cp -v /usr/share/ipxe/x86_64/ipxe-arch.efi /usr/share/ipxe/ipxe-arch.{ipxe,lkrn} sitestatic/releng

Afterwards a detached PGP signature using a valid WKD enabled packager key is created for each file:

for artifact in sitestatic/netboot/*.{efi,pxe,lkrn}; do
  gpg --sender "User Name <your@mail.address>" --detach-sign "$artifact"
done

Production Installation

Arch Linux has an Ansible role for Archweb in their infrastructure repo.

vim: set syntax=markdown et: