2015-04-22 21:36:33 -04:00
---
layout: doc
2015-10-13 23:31:03 -04:00
title: Archlinux Template
2015-10-28 18:14:40 -04:00
permalink: /doc/templates/archlinux/
2015-10-11 03:04:59 -04:00
redirect_from:
2016-05-21 10:49:01 -04:00
- /doc/archlinux/
2015-10-28 18:14:40 -04:00
- /en/doc/templates/archlinux/
2015-10-11 03:04:59 -04:00
- /doc/Templates/Archlinux/
- /wiki/Templates/Archlinux/
2015-04-22 21:36:33 -04:00
---
2017-02-03 06:02:43 -05:00
# Archlinux Template
2015-04-22 21:36:33 -04:00
Archlinux template is one of the templates made by Qubes community. It should
be considered experimental as Qubes developers team use mainly Fedora-based VMs
to test new features/updates.
Main maintainer of this template is [Olivier Médoc ](mailto:o_medoc@yahoo.fr ).
2015-04-23 10:14:55 -04:00
2017-01-19 15:36:55 -05:00
Updates for this template are provided by [Olivier Médoc ](mailto:o_medoc@yahoo.fr ) and are signed by the following key:
2016-02-08 19:04:55 -05:00
2017-01-19 15:36:55 -05:00
pub 2048R/2043E7ACC1833B9C 2014-03-27 [expires: 2018-03-29]
Key fingerprint = D85E E12F 9678 51CC F433 515A 2043 E7AC C183 3B9C
uid Olivier MEDOC (Qubes-OS signing key) < o_medoc @ yahoo . fr >
2016-02-08 19:04:55 -05:00
2017-02-03 06:02:43 -05:00
## Installation
A prebuilt template is available only for Qubes 3.2. Before Qubes 3.2, it should be compiled from source as described in [building-archlinux-template ](/doc/building-archlinux-template/ ).
[user@dom0 ~]$ sudo qubes-dom0-update --enablerepo=qubes-templates-community qubes-template-archlinux
## Binary packages activation
2017-01-29 11:15:53 -05:00
The update repository is disabled when you install (signed) template package. You can however choose to trust it by registering it into pacman.
Enable the repository by running the following command:
# mv /etc/pacman.d/99-qubes-repository-3.2.disabled /etc/pacman.d/99-qubes-repository-3.2.conf
2017-02-03 06:02:43 -05:00
Then you need to install and sign the public GPG key of the package maintainer (note that accessing to GPG servers requires to temporarily disable the firewall in your template):
2016-02-08 19:04:55 -05:00
2017-01-19 15:36:55 -05:00
# pacman-key --recv-key 2043E7ACC1833B9C
# pacman-key --finger 2043E7ACC1833B9C
If the fingerprint is correct, you can then sign the key:
2016-02-08 19:04:55 -05:00
2017-01-19 15:36:55 -05:00
# pacman-key --lsign-key 2043E7ACC1833B9C
2016-02-08 19:04:55 -05:00
2017-02-03 06:02:43 -05:00
## Default packages
2016-02-08 19:04:55 -05:00
2017-02-03 06:02:43 -05:00
In order to keep the template as small and simple as possible, default installed package have been arbitrarily selected based on multiple subjective criterias that however essentially include libraries dependencies. This packages are:
* Some font packages to keep good user experience
* leafpad: a note pad
* xfce4-terminal: a terminal
* thunar: a file browser that support mounting usb keys
* firefox: web browser
* thunderbird: a mail browser
* evince: a document viewer
2016-02-08 19:04:55 -05:00
2017-02-03 06:02:43 -05:00
Note that Archlinux does not install GUI packages by default as this decision is left to users. This packages have only been selected to have a usable template.
2016-02-08 19:04:55 -05:00
2017-02-03 15:03:18 -05:00
## Updating a Qubes-3.1 Archlinux Template
If you decide to use binary packages but that you where using a Qubes-3.1 Template, your can follow these instructions to enable Qubes 3.2 agents.
2017-02-03 15:07:19 -05:00
You can use a template that you built for Qubes 3.1 in Qubes 3.2. The qrexec and gui agent functionnalities should still be working so that you can at least open a terminal.
2017-02-03 15:03:18 -05:00
In order to enable binary packages for Qubes 3.2, add the following lines to the end of /etc/pacman.conf
```
[qubes-r3.2]
Server = http://olivier.medoc.free.fr/archlinux/current/
```
You should then follow the instruction related to pacman-key in order to sign the binary packages PGP key. With the key enabled, a pacman update will update qubes agents:
2017-02-03 15:07:19 -05:00
` # pacman -Suy `
2017-02-03 15:03:18 -05:00
2017-02-03 15:07:19 -05:00
The two line that have just been added to /etc/pacman.conf should then be removed as they have been included in the qubes-vm-core update in the file `/etc/pacmand.d/99-qubes-repository-3.2.conf`
2017-02-03 15:03:18 -05:00
2017-02-03 06:02:43 -05:00
## Known Issues
2016-02-08 19:04:55 -05:00
2017-02-03 06:02:43 -05:00
### Package cannot be updated because of errors related to xorg-server or pulseaudio versions
2017-01-29 11:15:53 -05:00
In case archlinux upgrade pulseaudio major version or xorg-server version, updating these packages will break the qubes GUI agent. To avoid breaking things, the update is blocked until a new version of the GUI agent is available.
In this case, the gui-agent-linux component of Qubes-OS needs to be rebuild using these last xorg-server or pulseaudio libraries. You can try to rebuilt it yourself or wait for a new qubes-vm-gui package to be available.
2017-02-03 15:03:18 -05:00
### qubes-vm is apparently starting properly (green dot) however graphical applications do not appears to work
2017-02-03 15:07:19 -05:00
They are multiple potential reasons. Some of them are described in the following issues:
2017-02-03 15:03:18 -05:00
* https://github.com/QubesOS/qubes-issues/issues/2612
2017-02-03 15:07:19 -05:00
In issue 2612, check that the option `noauto` is present for all lines in /etc/fstab related to /rw or /home. This bug can appears if you come from an old Archlinux Template (pre February 2017).
2017-02-03 15:03:18 -05:00
## Debugging a broken VM
In order to identify the issue, you should start by getting a console access to the VM:
* Either by running in dom0 `qvm-run --pass-io --nogui yourbrokenvm 'your command here'`
* Or by running in dom0 `sudo xl console yourbrokenvm`
Starts by trying to run a GUI application such as xfce4-terminal in order to identify any error message.
Then you can check potential broken systemd service by running the following command inside the broken vm: `systemctl | grep fail` .
If you identified a broken service check `journalctl -la -u yourbrokenservice` . If not check `journalctl -b` for errors.
Finally, errors related to the GUI agent can be found inside the VM in `/home/user/.xsession-errors`
2017-02-03 06:02:43 -05:00
## Packages manager wrapper
2016-02-08 19:04:55 -05:00
2016-02-21 13:07:55 -05:00
Powerpill is a full Pacman wrapper that not only give easy proxy configuration but further offers numerous other advantages.
2016-02-08 19:04:55 -05:00
Please check out:
[Archlinux Powerpill ](https://wiki.archlinux.org/index.php/powerpill )
[XYNE's (dev) Powerpill ](http://xyne.archlinux.ca/projects/powerpill/ )
2017-01-19 15:36:55 -05:00
**Important Note:** As you are working in a template vm, by default, you will have to open network access to the template to download files manually, except for package managed which should be handled by the Qubes proxy. You can use the "allow full access for" a given time period in the FW settings of the template in the VMM or open up the various services through the same window. Remember to change it back if you choose the later route. Actions needing network access will be noted with (needs network access)
2016-02-08 19:04:55 -05:00
< br >
< br >
2016-02-19 12:20:31 -05:00
##### **1: Editing Pacman's configuration file (pacman.conf)** #####
2016-02-08 19:04:55 -05:00
* Open archlinux terminal app
* edit /etc/pacman.conf
* ** $ sudo nano -w /etc/pacman.conf**
2016-02-21 13:07:55 -05:00
* Below is the output of a correct pacman.conf file Make the changes so your file matches this one or rename the original and create a new one and copy and paste this text into it. Text should be justified left in the file. The changes from your default are to make gpg sig signing mandatory for packages but not required for DBs for the archlinux repos. Also to add the repo (at the end) for the Powerpill package.
2016-02-08 19:04:55 -05:00
< br >
< br >
2016-02-20 19:16:51 -05:00
# /etc/pacman.conf
#
# See the pacman.conf(5) manpage for option and repository directives
2016-02-11 22:27:43 -05:00
2016-02-20 19:16:51 -05:00
#
# GENERAL OPTIONS
#
2016-02-11 22:27:43 -05:00
[options]
2016-02-20 19:16:51 -05:00
# The following paths are commented out with their default values listed.
# If you wish to use different paths, uncomment and update the paths.
# RootDir = /
# DBPath = /var/lib/pacman/
# CacheDir = /var/cache/pacman/pkg/
# LogFile = /var/log/pacman.log
2016-02-11 22:27:43 -05:00
GPGDir = /etc/pacman.d/gnupg/
HoldPkg = pacman glibc
2016-02-20 19:16:51 -05:00
# XferCommand = /usr/bin/curl -C - -f %u > %o
# XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
# CleanMethod = KeepInstalled
# UseDelta = 0.7
2016-02-11 22:27:43 -05:00
Architecture = auto
2016-02-20 19:16:51 -05:00
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
# IgnorePkg =
# IgnoreGroup =
# NoUpgrade =
2016-02-11 22:27:43 -05:00
NoUpgrade = /etc/X11/xinit/xinitrc.d/pulseaudio
NoUpgrade = /etc/X11/xinit/xinitrc.d/pulseaudio
NoUpgrade = /etc/X11/xinit/xinitrc.d/pulseaudio
2016-02-20 19:16:51 -05:00
# NoExtract =
2016-02-11 22:27:43 -05:00
2016-02-20 19:16:51 -05:00
# Misc options
# UseSyslog
# Color
# TotalDownload
2016-02-11 22:27:43 -05:00
CheckSpace
2016-02-20 19:16:51 -05:00
# VerbosePkgLists
2016-02-11 22:27:43 -05:00
2016-02-20 19:16:51 -05:00
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.
**Edited Line:** `# SigLevel = Required DatabaseOptional`
2016-02-11 22:27:43 -05:00
LocalFileSigLevel = Optional
2016-02-20 19:16:51 -05:00
# RemoteFileSigLevel = Required
# NOTE: You must run `pacman-key --init` before first using pacman; the local
# keyring can then be populated with the keys of all official Arch Linux
# packagers with `pacman-key --populate archlinux` .
#
# REPOSITORIES
# - can be defined here or included from another file
# - pacman will search repositories in the order defined here
# - local/custom mirrors can be added here or in separate files
# - repositories listed first will take precedence when packages
# have identical names, regardless of version number
# - URLs will have $repo replaced by the name of the current repo
# - URLs will have $arch replaced by the name of the architecture
#
# Repository entries are of the format:
# [repo-name]
# Server = ServerName
# Include = IncludePath
#
# The header [repo-name] is crucial - it must be present and
# uncommented to enable the repo.
#
# The testing repositories are disabled by default. To enable, uncomment the
# repo name header and Include lines. You can add preferred servers immediately
# after the header, and they will be used before the default mirrors.
# [testing]
# SigLevel = PackageRequired
# Include = /etc/pacman.d/mirrorlist
2016-02-11 22:27:43 -05:00
[core]
2016-02-20 19:16:51 -05:00
2016-02-11 22:27:43 -05:00
**Edited Line:** `SigLevel = PackageRequired`
Include = /etc/pacman.d/mirrorlist
[extra]
2016-02-20 19:16:51 -05:00
2016-02-11 22:27:43 -05:00
**Edited Line:** `SigLevel = PackageRequired`
Include = /etc/pacman.d/mirrorlist
2016-02-20 19:16:51 -05:00
# [community-testing]
# SigLevel = PackageRequired
# Include = /etc/pacman.d/mirrorlist
2016-02-11 22:27:43 -05:00
[community]
2016-02-20 19:16:51 -05:00
2016-02-11 22:27:43 -05:00
**Edited Line:** `SigLevel = PackageRequired`
Include = /etc/pacman.d/mirrorlist
2016-02-20 19:16:51 -05:00
# If you want to run 32 bit applications on your x86_64 system,
# enable the multilib repositories as required here.
2016-02-11 22:27:43 -05:00
2016-02-20 19:16:51 -05:00
# [multilib-testing]
# Include = /etc/pacman.d/mirrorlist
2016-02-11 22:27:43 -05:00
2016-02-20 19:16:51 -05:00
# [multilib]
# Include = /etc/pacman.d/mirrorlist
2016-02-11 22:27:43 -05:00
2016-02-20 19:16:51 -05:00
# An example of a custom package repository. See the pacman manpage for
# tips on creating your own repositories.
# [custom]
# SigLevel = Optional TrustAll
# Server = file:///home/custompkgs
2016-02-11 22:27:43 -05:00
[multilib]
2016-02-20 19:16:51 -05:00
2016-02-11 22:27:43 -05:00
**Edited Line:** `SigLevel = PackageRequired`
2016-02-08 19:04:55 -05:00
2016-02-11 22:27:43 -05:00
Include = /etc/pacman.d/mirrorlist
2016-02-08 19:04:55 -05:00
2016-02-20 19:16:51 -05:00
**Edited Line:** `# [qubes]`
2016-02-08 19:04:55 -05:00
2016-02-20 19:16:51 -05:00
**Edited Line:** `# Server = http://olivier.medoc.free.fr/archlinux/pkgs/`
2016-02-08 19:04:55 -05:00
2016-02-11 22:27:43 -05:00
**Add Section Below:**
[xyne-x86_64]
2016-02-20 19:16:51 -05:00
# A repo for Xyne's own projects: http://xyne.archlinux.ca/projects/
# Packages for the "x86_64" architecture.
# Added for PowerPill app
# Note that this includes all packages in [xyne-any].
2016-02-11 22:27:43 -05:00
SigLevel = Required
Server = http://xyne.archlinux.ca/repos/xyne
----------
2016-02-08 19:04:55 -05:00
< br >
2016-02-19 12:20:31 -05:00
##### **2: Setting Up GPG** (needs network access) #####
2016-02-08 19:04:55 -05:00
* Initialize GPG Keyring
* ** $ sudo pacman-key --init**
* Populate the keyring with Archlinux master keys
2016-02-11 22:27:43 -05:00
* ** $ sudo pacman-key --populate archlinux**
2016-02-08 19:04:55 -05:00
* Confirm keys with those at [Archlinux Master Keys ](https://www.archlinux.org/master-keys/ )
2016-02-21 13:07:55 -05:00
* For more information on Pacman key signing: [Pacman Package Key Signing ](https://wiki.archlinux.org/index.php/Pacman/Package_signing )
2016-02-08 19:04:55 -05:00
< br >
< br >
2017-01-19 15:36:55 -05:00
##### **3: Install Powerpill (Pacman wrapper)** #####
2016-02-08 19:04:55 -05:00
* ** $ sudo pacman -S powerpill**
< br >
< br >
2017-01-19 15:36:55 -05:00
##### **4: Install Reflector** #####
2016-02-08 19:04:55 -05:00
*Note: It scripts mirror updating. Grabbing the most up to date gen mirror list. It ranks them by most recently sync'd. Then ranks them on fastest speed. Also can be used by Powerpill config to allow a once stop conf file for all if so wanted.*
* ** $ sudo pacman -S reflector**
Note: You can combine package downloads: ** $ sudo pacman -S powerpill reflector**
< br >
< br >
2016-02-19 12:20:31 -05:00
##### **5: Backup mirrorlist prior to first running Reflector.** #####
2016-02-08 19:04:55 -05:00
Note: For info on Reflector and its configs: [Reflector ](https://wiki.archlinux.org/index.php/Reflector )
* ** $ sudo cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bkup**
< br >
< br >
2016-02-19 12:20:31 -05:00
##### **6: Setup mirrolist with Reflector** (needs network access)** #####
2016-02-08 19:04:55 -05:00
*Note: Look at the Reflector page to decide what filter and argument string you wish to run. Below is a default string that will work for most all to setup a working basic mirrorlist.
2016-02-21 13:07:55 -05:00
*Look to Reflector pages or --help for more info on args and filters.*
2016-02-08 19:04:55 -05:00
* ** $ sudo reflector --verbose -l 5 --sort rate --save /etc/pacman.d/mirrorlist**
* The above ranks all the most up to date and sorts for the 5 fastest
* You can confirm the new list by opening the newly created mirrorlist.
< br >
< br >
2016-02-19 12:20:31 -05:00
##### **7: Configure Powerpill configuration file to use Qubes Proxy Service** #####
2016-02-08 19:04:55 -05:00
* Qubes Proxy Address: **10.137.255.254:8082**
* Edit **powerpill.json** (powerpill config file)
* ** $ sudo nano -w /etc/powerpill/powerpill.json**
* Add line '**--all-proxy=10.137.255.254:8082**' at the bottom of the list under the ** "aria2"** section under the ** "args"** line. Example below:
< br >
{
"aria2": {
"args": [
"--allow-overwrite=true",
"--always-resume=false",
"--auto-file-renaming=false",
"--check-integrity=true",
"--conditional-get=true",
"--continue=true",
"--file-allocation=none",
"--log-level=error",
"--max-concurrent-downloads=100",
"--max-connection-per-server=5",
"--min-split-size=5M",
"--remote-time=true",
"--show-console-readout=true",
"--all-proxy=10.137.255.254:8082"
],
"path": "/usr/bin/aria2c"
},
< br >
< br >
2016-02-19 12:20:31 -05:00
##### **8: Test Powerpill Configuration** #####
2016-02-08 19:04:55 -05:00
*Note: Powerpill uses and passes the same syntax as pacman*
* Configure Archlinux Template to only use the Qubes Proxy Update Service
* In the Qubes VM Manager under Archlinux FW tab make sure only the access check box for update proxy is on. All others should be set to deny.
* ** $ sudo powerpill -Syu**
* You should get a similar output as below:
< br >
< br >
2016-02-11 05:17:54 -05:00
![arch-template-26 ](/attachment/wiki/ArchlinuxTemplate/arch-template-26.png )
2016-02-08 19:04:55 -05:00
< br >
< br >
**Remember you must open up network access anytime you wish to run the Reflector script to update the mirrorlist. This page will be updated when/if this situation changes.**
2016-02-19 12:20:31 -05:00
### **If the above checks out, you can start using your new Archlinux Template** ###
2016-02-08 19:04:55 -05:00
< br >
< br >
2015-09-18 20:03:05 -04:00
2017-02-03 06:02:43 -05:00
## Want to contribute?
2016-02-11 22:27:43 -05:00
* [How can I contribute to the Qubes Project? ](/doc/contributing/ )
2016-09-24 19:25:34 -04:00
* [Guidelines for Documentation Contributors ](/doc/doc-guidelines/ )
2016-02-11 22:27:43 -05:00
< br >