mirror of
https://github.com/QubesOS/qubes-doc.git
synced 2025-09-23 22:44:41 -04:00
Add prompts to all code blocks with bash session
This commit is contained in:
parent
b0395e618c
commit
2d2bcb06a6
72 changed files with 513 additions and 497 deletions
|
@ -40,7 +40,7 @@ In ``qubes-builder/artifacts/sources/linux-kernel``:
|
|||
|
||||
.. code:: console
|
||||
|
||||
make prep
|
||||
$ make prep
|
||||
|
||||
|
||||
|
||||
|
@ -48,7 +48,7 @@ The resulting tree will be in kernel-<VERSION>/linux-<VERSION>:
|
|||
|
||||
.. code:: console
|
||||
|
||||
ls -ltrd kernel*/linux*
|
||||
$ ls -ltrd kernel*/linux*
|
||||
drwxr-xr-x 23 user user 4096 Nov 5 09:50 kernel-3.4.18/linux-3.4.18
|
||||
drwxr-xr-x 6 user user 4096 Nov 21 20:48 kernel-3.4.18/linux-obj
|
||||
|
||||
|
@ -62,7 +62,7 @@ In ``qubes-builder/artifacts/sources/linux-kernel``:
|
|||
|
||||
.. code:: console
|
||||
|
||||
cd kernel-3.4.18/linux-3.4.18
|
||||
$ cd kernel-3.4.18/linux-3.4.18
|
||||
|
||||
|
||||
|
||||
|
@ -74,8 +74,8 @@ In ``kernel-3.4.18/linux-3.4.18``:
|
|||
|
||||
.. code:: console
|
||||
|
||||
cp ../../config .config
|
||||
make oldconfig
|
||||
$ cp ../../config .config
|
||||
$ make oldconfig
|
||||
|
||||
|
||||
|
||||
|
@ -83,7 +83,7 @@ Now change the configuration. For example, in ``kernel-3.4.18/linux-3.4.18``:
|
|||
|
||||
.. code:: console
|
||||
|
||||
make menuconfig
|
||||
$ make menuconfig
|
||||
|
||||
|
||||
|
||||
|
@ -91,7 +91,7 @@ Copy the modified config back into the kernel tree:
|
|||
|
||||
.. code:: console
|
||||
|
||||
cp .config ../../../config
|
||||
$ cp .config ../../../config
|
||||
|
||||
|
||||
|
||||
|
@ -103,20 +103,20 @@ TODO: describe the workflow for patching the code, below are some random notes,
|
|||
|
||||
.. code:: console
|
||||
|
||||
ln -s ../../patches.xen
|
||||
export QUILT_PATCHES=patches.xen
|
||||
export QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index"
|
||||
export QUILT_SERIES=../../series-pvops.conf
|
||||
$ ln -s ../../patches.xen
|
||||
$ export QUILT_PATCHES=patches.xen
|
||||
$ export QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index"
|
||||
$ export QUILT_SERIES=../../series-pvops.conf
|
||||
|
||||
quilt new patches.xen/pvops-3.4-0101-usb-xen-pvusb-driver-bugfix.patch
|
||||
quilt add drivers/usb/host/Kconfig drivers/usb/host/Makefile \
|
||||
$ quilt new patches.xen/pvops-3.4-0101-usb-xen-pvusb-driver-bugfix.patch
|
||||
$ quilt add drivers/usb/host/Kconfig drivers/usb/host/Makefile \
|
||||
drivers/usb/host/xen-usbback/* drivers/usb/host/xen-usbfront.c \
|
||||
include/xen/interface/io/usbif.h
|
||||
|
||||
*edit something*
|
||||
|
||||
quilt refresh
|
||||
cd ../..
|
||||
$ quilt refresh
|
||||
$ cd ../..
|
||||
vi series.conf
|
||||
|
||||
|
||||
|
@ -133,7 +133,7 @@ To actually build RPMs, in qubes-builder:
|
|||
|
||||
.. code:: console
|
||||
|
||||
./qb -c linux-kernel package fetch prep build
|
||||
$ ./qb -c linux-kernel package fetch prep build
|
||||
|
||||
|
||||
|
||||
|
@ -398,7 +398,7 @@ Then use ``make update-repo-unstable`` to upload the packages. You can also spec
|
|||
|
||||
.. code:: console
|
||||
|
||||
make COMPONENTS="core-agent-linux gui-agent-linux linux-utils" qubes update-repo-unstable
|
||||
$ make COMPONENTS="core-agent-linux gui-agent-linux linux-utils" qubes update-repo-unstable
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -54,8 +54,8 @@ This is a simple setup using a docker executor. This is a good default choice; i
|
|||
|
||||
.. code:: console
|
||||
|
||||
git clone https://github.com/QubesOS/qubes-builderv2
|
||||
cd qubes-builderv2/
|
||||
$ git clone https://github.com/QubesOS/qubes-builderv2
|
||||
$ cd qubes-builderv2/
|
||||
|
||||
|
||||
4. If you haven’t previously used docker in the current qube, you need to set up some permissions. In particular, the user has to be added to the ``docker`` group:
|
||||
|
|
|
@ -55,17 +55,23 @@ Usually you can install those packages by just issuing:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo dnf install gnupg git createrepo rpm-build make wget rpmdevtools python3-sh dialog rpm-sign dpkg-dev debootstrap python3-pyyaml devscripts perl-Digest-MD5 perl-Digest-SHA
|
||||
$ sudo dnf install gnupg git createrepo rpm-build make wget rpmdevtools python3-sh dialog rpm-sign dpkg-dev debootstrap python3-pyyaml devscripts perl-Digest-MD5 perl-Digest-SHA
|
||||
|
||||
|
||||
The build system creates build environments in chroots and so no other packages are needed on the host. All files created by the build system are contained within the qubes-builder directory. The full build requires some 25GB of free space, so keep that in mind when deciding where to place this directory.
|
||||
|
||||
The build system is configured via builder.conf file. You can use the setup.sh script to create and modify this file. Alternatively, you can copy the provided default builder.conf, and modify it as needed, e.g.:
|
||||
|
||||
|
||||
.. code:: console
|
||||
|
||||
cp example-configs/qubes-os-master.conf builder.conf
|
||||
# edit the builder.conf file and set the following variables:
|
||||
$ cp example-configs/qubes-os-master.conf builder.conf
|
||||
|
||||
|
||||
Edit the builder.conf file and set the following variables:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
NO_SIGN=1
|
||||
|
||||
|
||||
|
@ -87,36 +93,36 @@ So, to build Qubes you would do:
|
|||
.. code:: console
|
||||
|
||||
# Import the Qubes master key
|
||||
gpg --recv-keys 0xDDFA1A3E36879494
|
||||
$ gpg --recv-keys 0xDDFA1A3E36879494
|
||||
|
||||
# Verify its fingerprint, set as 'trusted'.
|
||||
# This is described here:
|
||||
# https://www.qubes-os.org/doc/VerifyingSignatures
|
||||
|
||||
wget https://keys.qubes-os.org/keys/qubes-developers-keys.asc
|
||||
gpg --import qubes-developers-keys.asc
|
||||
$ wget https://keys.qubes-os.org/keys/qubes-developers-keys.asc
|
||||
$ gpg --import qubes-developers-keys.asc
|
||||
|
||||
git clone https://github.com/QubesOS/qubes-builder.git qubes-builder
|
||||
cd qubes-builder
|
||||
$ git clone https://github.com/QubesOS/qubes-builder.git qubes-builder
|
||||
$ cd qubes-builder
|
||||
|
||||
# Verify its integrity:
|
||||
git tag -v `git describe`
|
||||
$ git tag -v `git describe`
|
||||
|
||||
cp example-configs/qubes-os-master.conf builder.conf
|
||||
$ cp example-configs/qubes-os-master.conf builder.conf
|
||||
# edit the builder.conf file and set the following variables:
|
||||
# NO_SIGN="1"
|
||||
|
||||
# Download all components:
|
||||
|
||||
make get-sources
|
||||
$ make get-sources
|
||||
|
||||
# And now to build all Qubes RPMs (this will take a few hours):
|
||||
|
||||
make qubes
|
||||
$ make qubes
|
||||
|
||||
# ... and then to build the ISO
|
||||
|
||||
make iso
|
||||
$ make iso
|
||||
|
||||
|
||||
And this should produce a shiny new ISO.
|
||||
|
@ -125,7 +131,7 @@ You can also build selected component separately. Eg. to compile only gui virtua
|
|||
|
||||
.. code:: console
|
||||
|
||||
make gui-daemon
|
||||
$ make gui-daemon
|
||||
|
||||
|
||||
You can get a full list from make help.
|
||||
|
@ -154,7 +160,7 @@ You can also modify sources somehow if you wish. Here are some basic steps:
|
|||
|
||||
.. code:: console
|
||||
|
||||
make get-sources
|
||||
$ make get-sources
|
||||
|
||||
|
||||
4. **Make your modifications here**
|
||||
|
@ -165,14 +171,14 @@ You can also modify sources somehow if you wish. Here are some basic steps:
|
|||
|
||||
.. code:: console
|
||||
|
||||
make vmm-xen core-admin linux-kernel gui-daemon template desktop-linux-kde installer-qubes-os manager linux-dom0-updates
|
||||
$ make vmm-xen core-admin linux-kernel gui-daemon template desktop-linux-kde installer-qubes-os manager linux-dom0-updates
|
||||
|
||||
|
||||
7. build iso installation image
|
||||
|
||||
.. code:: console
|
||||
|
||||
make iso
|
||||
$ make iso
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -17,14 +17,14 @@ Fedora 36 (and 37) has been successfully used to build Qubes R4.1 with the below
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo setenforce 0
|
||||
$ sudo setenforce 0
|
||||
|
||||
|
||||
In ``dom0``, install the Fedora 36 (or 37) template if you don’t already have it.
|
||||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update qubes-template-fedora-36
|
||||
$ sudo qubes-dom0-update qubes-template-fedora-36
|
||||
|
||||
|
||||
|
||||
|
@ -66,9 +66,9 @@ Now let’s bootstrap the builder. Unfortunately, the builder cannot verify itse
|
|||
|
||||
.. code:: console
|
||||
|
||||
git clone https://github.com/QubesOS/qubes-builder.git
|
||||
cd qubes-builder
|
||||
git tag -v `git describe`
|
||||
$ git clone https://github.com/QubesOS/qubes-builder.git
|
||||
$ cd qubes-builder
|
||||
$ git tag -v `git describe`
|
||||
|
||||
|
||||
|
||||
|
@ -120,8 +120,8 @@ Continue the build process with:
|
|||
|
||||
.. code:: console
|
||||
|
||||
make install-deps
|
||||
make get-sources
|
||||
$ make install-deps
|
||||
$ make get-sources
|
||||
|
||||
|
||||
|
||||
|
@ -133,8 +133,8 @@ Finally, if you are making a test build, use:
|
|||
|
||||
.. code:: console
|
||||
|
||||
make qubes
|
||||
make iso
|
||||
$ make qubes
|
||||
$ make iso
|
||||
|
||||
|
||||
|
||||
|
@ -142,9 +142,9 @@ Or for a fully signed build (this requires setting ``SIGN_KEY`` in ``builder.con
|
|||
|
||||
.. code:: console
|
||||
|
||||
make qubes
|
||||
make sign-all
|
||||
make iso
|
||||
$ make qubes
|
||||
$ make sign-all
|
||||
$ make iso
|
||||
|
||||
|
||||
|
||||
|
@ -160,9 +160,9 @@ If you will be building Whonix templates:
|
|||
|
||||
.. code:: console
|
||||
|
||||
cd ~
|
||||
gpg --keyserver pgp.mit.edu --recv-keys 916B8D99C38EAF5E8ADC7A2A8D66066A2EEACCDA
|
||||
gpg --fingerprint 916B8D99C38EAF5E8ADC7A2A8D66066A2EEACCDA
|
||||
$ cd ~
|
||||
$ gpg --keyserver pgp.mit.edu --recv-keys 916B8D99C38EAF5E8ADC7A2A8D66066A2EEACCDA
|
||||
$ gpg --fingerprint 916B8D99C38EAF5E8ADC7A2A8D66066A2EEACCDA
|
||||
|
||||
|
||||
|
||||
|
@ -185,11 +185,11 @@ Next, prepare the Git keyring directory and copy them in:
|
|||
|
||||
.. code:: console
|
||||
|
||||
export GNUPGHOME=~/qubes-builder/keyrings/git
|
||||
mkdir --parents "$GNUPGHOME"
|
||||
cp ~/.gnupg/pubring.gpg "$GNUPGHOME"
|
||||
cp ~/.gnupg/trustdb.gpg "$GNUPGHOME"
|
||||
chmod --recursive 700 "$GNUPGHOME"
|
||||
$ export GNUPGHOME=~/qubes-builder/keyrings/git
|
||||
$ mkdir --parents "$GNUPGHOME"
|
||||
$ cp ~/.gnupg/pubring.gpg "$GNUPGHOME"
|
||||
$ cp ~/.gnupg/trustdb.gpg "$GNUPGHOME"
|
||||
$ chmod --recursive 700 "$GNUPGHOME"
|
||||
|
||||
|
||||
|
||||
|
@ -197,8 +197,8 @@ Copy one of the example configurations:
|
|||
|
||||
.. code:: console
|
||||
|
||||
cd ~/qubes-builder
|
||||
cp example-configs/qubes-os-master.conf builder.conf
|
||||
$ cd ~/qubes-builder
|
||||
$ cp example-configs/qubes-os-master.conf builder.conf
|
||||
|
||||
|
||||
|
||||
|
@ -208,9 +208,9 @@ Continue the build process with:
|
|||
|
||||
.. code:: console
|
||||
|
||||
make install-deps
|
||||
make get-sources
|
||||
unset GNUPGHOME
|
||||
$ make install-deps
|
||||
$ make get-sources
|
||||
$ unset GNUPGHOME
|
||||
|
||||
|
||||
|
||||
|
@ -220,8 +220,8 @@ Finally, if you are making a test build, use:
|
|||
|
||||
.. code:: console
|
||||
|
||||
make qubes
|
||||
make iso
|
||||
$ make qubes
|
||||
$ make iso
|
||||
|
||||
|
||||
|
||||
|
@ -229,9 +229,9 @@ Or for a fully signed build (this requires setting ``SIGN_KEY`` in ``builder.con
|
|||
|
||||
.. code:: console
|
||||
|
||||
make qubes
|
||||
make sign-all
|
||||
make iso
|
||||
$ make qubes
|
||||
$ make sign-all
|
||||
$ make iso
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -91,7 +91,7 @@ If you’re submitting a patch via GitHub (or a similar Git server), please sign
|
|||
|
||||
.. code:: console
|
||||
|
||||
git config --global user.signingkey <KEYID>
|
||||
$ git config --global user.signingkey <KEYID>
|
||||
|
||||
|
||||
|
||||
|
@ -99,14 +99,14 @@ If you’re submitting a patch via GitHub (or a similar Git server), please sign
|
|||
|
||||
.. code:: console
|
||||
|
||||
git config --global commit.gpgsign true
|
||||
$ git config --global commit.gpgsign true
|
||||
|
||||
|
||||
Alternatively, manually specify when a commit is to be signed:
|
||||
|
||||
.. code:: console
|
||||
|
||||
git commit -S
|
||||
$ git commit -S
|
||||
|
||||
|
||||
|
||||
|
@ -115,7 +115,7 @@ If you’re submitting a patch via GitHub (or a similar Git server), please sign
|
|||
|
||||
.. code:: console
|
||||
|
||||
git tag -s <tag_name> -m "<tag_message>"
|
||||
$ git tag -s <tag_name> -m "<tag_message>"
|
||||
|
||||
|
||||
You can also create an alias to make this easier. Edit your ``~/.gitconfig`` file. In the ``[alias]`` section, add ``stag`` to create signed tags and ``spush`` to create signed tags and push them.
|
||||
|
@ -171,14 +171,14 @@ In this case, you have several options to sign the commit:
|
|||
|
||||
.. code:: console
|
||||
|
||||
git commit --amend -S
|
||||
$ git commit --amend -S
|
||||
|
||||
|
||||
This also rewrites the commit so you need to push it forcefully:
|
||||
|
||||
.. code:: console
|
||||
|
||||
git push -f
|
||||
$ git push -f
|
||||
|
||||
|
||||
|
||||
|
@ -186,8 +186,8 @@ In this case, you have several options to sign the commit:
|
|||
|
||||
.. code:: console
|
||||
|
||||
git checkout <commit>
|
||||
git spush
|
||||
$ git checkout <commit>
|
||||
$ git spush
|
||||
|
||||
|
||||
Now, the signature checker needs to re-check the signature. Please comment on the pull request that you would like to have the signatures checked again.
|
||||
|
|
|
@ -21,7 +21,7 @@ To clone a repository:
|
|||
|
||||
.. code:: console
|
||||
|
||||
git clone https://github.com/QubesOS/qubes-<repo_name>.git <repo_name>
|
||||
$ git clone https://github.com/QubesOS/qubes-<repo_name>.git <repo_name>
|
||||
|
||||
|
||||
|
||||
|
@ -29,7 +29,7 @@ e.g.:
|
|||
|
||||
.. code:: console
|
||||
|
||||
git clone https://github.com/QubesOS/qubes-core-admin.git core-admin
|
||||
$ git clone https://github.com/QubesOS/qubes-core-admin.git core-admin
|
||||
|
||||
|
||||
|
||||
|
@ -39,8 +39,8 @@ If you really do want to clone **all** of the repositories, you can use these co
|
|||
|
||||
.. code:: console
|
||||
|
||||
curl "https://api.github.com/orgs/QubesOS/repos?page=1&per_page=100" | grep -e 'clone_url*' | cut -d \" -f 4 | xargs -L1 git clone
|
||||
curl "https://api.github.com/orgs/QubesOS/repos?page=2&per_page=100" | grep -e 'clone_url*' | cut -d \" -f 4 | xargs -L1 git clone
|
||||
$ curl "https://api.github.com/orgs/QubesOS/repos?page=1&per_page=100" | grep -e 'clone_url*' | cut -d \" -f 4 | xargs -L1 git clone
|
||||
$ curl "https://api.github.com/orgs/QubesOS/repos?page=2&per_page=100" | grep -e 'clone_url*' | cut -d \" -f 4 | xargs -L1 git clone
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -119,7 +119,7 @@ Tests are also compatible with nose2 test runner, so you can use this instead:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo systemctl stop qubesd; sudo -E nose2 -v --plugin nose2.plugins.loader.loadtests qubes.tests; sudo systemctl start qubesd
|
||||
$ sudo systemctl stop qubesd; sudo -E nose2 -v --plugin nose2.plugins.loader.loadtests qubes.tests; sudo systemctl start qubesd
|
||||
|
||||
|
||||
This may be especially useful together with various nose2 plugins to store tests results (for example ``nose2.plugins.junitxml``), to ease presenting results. This is what we use on `OpenQA <https://open.qa/>`__.
|
||||
|
@ -140,15 +140,15 @@ Assuming you cloned the ``qubes-builder`` repository to your home directory insi
|
|||
|
||||
.. code:: console
|
||||
|
||||
cd ~
|
||||
sudo dnf install python3-pip lvm2 python35 python3-virtualenv
|
||||
virtualenv -p /usr/bin/python35 python35
|
||||
source python35/bin/activate
|
||||
python3 -V
|
||||
cd ~/qubes-builder/qubes-src/core-admin
|
||||
pip3 install -r ci/requirements.txt
|
||||
export PYTHONPATH=../core-qrexec:test-packages
|
||||
./run-tests
|
||||
$ cd ~
|
||||
$ sudo dnf install python3-pip lvm2 python35 python3-virtualenv
|
||||
$ virtualenv -p /usr/bin/python35 python35
|
||||
$ source python35/bin/activate
|
||||
$ python3 -V
|
||||
$ cd ~/qubes-builder/qubes-src/core-admin
|
||||
$ pip3 install -r ci/requirements.txt
|
||||
$ export PYTHONPATH=../core-qrexec:test-packages
|
||||
$ ./run-tests
|
||||
|
||||
|
||||
To run only the tests related to e.g. ``lvm``, you may use:
|
||||
|
|
|
@ -70,7 +70,7 @@ If your machine has a serial console, you may with to use that, but note that a
|
|||
|
||||
.. code:: console
|
||||
|
||||
script -f /dev/ttyS0
|
||||
$ script -f /dev/ttyS0
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -96,11 +96,11 @@ Internet access is intentionally disabled by default in dom0. But to ease the de
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo systemctl enable sshd
|
||||
sudo systemctl start sshd
|
||||
$ sudo systemctl enable sshd
|
||||
$ sudo systemctl start sshd
|
||||
|
||||
sudo systemctl enable dom0-network-direct
|
||||
sudo systemctl start dom0-network-direct
|
||||
$ sudo systemctl enable dom0-network-direct
|
||||
$ sudo systemctl start dom0-network-direct
|
||||
|
||||
|
||||
|
||||
|
@ -123,26 +123,26 @@ The following commands should work for you, but do keep in mind that the provisi
|
|||
# https://github.com/marmarek/openqa-tests-qubesos/blob/master/tests/update.pm
|
||||
|
||||
# Install git
|
||||
sudo qubes-dom0-update git || sudo dnf --setopt=reposdir=/etc/yum.repos.d install git
|
||||
$ sudo qubes-dom0-update git || sudo dnf --setopt=reposdir=/etc/yum.repos.d install git
|
||||
|
||||
# Download the openQA automated testing environment Salt configuration
|
||||
git clone https://github.com/marmarek/openqa-tests-qubesos/
|
||||
cd openqa-tests-qubesos/extra-files
|
||||
sudo cp -a system-tests/ /srv/salt/
|
||||
sudo qubesctl top.enable system-tests
|
||||
$ git clone https://github.com/marmarek/openqa-tests-qubesos/
|
||||
$ cd openqa-tests-qubesos/extra-files
|
||||
$ sudo cp -a system-tests/ /srv/salt/
|
||||
$ sudo qubesctl top.enable system-tests
|
||||
|
||||
# Install the same configuration as the one in openQA
|
||||
QUBES_VERSION=4.1
|
||||
PILLAR_DIR=/srv/pillar/base/update
|
||||
sudo mkdir -p $PILLAR_DIR
|
||||
printf 'update:\n qubes_ver: '$QUBES_VERSION'\n' | sudo tee $PILLAR_DIR/init.sls
|
||||
printf "base:\n '*':\n - update\n" | sudo tee $PILLAR_DIR/init.top
|
||||
sudo qubesctl top.enable update pillar=True
|
||||
$ QUBES_VERSION=4.1
|
||||
$ PILLAR_DIR=/srv/pillar/base/update
|
||||
$ sudo mkdir -p $PILLAR_DIR
|
||||
$ printf 'update:\n qubes_ver: '$QUBES_VERSION'\n' | sudo tee $PILLAR_DIR/init.sls
|
||||
$ printf "base:\n '*':\n - update\n" | sudo tee $PILLAR_DIR/init.top
|
||||
$ sudo qubesctl top.enable update pillar=True
|
||||
|
||||
# Apply states to dom0 and VMs
|
||||
# NOTE: These commands can take several minutes (if not more) without showing output
|
||||
sudo qubesctl --show-output state.highstate
|
||||
sudo qubesctl --max-concurrency=2 --skip-dom0 --templates --show-output state.highstate
|
||||
$ sudo qubesctl --show-output state.highstate
|
||||
$ sudo qubesctl --max-concurrency=2 --skip-dom0 --templates --show-output state.highstate
|
||||
|
||||
|
||||
Development VM
|
||||
|
|
|
@ -19,8 +19,8 @@ Known issues
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-prefs -s fedora-17-x64-dvm maxmem 3072
|
||||
qvm-create-default-dvm --default-template --default-script
|
||||
$ qvm-prefs -s fedora-17-x64-dvm maxmem 3072
|
||||
$ qvm-create-default-dvm --default-template --default-script
|
||||
|
||||
|
||||
|
||||
|
@ -58,6 +58,6 @@ If you have Qubes Beta 3 currently installed on your system, you must reinstall
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-backup-restore <backup_dir> --replace-template=fedora-15-x64:fedora-17-x64
|
||||
$ qvm-backup-restore <backup_dir> --replace-template=fedora-15-x64:fedora-17-x64
|
||||
|
||||
|
||||
|
|
|
@ -66,7 +66,7 @@ Security Notes
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo nano /etc/yum.repos.d/qubes-dom0.repo
|
||||
$ sudo nano /etc/yum.repos.d/qubes-dom0.repo
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -144,7 +144,7 @@ dom0: request execution of ``cmd`` in domX
|
|||
|
||||
.. code:: console
|
||||
|
||||
qrexec-client -d domX [-l local_program] user:cmd
|
||||
$ qrexec-client -d domX [-l local_program] user:cmd
|
||||
|
||||
|
||||
|
||||
|
@ -191,7 +191,7 @@ domX: request execution of service ``admin.Service`` in dom0
|
|||
|
||||
.. code:: console
|
||||
|
||||
qrexec-client-vm dom0 admin.Service [local_program] [params]
|
||||
$ qrexec-client-vm dom0 admin.Service [local_program] [params]
|
||||
|
||||
|
||||
|
||||
|
@ -217,7 +217,7 @@ domX: request execution of service ``admin.Service`` in dom0
|
|||
|
||||
.. code:: console
|
||||
|
||||
qrexec-client -d dom0 -c domX,X,SOCKET11 "QUBESRPC admin.Service domX name dom0"
|
||||
$ qrexec-client -d dom0 -c domX,X,SOCKET11 "QUBESRPC admin.Service domX name dom0"
|
||||
|
||||
|
||||
|
||||
|
@ -260,7 +260,7 @@ domX: invoke execution of qubes service ``qubes.Service`` in domY
|
|||
|
||||
.. code:: console
|
||||
|
||||
qrexec-client-vm domY qubes.Service [local_program] [params]
|
||||
$ qrexec-client-vm domY qubes.Service [local_program] [params]
|
||||
|
||||
|
||||
|
||||
|
@ -278,7 +278,7 @@ domX: invoke execution of qubes service ``qubes.Service`` in domY
|
|||
|
||||
.. code:: console
|
||||
|
||||
qrexec-client -d domY -c domX,X,SOCKET11 user:cmd "DEFAULT:QUBESRPC qubes.Service domX"
|
||||
$ qrexec-client -d domY -c domX,X,SOCKET11 user:cmd "DEFAULT:QUBESRPC qubes.Service domX"
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -122,8 +122,8 @@ Start the socket using ``systemctl --user start``. Enable it using ``systemctl -
|
|||
|
||||
.. code:: console
|
||||
|
||||
systemctl --user start qubes-qrexec-policy-agent.socket
|
||||
systemctl --user enable qubes-qrexec-policy-agent.socket
|
||||
$ systemctl --user start qubes-qrexec-policy-agent.socket
|
||||
$ systemctl --user enable qubes-qrexec-policy-agent.socket
|
||||
|
||||
|
||||
|
||||
|
@ -131,7 +131,7 @@ Alternatively, you can enable the service by creating a symlink:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo ln -s /lib/systemd/user/qubes-qrexec-policy-agent.socket /lib/systemd/user/sockets.target.wants/
|
||||
$ sudo ln -s /lib/systemd/user/qubes-qrexec-policy-agent.socket /lib/systemd/user/sockets.target.wants/
|
||||
|
||||
|
||||
|
||||
|
@ -143,7 +143,7 @@ Link in qubes-rpc
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo ln -s /var/run/qubes/policy-agent.sock /etc/qubes-rpc/policy.Ask
|
||||
$ sudo ln -s /var/run/qubes/policy-agent.sock /etc/qubes-rpc/policy.Ask
|
||||
|
||||
|
||||
|
||||
|
@ -157,7 +157,7 @@ Install the Python systemd library:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo dnf install python3-systemd
|
||||
$ sudo dnf install python3-systemd
|
||||
|
||||
|
||||
|
||||
|
@ -240,7 +240,7 @@ The service is invoked in the same way as a standard Qubes RPC service:
|
|||
|
||||
.. code:: console
|
||||
|
||||
echo <input_data> | qrexec-client -d domX 'DEFAULT:QUBESRPC policy.Ask'
|
||||
$ echo <input_data> | qrexec-client -d domX 'DEFAULT:QUBESRPC policy.Ask'
|
||||
|
||||
|
||||
|
||||
|
@ -248,7 +248,7 @@ You can also connect to it locally, but remember to include the service descript
|
|||
|
||||
.. code:: console
|
||||
|
||||
echo -e 'policy.Ask dom0\0<input data>' | nc -U /etc/qubes-rpc/policy.Ask
|
||||
$ echo -e 'policy.Ask dom0\0<input data>' | nc -U /etc/qubes-rpc/policy.Ask
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -245,7 +245,7 @@ We’ll need to create a service called ``test.Add`` with its own definition and
|
|||
|
||||
.. code:: console
|
||||
|
||||
ln -s /usr/bin/our_test_add_server /etc/qubes-rpc/test.Add
|
||||
$ ln -s /usr/bin/our_test_add_server /etc/qubes-rpc/test.Add
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -114,7 +114,7 @@ In order to remove such authorization, issue this command from a Dom0 terminal (
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo nano /etc/qubes-rpc/policy/qubes.Filecopy
|
||||
$ sudo nano /etc/qubes-rpc/policy/qubes.Filecopy
|
||||
|
||||
|
||||
and then remove any line(s) ending in “allow” (before the first ``##`` comment) which are the “Yes to All” results.
|
||||
|
|
|
@ -121,7 +121,7 @@ Starting with Qubes 4.0, there is opt-in support for IPv6 forwarding. Similar to
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-features sys-net ipv6 1
|
||||
$ qvm-features sys-net ipv6 1
|
||||
|
||||
|
||||
|
||||
|
@ -129,7 +129,7 @@ It is also possible to explicitly disable IPv6 support for some qubes, even if i
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-features ipv4-only-qube ipv6 ''
|
||||
$ qvm-features ipv4-only-qube ipv6 ''
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -545,10 +545,10 @@ or
|
|||
|
||||
.. code:: console
|
||||
|
||||
echo 0000:<BDF> > /sys/bus/pci/drivers/pciback/unbind
|
||||
MODALIAS=`cat /sys/bus/pci/devices/0000:<BDF>/modalias`
|
||||
MOD=`modprobe -R $MODALIAS | head -n 1`
|
||||
echo 0000:<BDF> > /sys/bus/pci/drivers/$MOD/bind
|
||||
$ echo 0000:<BDF> > /sys/bus/pci/drivers/pciback/unbind
|
||||
$ MODALIAS=`cat /sys/bus/pci/devices/0000:<BDF>/modalias`
|
||||
$ MOD=`modprobe -R $MODALIAS | head -n 1`
|
||||
$ echo 0000:<BDF> > /sys/bus/pci/drivers/$MOD/bind
|
||||
|
||||
|
||||
|
||||
|
@ -674,7 +674,7 @@ From a ``dom0`` prompt, enter:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-prefs <HVMname> kernel ""
|
||||
$ qvm-prefs <HVMname> kernel ""
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ The following example demonstrates one method of obtaining the qubes-secpack and
|
|||
|
||||
1. Use Git to clone the qubes-secpack repo.
|
||||
|
||||
.. code::
|
||||
.. code:: console
|
||||
|
||||
$ git clone https://github.com/QubesOS/qubes-secpack.git
|
||||
Cloning into 'qubes-secpack'...
|
||||
|
@ -44,7 +44,7 @@ The following example demonstrates one method of obtaining the qubes-secpack and
|
|||
|
||||
2. Import the included PGP keys. See our `PGP key policies <#pgp-key-policies>`__ for important information about these keys.
|
||||
|
||||
.. code::
|
||||
.. code:: console
|
||||
|
||||
$ gpg --import qubes-secpack/keys/*/*
|
||||
gpg: directory `/home/user/.gnupg' created
|
||||
|
|
|
@ -178,11 +178,11 @@ Now that you’ve imported the authentic QMSK, set its trust level to “ultimat
|
|||
trust: unknown validity: unknown
|
||||
[ unknown] (1). Qubes Master Signing Key
|
||||
|
||||
gpg> fpr
|
||||
$ gpg> fpr
|
||||
pub 4096R/36879494 2010-04-01 Qubes Master Signing Key
|
||||
Primary key fingerprint: 427F 11FD 0FAA 4B08 0123 F01C DDFA 1A3E 3687 9494
|
||||
|
||||
gpg> trust
|
||||
$ gpg> trust
|
||||
pub 4096R/36879494 created: 2010-04-01 expires: never usage: SC
|
||||
trust: unknown validity: unknown
|
||||
[ unknown] (1). Qubes Master Signing Key
|
||||
|
@ -206,7 +206,7 @@ Now that you’ve imported the authentic QMSK, set its trust level to “ultimat
|
|||
Please note that the shown key validity is not necessarily correct
|
||||
unless you restart the program.
|
||||
|
||||
gpg> q
|
||||
$ gpg> q
|
||||
|
||||
|
||||
Now, when you import any of the release signing keys and many Qubes team member keys, they will already be trusted in virtue of being signed by the QMSK.
|
||||
|
@ -426,11 +426,11 @@ Download both the ISO and its signature file. Put both of them in the same direc
|
|||
.. code:: console
|
||||
|
||||
$ gpg2 -v --verify Qubes-RX-x86_64.iso.asc Qubes-RX-x86_64.iso
|
||||
gpg: armor header: Version: GnuPG v1
|
||||
gpg: Signature made <TIME> using RSA key ID 03FA5082
|
||||
gpg: using PGP trust model
|
||||
gpg: Good signature from "Qubes OS Release X Signing Key"
|
||||
gpg: binary signature, digest algorithm SHA256
|
||||
$ gpg: armor header: Version: GnuPG v1
|
||||
$ gpg: Signature made <TIME> using RSA key ID 03FA5082
|
||||
$ gpg: using PGP trust model
|
||||
$ gpg: Good signature from "Qubes OS Release X Signing Key"
|
||||
$ gpg: binary signature, digest algorithm SHA256
|
||||
|
||||
|
||||
This is just an example, so the output you receive will not look exactly the same. What matters is the line that says ``Good signature from "Qubes OS Release X Signing Key"``. This confirms that the signature on the ISO is good.
|
||||
|
|
|
@ -30,7 +30,7 @@ In this example, we want to make ``/var/lib/tor`` persistent. Enter all of the f
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo mkdir -p /rw/config/qubes-bind-dirs.d
|
||||
$ sudo mkdir -p /rw/config/qubes-bind-dirs.d
|
||||
|
||||
|
||||
|
||||
|
@ -38,7 +38,7 @@ In this example, we want to make ``/var/lib/tor`` persistent. Enter all of the f
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo touch /rw/config/qubes-bind-dirs.d/50_user.conf
|
||||
$ sudo touch /rw/config/qubes-bind-dirs.d/50_user.conf
|
||||
|
||||
|
||||
|
||||
|
@ -56,7 +56,7 @@ In this example, we want to make ``/var/lib/tor`` persistent. Enter all of the f
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo mkdir -p /rw/bind-dirs/var/lib/tor
|
||||
$ sudo mkdir -p /rw/bind-dirs/var/lib/tor
|
||||
|
||||
|
||||
|
||||
|
@ -157,7 +157,7 @@ To use this feature, first, enable it:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-service -e my-app-vm custom-persist
|
||||
$ qvm-service -e my-app-vm custom-persist
|
||||
|
||||
|
||||
|
||||
|
@ -165,7 +165,7 @@ Then, configure a persistent directory with ``qvm-features``:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-features my-app-vm custom-persist.my_persistent_dir /var/my_persistent_dir
|
||||
$ qvm-features my-app-vm custom-persist.my_persistent_dir /var/my_persistent_dir
|
||||
|
||||
|
||||
|
||||
|
@ -173,8 +173,8 @@ To re-enable ``/home`` and ``/usr/local`` persistence, just add them to the list
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-features my-app-vm custom-persist.home /home
|
||||
qvm-features my-app-vm custom-persist.usrlocal /usr/local
|
||||
$ qvm-features my-app-vm custom-persist.home /home
|
||||
$ qvm-features my-app-vm custom-persist.usrlocal /usr/local
|
||||
|
||||
|
||||
|
||||
|
@ -184,8 +184,8 @@ A user may want their bind-dirs to be automatically pre-created in ``/rw/bind-di
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-features my-app-vm custom-persist.downloads dir:user:user:0755:/home/user/Downloads
|
||||
qvm-features my-app-vm custom-persist.my_ssh_known_hosts_file file:user:user:0600:/home/user/.ssh/known_hosts
|
||||
$ qvm-features my-app-vm custom-persist.downloads dir:user:user:0755:/home/user/Downloads
|
||||
$ qvm-features my-app-vm custom-persist.my_ssh_known_hosts_file file:user:user:0600:/home/user/.ssh/known_hosts
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -95,11 +95,11 @@ To create one that has no PCI devices attached, such as for ``sys-firewall``:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-create -C DispVM -l green <SERVICE_QUBE>
|
||||
qvm-prefs <SERVICE_QUBE> autostart true
|
||||
qvm-prefs <SERVICE_QUBE> netvm <NET_QUBE>
|
||||
qvm-prefs <SERVICE_QUBE> provides_network true
|
||||
qvm-features <SERVICE_QUBE> appmenus-dispvm ''
|
||||
$ qvm-create -C DispVM -l green <SERVICE_QUBE>
|
||||
$ qvm-prefs <SERVICE_QUBE> autostart true
|
||||
$ qvm-prefs <SERVICE_QUBE> netvm <NET_QUBE>
|
||||
$ qvm-prefs <SERVICE_QUBE> provides_network true
|
||||
$ qvm-features <SERVICE_QUBE> appmenus-dispvm ''
|
||||
|
||||
|
||||
|
||||
|
@ -111,13 +111,13 @@ To create one with a PCI device attached such as for ``sys-net`` or ``sys-usb``,
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-create -C DispVM -l red <SERVICE_QUBE>
|
||||
qvm-prefs <SERVICE_QUBE> virt_mode hvm
|
||||
qvm-service <SERVICE_QUBE> meminfo-writer off
|
||||
qvm-pci attach --persistent <SERVICE_QUBE> dom0:<BDF>
|
||||
qvm-prefs <SERVICE_QUBE> autostart true
|
||||
qvm-prefs <SERVICE_QUBE> netvm ''
|
||||
qvm-features <SERVICE_QUBE> appmenus-dispvm ''
|
||||
$ qvm-create -C DispVM -l red <SERVICE_QUBE>
|
||||
$ qvm-prefs <SERVICE_QUBE> virt_mode hvm
|
||||
$ qvm-service <SERVICE_QUBE> meminfo-writer off
|
||||
$ qvm-pci attach --persistent <SERVICE_QUBE> dom0:<BDF>
|
||||
$ qvm-prefs <SERVICE_QUBE> autostart true
|
||||
$ qvm-prefs <SERVICE_QUBE> netvm ''
|
||||
$ qvm-features <SERVICE_QUBE> appmenus-dispvm ''
|
||||
|
||||
|
||||
|
||||
|
@ -125,7 +125,7 @@ Optionally, if this disposable will also provide network access to other qubes:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-prefs <SERVICE_QUBE> provides_network true
|
||||
$ qvm-prefs <SERVICE_QUBE> provides_network true
|
||||
|
||||
|
||||
|
||||
|
@ -133,7 +133,7 @@ Next, set the old service qube’s autostart to false, and update any references
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-prefs sys-firewall netvm <SERVICE_QUBE>
|
||||
$ qvm-prefs sys-firewall netvm <SERVICE_QUBE>
|
||||
|
||||
|
||||
|
||||
|
@ -143,17 +143,17 @@ Here is an example of a complete ``sys-net`` replacement:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-create -C DispVM -l red sys-net2
|
||||
qvm-prefs sys-net2 virt_mode hvm
|
||||
qvm-service sys-net2 meminfo-writer off
|
||||
qvm-pci attach --persistent sys-net2 dom0:00_1a.0
|
||||
qvm-prefs sys-net2 autostart true
|
||||
qvm-prefs sys-net2 netvm ''
|
||||
qvm-features sys-net2 appmenus-dispvm ''
|
||||
qvm-prefs sys-net2 provides_network true
|
||||
qvm-prefs sys-net autostart false
|
||||
qvm-prefs sys-firewall netvm sys-net2
|
||||
qubes-prefs clockvm sys-net2
|
||||
$ qvm-create -C DispVM -l red sys-net2
|
||||
$ qvm-prefs sys-net2 virt_mode hvm
|
||||
$ qvm-service sys-net2 meminfo-writer off
|
||||
$ qvm-pci attach --persistent sys-net2 dom0:00_1a.0
|
||||
$ qvm-prefs sys-net2 autostart true
|
||||
$ qvm-prefs sys-net2 netvm ''
|
||||
$ qvm-features sys-net2 appmenus-dispvm ''
|
||||
$ qvm-prefs sys-net2 provides_network true
|
||||
$ qvm-prefs sys-net autostart false
|
||||
$ qvm-prefs sys-firewall netvm sys-net2
|
||||
$ qubes-prefs clockvm sys-net2
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -16,8 +16,8 @@ To increase the minimum size of the video RAM buffer:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-features dom0 gui-videoram-min $(($WIDTH * $HEIGHT * 4 / 1024))
|
||||
qvm-features dom0 gui-videoram-overhead 0
|
||||
$ qvm-features dom0 gui-videoram-min $(($WIDTH * $HEIGHT * 4 / 1024))
|
||||
$ qvm-features dom0 gui-videoram-overhead 0
|
||||
|
||||
|
||||
Where ``$WIDTH`` × ``$HEIGHT`` is the maximum desktop size that you anticipate needing. For example, if you expect to use a 1080p display and a 4k display side-by-side, that is ``(1920 + 3840) × 2160 × 4 / 1024 = 48600``, or slightly more than 48 MiB per qube. After making these adjustments, the qubes need to be restarted.
|
||||
|
@ -26,7 +26,7 @@ In the case of multiple display with different orientations or if you plug/unplu
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-features dom0 gui-videoram-min $(xrandr --verbose | grep "Screen 0" | sed -e 's/.*current //' -e 's/\,.*//' | awk '{print $1*$3*4/1024}')
|
||||
$ qvm-features dom0 gui-videoram-min $(xrandr --verbose | grep "Screen 0" | sed -e 's/.*current //' -e 's/\,.*//' | awk '{print $1*$3*4/1024}')
|
||||
|
||||
|
||||
The amount of memory allocated per qube is the maximum of:
|
||||
|
|
|
@ -22,22 +22,22 @@ In ``dom0``, enable the formula for ``sys-gui`` with pillar data:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubesctl top.enable qvm.sys-gui
|
||||
sudo qubesctl top.enable qvm.sys-gui pillar=True
|
||||
$ sudo qubesctl top.enable qvm.sys-gui
|
||||
$ sudo qubesctl top.enable qvm.sys-gui pillar=True
|
||||
|
||||
|
||||
then, execute it:
|
||||
|
||||
.. code:: console
|
||||
|
||||
sudo qubesctl --all state.highstate
|
||||
$ sudo qubesctl --all state.highstate
|
||||
|
||||
|
||||
You can now disable the ``sys-gui`` formula:
|
||||
|
||||
.. code:: console
|
||||
|
||||
sudo qubesctl top.disable qvm.sys-gui
|
||||
$ sudo qubesctl top.disable qvm.sys-gui
|
||||
|
||||
|
||||
At this point, you need to shutdown all your running qubes as the ``default_guivm`` qubes global property has been set to ``sys-gui``. In order to use ``sys-gui`` as GUI domain, you need to logout and, in the top right corner, select ``lightdm`` session type to **GUI domain (sys-gui)**. Once logged, you are running ``sys-gui`` as fullscreen window and you can perform any operation as if you would be in ``dom0`` desktop.
|
||||
|
@ -58,29 +58,29 @@ In ``dom0``, enable the formula for ``sys-gui-gpu`` with pillar data:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubesctl top.enable qvm.sys-gui-gpu
|
||||
sudo qubesctl top.enable qvm.sys-gui-gpu pillar=True
|
||||
$ sudo qubesctl top.enable qvm.sys-gui-gpu
|
||||
$ sudo qubesctl top.enable qvm.sys-gui-gpu pillar=True
|
||||
|
||||
|
||||
then, execute it:
|
||||
|
||||
.. code:: console
|
||||
|
||||
sudo qubesctl --all state.highstate
|
||||
$ sudo qubesctl --all state.highstate
|
||||
|
||||
|
||||
You can now disable the ``sys-gui-gpu`` formula:
|
||||
|
||||
.. code:: console
|
||||
|
||||
sudo qubesctl top.disable qvm.sys-gui-gpu
|
||||
$ sudo qubesctl top.disable qvm.sys-gui-gpu
|
||||
|
||||
|
||||
One more step is needed: attaching the actual GPU to ``sys-gui-gpu``. This can be done either manually via ``qvm-pci`` (remember to enable permissive option), or via:
|
||||
|
||||
.. code:: console
|
||||
|
||||
sudo qubesctl state.sls qvm.sys-gui-gpu-attach-gpu
|
||||
$ sudo qubesctl state.sls qvm.sys-gui-gpu-attach-gpu
|
||||
|
||||
|
||||
The latter option assumes Intel graphics card (it has hardcoded PCI address). If you don’t have Intel graphics card, please use the former method with ``qvm-pci`` (see :doc:`How to use PCI devices </user/how-to-guides/how-to-use-pci-devices>`).
|
||||
|
@ -105,29 +105,29 @@ In ``dom0``, enable the formula for ``sys-gui-vnc`` with pillar data:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubesctl top.enable qvm.sys-gui-vnc
|
||||
sudo qubesctl top.enable qvm.sys-gui-vnc pillar=True
|
||||
$ sudo qubesctl top.enable qvm.sys-gui-vnc
|
||||
$ sudo qubesctl top.enable qvm.sys-gui-vnc pillar=True
|
||||
|
||||
|
||||
then, execute it:
|
||||
|
||||
.. code:: console
|
||||
|
||||
sudo qubesctl --all state.highstate
|
||||
$ sudo qubesctl --all state.highstate
|
||||
|
||||
|
||||
You can now disable the ``sys-gui-vnc`` formula:
|
||||
|
||||
.. code:: console
|
||||
|
||||
sudo qubesctl top.disable qvm.sys-gui-vnc
|
||||
$ sudo qubesctl top.disable qvm.sys-gui-vnc
|
||||
|
||||
|
||||
At this point, you need to shutdown all your running qubes as the ``default_guivm`` qubes global property has been set to ``sys-gui-vnc``. Then, you can start ``sys-gui-vnc``:
|
||||
|
||||
.. code:: console
|
||||
|
||||
qvm-start sys-gui-vnc
|
||||
$ qvm-start sys-gui-vnc
|
||||
|
||||
|
||||
A VNC server session is running on ``localhost:5900`` in ``sys-gui-vnc``. In order to reach the ``VNC`` server, we encourage to not connect ``sys-gui-vnc`` to a ``NetVM`` but rather to use another qube for remote access, say ``sys-remote``. First, you need to bind port 5900 of ``sys-gui-vnc`` into a ``sys-remote`` local port (you may want to use another port than 5900 to reach ``sys-remote`` from the outside). For that, use ``qubes.ConnectTCP`` RPC service (see :doc:`Firewall </user/security-in-qubes/firewall>`. Then, you can use any ``VNC`` client to connect to you ``sys-remote`` on the chosen local port (5900 if you kept the default one). For the first connection, you will reach ``lightdm`` for which you can log as ``user`` where ``user`` refers to the first ``dom0`` user in ``qubes`` group and with corresponding ``dom0`` password.
|
||||
|
@ -195,14 +195,14 @@ and for every selected qubes not using default value for GUI domain property, fo
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-prefs personal guivm dom0
|
||||
$ qvm-prefs personal guivm dom0
|
||||
|
||||
|
||||
You are now able to delete the GUI domain, for example ``sys-gui-gpu``:
|
||||
|
||||
.. code:: console
|
||||
|
||||
qvm-remove -f sys-gui-gpu
|
||||
$ qvm-remove -f sys-gui-gpu
|
||||
|
||||
|
||||
.. |sys-gui| image:: /attachment/posts/guivm-hybrid.png
|
||||
|
|
|
@ -48,7 +48,7 @@ To downgrade a specific package in dom0:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update --action=downgrade package-version
|
||||
$ sudo qubes-dom0-update --action=downgrade package-version
|
||||
|
||||
|
||||
|
||||
|
@ -60,7 +60,7 @@ To re-install a package in dom0:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update --action=reinstall package
|
||||
$ sudo qubes-dom0-update --action=reinstall package
|
||||
|
||||
|
||||
|
||||
|
@ -72,7 +72,7 @@ If you’ve installed a package such as anti-evil-maid, you can remove it with t
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo dnf remove anti-evil-maid
|
||||
$ sudo dnf remove anti-evil-maid
|
||||
|
||||
|
||||
|
||||
|
@ -96,9 +96,9 @@ To temporarily enable any of these repos, use the ``--enablerepo=<repo-name>`` o
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update --enablerepo=qubes-dom0-current-testing
|
||||
sudo qubes-dom0-update --enablerepo=qubes-dom0-security-testing
|
||||
sudo qubes-dom0-update --enablerepo=qubes-dom0-unstable
|
||||
$ sudo qubes-dom0-update --enablerepo=qubes-dom0-current-testing
|
||||
$ sudo qubes-dom0-update --enablerepo=qubes-dom0-security-testing
|
||||
$ sudo qubes-dom0-update --enablerepo=qubes-dom0-unstable
|
||||
|
||||
|
||||
|
||||
|
@ -154,7 +154,7 @@ Example
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update --enablerepo=qubes-dom0-unstable kernel kernel-qubes-vm
|
||||
$ sudo qubes-dom0-update --enablerepo=qubes-dom0-unstable kernel kernel-qubes-vm
|
||||
|
||||
|
||||
|
||||
|
@ -168,7 +168,7 @@ Replace the example version numbers with the one you are upgrading to.
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo dracut -f /boot/efi/EFI/qubes/initramfs-4.14.35-1.pvops.qubes.x86_64.img 4.14.35-1.pvops.qubes.x86_64
|
||||
$ sudo dracut -f /boot/efi/EFI/qubes/initramfs-4.14.35-1.pvops.qubes.x86_64.img 4.14.35-1.pvops.qubes.x86_64
|
||||
|
||||
|
||||
|
||||
|
@ -178,7 +178,7 @@ Grub2
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
|
||||
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
|
||||
|
||||
|
||||
|
||||
|
@ -192,14 +192,25 @@ Changing default kernel
|
|||
|
||||
This section describes changing the default kernel in dom0. It is sometimes needed if you have upgraded to a newer kernel and are having problems booting, for example. On the next kernel update, the default will revert to the newest.
|
||||
|
||||
|
||||
.. code:: console
|
||||
|
||||
sudo nano /etc/default/grub
|
||||
[update the following two lines, add if needed]
|
||||
$ sudo nano /etc/default/grub
|
||||
|
||||
|
||||
Update the following two lines, add if needed:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
GRUB_DISABLE_SUBMENU=false
|
||||
GRUB_SAVEDEFAULT=true
|
||||
[save and exit nano]
|
||||
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
|
||||
|
||||
|
||||
Save and exit nano. Regenerate the GRUB 2 configuration.
|
||||
|
||||
.. code:: console
|
||||
|
||||
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ In dom0, use ``qubes-dom0-update``:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update qubes-repo-contrib
|
||||
$ sudo qubes-dom0-update qubes-repo-contrib
|
||||
|
||||
|
||||
In a Fedora-based template, use ``dnf``:
|
||||
|
@ -31,7 +31,7 @@ In a Fedora-based template, use ``dnf``:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo dnf install qubes-repo-contrib
|
||||
$ sudo dnf install qubes-repo-contrib
|
||||
|
||||
|
||||
In a Debian-based template, use ``apt``:
|
||||
|
@ -40,7 +40,7 @@ In a Debian-based template, use ``apt``:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo apt update && sudo apt install qubes-repo-contrib
|
||||
$ sudo apt update && sudo apt install qubes-repo-contrib
|
||||
|
||||
|
||||
The new repository definition will be in the usual location for your distro, and it will follow the naming pattern ``qubes-contrib-*``, depending on your Qubes release and whether it is in dom0 or a template. For example, in a Fedora template on Qubes 4.0, the new repository definition would be:
|
||||
|
@ -65,7 +65,7 @@ For example, to install ``qvm-screenshot-tool`` in dom0:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update --clean qvm-screenshot-tool
|
||||
$ sudo qubes-dom0-update --clean qvm-screenshot-tool
|
||||
|
||||
|
||||
Please see the package’s README for specific installation and setup instructions.
|
||||
|
|
|
@ -117,6 +117,6 @@ The safest way to remove (most of) KDE is:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo dnf remove kdelibs plasma-workspace
|
||||
$ sudo dnf remove kdelibs plasma-workspace
|
||||
|
||||
|
||||
|
|
|
@ -246,8 +246,8 @@ Both debian-9 and fedora-26 templates already have grub and related tools preins
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-prefs <clonetemplatename> virt_mode hvm
|
||||
qvm-prefs <clonetemplatename> kernel ''
|
||||
$ qvm-prefs <clonetemplatename> virt_mode hvm
|
||||
$ qvm-prefs <clonetemplatename> kernel ''
|
||||
|
||||
|
||||
|
||||
|
@ -263,7 +263,7 @@ If you are using a distribution kernel package (``kernel`` package), the initram
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo dracut -f /boot/initramfs-4.15.14-200.fc26.x86_64.img 4.15.14-200.fc26.x86_64
|
||||
$ sudo dracut -f /boot/initramfs-4.15.14-200.fc26.x86_64.img 4.15.14-200.fc26.x86_64
|
||||
|
||||
|
||||
|
||||
|
@ -271,7 +271,7 @@ Once the kernel is installed, you need to setup ``grub2`` by running:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo grub2-install /dev/xvda
|
||||
$ sudo grub2-install /dev/xvda
|
||||
|
||||
|
||||
|
||||
|
@ -279,7 +279,7 @@ Finally, you need to create a GRUB configuration. You may want to adjust some se
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
|
||||
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
|
||||
|
||||
|
||||
|
||||
|
@ -321,7 +321,7 @@ Install distribution kernel image, kernel headers and the grub.
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo apt install linux-image-amd64 linux-headers-amd64 grub2 qubes-kernel-vm-support
|
||||
$ sudo apt install linux-image-amd64 linux-headers-amd64 grub2 qubes-kernel-vm-support
|
||||
|
||||
|
||||
|
||||
|
@ -329,7 +329,7 @@ If you are doing that on a qube based on “Debian Minimal” template, a grub g
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo grub-install /dev/xvda
|
||||
$ sudo grub-install /dev/xvda
|
||||
|
||||
|
||||
|
||||
|
@ -383,7 +383,7 @@ Run DKMS. Replace this with actual kernel version.
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo dkms autoinstall -k <kernel-version>
|
||||
$ sudo dkms autoinstall -k <kernel-version>
|
||||
|
||||
|
||||
For example.
|
||||
|
@ -392,7 +392,7 @@ For example.
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo dkms autoinstall -k 4.19.0-6-amd64
|
||||
$ sudo dkms autoinstall -k 4.19.0-6-amd64
|
||||
|
||||
|
||||
Update initramfs.
|
||||
|
@ -401,7 +401,7 @@ Update initramfs.
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo update-initramfs -u
|
||||
$ sudo update-initramfs -u
|
||||
|
||||
|
||||
The output should look like this:
|
||||
|
|
|
@ -42,7 +42,7 @@ Use either GUI tool Qube Settings (``qubes-vm-settings``) or the CLI tool ``qvm-
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-volume extend <vm_name>:root <size>
|
||||
$ qvm-volume extend <vm_name>:root <size>
|
||||
|
||||
|
||||
|
||||
|
@ -50,7 +50,7 @@ OR
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-volume extend <vm_name>:private <size>
|
||||
$ qvm-volume extend <vm_name>:private <size>
|
||||
|
||||
|
||||
|
||||
|
@ -117,8 +117,8 @@ Or you can take the risk of reducing the size of the disk. For example, to reduc
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-shutdown qube1
|
||||
sudo lvresize --size 1024M /dev/qubes_dom0/vm-qube1-private
|
||||
$ qvm-shutdown qube1
|
||||
$ sudo lvresize --size 1024M /dev/qubes_dom0/vm-qube1-private
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ You can query qvm-pool to list available storage drivers:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-pool --help-drivers
|
||||
$ qvm-pool --help-drivers
|
||||
|
||||
|
||||
qvm-pool driver explanation:
|
||||
|
@ -50,8 +50,8 @@ First, collect some information in a dom0 terminal:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo pvs
|
||||
sudo lvs
|
||||
$ sudo pvs
|
||||
$ sudo lvs
|
||||
|
||||
|
||||
Take note of the VG and thin pool names for your second drive., then register it with Qubes:
|
||||
|
@ -61,7 +61,7 @@ Take note of the VG and thin pool names for your second drive., then register it
|
|||
# <pool_name> is a freely chosen pool name
|
||||
# <vg_name> is LVM volume group name
|
||||
# <thin_pool_name> is LVM thin pool name
|
||||
qvm-pool --add <pool_name> lvm_thin -o volume_group=<vg_name>,thin_pool=<thin_pool_name>,revisions_to_keep=2
|
||||
$ qvm-pool --add <pool_name> lvm_thin -o volume_group=<vg_name>,thin_pool=<thin_pool_name>,revisions_to_keep=2
|
||||
|
||||
|
||||
|
||||
|
@ -85,7 +85,7 @@ To register the storage to qubes:
|
|||
|
||||
# <pool_name> is a freely chosen pool name
|
||||
# <dir_path> is the mounted path to the second btrfs storage
|
||||
qvm-pool --add <pool_name> file-reflink -o dir_path=<dir_path>,revisions_to_keep=2
|
||||
$ qvm-pool --add <pool_name> file-reflink -o dir_path=<dir_path>,revisions_to_keep=2
|
||||
|
||||
|
||||
Using the new pool
|
||||
|
@ -96,22 +96,22 @@ Now, you can create qubes in that pool:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-create -P <pool_name> --label red <vmname>
|
||||
$ qvm-create -P <pool_name> --label red <vmname>
|
||||
|
||||
|
||||
It isn’t possible to directly migrate an existing qube to the new pool, but you can clone it there, then remove the old one:
|
||||
|
||||
.. code:: console
|
||||
|
||||
qvm-clone -P <pool_name> <sourceVMname> <cloneVMname>
|
||||
qvm-remove <sourceVMname>
|
||||
$ qvm-clone -P <pool_name> <sourceVMname> <cloneVMname>
|
||||
$ qvm-remove <sourceVMname>
|
||||
|
||||
|
||||
If that was a template, or other qube referenced elsewhere (netVM or such), you will need to adjust those references manually after moving. For example:
|
||||
|
||||
.. code:: console
|
||||
|
||||
qvm-prefs <appvmname_based_on_old_template> template <new_template_name>
|
||||
$ qvm-prefs <appvmname_based_on_old_template> template <new_template_name>
|
||||
|
||||
|
||||
Example setup of second drive.
|
||||
|
@ -122,8 +122,8 @@ Assuming the secondary hard disk is at /dev/sdb , you can encrypt the drive as f
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo cryptsetup luksFormat --sector-size=512 /dev/sdb
|
||||
sudo blkid /dev/sdb
|
||||
$ sudo cryptsetup luksFormat --sector-size=512 /dev/sdb
|
||||
$ sudo blkid /dev/sdb
|
||||
|
||||
|
||||
|
||||
|
@ -146,28 +146,28 @@ First create the physical volume:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo pvcreate /dev/mapper/luks-b20975aa-8318-433d-8508-6c23982c6cde
|
||||
$ sudo pvcreate /dev/mapper/luks-b20975aa-8318-433d-8508-6c23982c6cde
|
||||
|
||||
|
||||
Then create the LVM volume group, we will use for example “qubes” as the :
|
||||
|
||||
.. code:: console
|
||||
|
||||
sudo vgcreate qubes /dev/mapper/luks-b20975aa-8318-433d-8508-6c23982c6cde
|
||||
$ sudo vgcreate qubes /dev/mapper/luks-b20975aa-8318-433d-8508-6c23982c6cde
|
||||
|
||||
|
||||
And then use “poolhd0” as the (LVM thin pool name):
|
||||
|
||||
.. code:: console
|
||||
|
||||
sudo lvcreate -T -n poolhd0 -l +100%FREE qubes
|
||||
$ sudo lvcreate -T -n poolhd0 -l +100%FREE qubes
|
||||
|
||||
|
||||
Finally we will tell Qubes to add a new pool on the just created thin pool:
|
||||
|
||||
.. code:: console
|
||||
|
||||
qvm-pool --add poolhd0_qubes lvm_thin -o volume_group=qubes,thin_pool=poolhd0,revisions_to_keep=2
|
||||
$ qvm-pool --add poolhd0_qubes lvm_thin -o volume_group=qubes,thin_pool=poolhd0,revisions_to_keep=2
|
||||
|
||||
|
||||
For Btrfs
|
||||
|
@ -179,22 +179,22 @@ First create the physical volume:
|
|||
.. code:: console
|
||||
|
||||
# <label> Btrfs Label
|
||||
sudo mkfs.btrfs -L <label> /dev/mapper/luks-b20975aa-8318-433d-8508-6c23982c6cde
|
||||
$ sudo mkfs.btrfs -L <label> /dev/mapper/luks-b20975aa-8318-433d-8508-6c23982c6cde
|
||||
|
||||
|
||||
Then mount the new Btrfs to a temporary path:
|
||||
|
||||
.. code:: console
|
||||
|
||||
sudo mkdir -p /mnt/new_qube_storage
|
||||
sudo mount /dev/mapper/luks-b20975aa-8318-433d-8508-6c23982c6cde /mnt/new_qube_storage
|
||||
$ sudo mkdir -p /mnt/new_qube_storage
|
||||
$ sudo mount /dev/mapper/luks-b20975aa-8318-433d-8508-6c23982c6cde /mnt/new_qube_storage
|
||||
|
||||
|
||||
Create a subvolume to hold the data:
|
||||
|
||||
.. code:: console
|
||||
|
||||
sudo btrfs subvolume create /mnt/new_qube_storage/qubes
|
||||
$ sudo btrfs subvolume create /mnt/new_qube_storage/qubes
|
||||
|
||||
|
||||
|
||||
|
@ -202,8 +202,8 @@ Unmount the temporary Btrfs filesystem:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo umount /mnt/new_qube_storage
|
||||
rmdir /mnt/new_qube_storage
|
||||
$ sudo umount /mnt/new_qube_storage
|
||||
$ rmdir /mnt/new_qube_storage
|
||||
|
||||
|
||||
Mount the subvolume with compression enabled if desired:
|
||||
|
@ -212,21 +212,21 @@ Mount the subvolume with compression enabled if desired:
|
|||
|
||||
# <compression> zlib|lzo|zstd
|
||||
# <subvol> btrfs subvolume "qubes" in this example
|
||||
sudo mount /dev/mapper/luks-b20975aa-8318-433d-8508-6c23982c6cde /var/lib/qubes_newpool -o compress=<compression>,subvol=qubes
|
||||
$ sudo mount /dev/mapper/luks-b20975aa-8318-433d-8508-6c23982c6cde /var/lib/qubes_newpool -o compress=<compression>,subvol=qubes
|
||||
|
||||
|
||||
Finally we will tell Qubes to add a new pool on the just created Btrfs subvolume:
|
||||
|
||||
.. code:: console
|
||||
|
||||
qvm-pool --add poolhd0_qubes file-reflink -o dir_path=/var/lib/qubes_newpool,revisions_to_keep=2
|
||||
$ qvm-pool --add poolhd0_qubes file-reflink -o dir_path=/var/lib/qubes_newpool,revisions_to_keep=2
|
||||
|
||||
|
||||
By default VMs will be created on the main Qubes disk (i.e. a small SSD), to create them on this secondary drive do the following on a dom0 terminal:
|
||||
|
||||
.. code:: console
|
||||
|
||||
qvm-create -P poolhd0_qubes --label red unstrusted-hdd
|
||||
$ qvm-create -P poolhd0_qubes --label red unstrusted-hdd
|
||||
|
||||
|
||||
Verify that corresponding lines were added to /etc/fstab and /etc/cryptab to enable auto mounting of the new pool.
|
||||
|
|
|
@ -46,7 +46,7 @@ Alternatively, to create an empty standalone from the dom0 command line:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-create --class StandaloneVM --label <YOUR_COLOR> --property virt_mode=hvm <NEW_STANDALONE_NAME>
|
||||
$ qvm-create --class StandaloneVM --label <YOUR_COLOR> --property virt_mode=hvm <NEW_STANDALONE_NAME>
|
||||
|
||||
|
||||
|
||||
|
@ -54,7 +54,7 @@ Or to create a standalone copied from a template:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-create --class StandaloneVM --label <YOUR_COLOR> --property virt_mode=hvm --template <TEMPLATE_QUBE_NAME> <NEW_STANDALONE_NAME>
|
||||
$ qvm-create --class StandaloneVM --label <YOUR_COLOR> --property virt_mode=hvm --template <TEMPLATE_QUBE_NAME> <NEW_STANDALONE_NAME>
|
||||
|
||||
|
||||
|
||||
|
@ -90,7 +90,7 @@ Qubes are template-based (i.e., :ref:`app qubes <user/reference/glossary:app qub
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-create my-new-vm --class StandaloneVM --property virt_mode=hvm --property kernel='' --label=green
|
||||
$ qvm-create my-new-vm --class StandaloneVM --property virt_mode=hvm --property kernel='' --label=green
|
||||
|
||||
|
||||
|
||||
|
@ -114,7 +114,7 @@ You will have to boot the qube with the installation media “attached” to it.
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-start <YOUR_HVM> --cdrom=/dev/cdrom
|
||||
$ qvm-start <YOUR_HVM> --cdrom=/dev/cdrom
|
||||
|
||||
|
||||
|
||||
|
@ -122,7 +122,7 @@ You will have to boot the qube with the installation media “attached” to it.
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-start <YOUR_HVM> --cdrom=dom0:/usr/local/iso/<YOUR_INSTALLER.ISO>
|
||||
$ qvm-start <YOUR_HVM> --cdrom=dom0:/usr/local/iso/<YOUR_INSTALLER.ISO>
|
||||
|
||||
|
||||
|
||||
|
@ -130,7 +130,7 @@ You will have to boot the qube with the installation media “attached” to it.
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-start <YOUR_HVM> --cdrom=<YOUR_OTHER_QUBE>:/home/user/<YOUR_INSTALLER.ISO>
|
||||
$ qvm-start <YOUR_HVM> --cdrom=<YOUR_OTHER_QUBE>:/home/user/<YOUR_INSTALLER.ISO>
|
||||
|
||||
|
||||
|
||||
|
@ -201,7 +201,7 @@ In order to create an HVM template, you use the following command, suitably adap
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-create --class TemplateVM <YOUR_HVM_TEMPLATE_NAME> --property virt_mode=HVM --property kernel='' -l <YOUR_COLOR>
|
||||
$ qvm-create --class TemplateVM <YOUR_HVM_TEMPLATE_NAME> --property virt_mode=HVM --property kernel='' -l <YOUR_COLOR>
|
||||
|
||||
|
||||
|
||||
|
@ -377,7 +377,7 @@ In a Debian app qube, install ``qemu-utils`` and ``unzip``:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo apt install qemu-utils unzip
|
||||
$ sudo apt install qemu-utils unzip
|
||||
|
||||
|
||||
|
||||
|
@ -385,7 +385,7 @@ In a Fedora app qube:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo dnf install qemu-img
|
||||
$ sudo dnf install qemu-img
|
||||
|
||||
|
||||
|
||||
|
@ -417,7 +417,7 @@ Copy the root image file from the originating qube (here called ``untrusted``) t
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-run --pass-io untrusted 'cat "/media/user/externalhd/win10.raw"' > /home/user/win10-root.img
|
||||
$ qvm-run --pass-io untrusted 'cat "/media/user/externalhd/win10.raw"' > /home/user/win10-root.img
|
||||
|
||||
|
||||
|
||||
|
@ -425,7 +425,7 @@ From within dom0, create a new HVM (here called ``win10``) with the root image w
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-create --property=virt_mode=hvm --property=memory=4096 --property=kernel='' --label red --standalone --root-move-from /home/user/win10-root.img win10
|
||||
$ qvm-create --property=virt_mode=hvm --property=memory=4096 --property=kernel='' --label red --standalone --root-move-from /home/user/win10-root.img win10
|
||||
|
||||
|
||||
|
||||
|
@ -433,7 +433,7 @@ Start ``win10``:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-start win10
|
||||
$ qvm-start win10
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ First, make sure you have the latest ``qubes-mgmt-salt-dom0-virtual-machines`` p
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubesctl state.sls qvm.usb-keyboard
|
||||
$ sudo qubesctl state.sls qvm.usb-keyboard
|
||||
|
||||
|
||||
|
||||
|
@ -148,7 +148,7 @@ You can create a USB qube using the management stack by executing the following
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubesctl state.sls qvm.sys-usb
|
||||
$ sudo qubesctl state.sls qvm.sys-usb
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ For the private volume associated with a VM named *vmname*, you may inspect the
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-volume info vmname:private
|
||||
$ qvm-volume info vmname:private
|
||||
|
||||
|
||||
|
||||
|
@ -22,7 +22,7 @@ The output of the above command will also display the “Available revisions (fo
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-volume config vmname:private revisions_to_keep 2
|
||||
$ qvm-volume config vmname:private revisions_to_keep 2
|
||||
|
||||
|
||||
|
||||
|
@ -30,6 +30,6 @@ With the VM stopped, you may revert to an older snapshot of the private volume f
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-volume revert vmname:private <revision>
|
||||
$ qvm-volume revert vmname:private <revision>
|
||||
|
||||
|
||||
|
|
|
@ -64,8 +64,8 @@ To temporarily enable any of these repos, use the ``--enablerepo=<repo-name>`` o
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-template --enablerepo=qubes-templates-itl-testing list --available
|
||||
qvm-template --enablerepo=qubes-templates-itl-testing install <template_name>
|
||||
$ qvm-template --enablerepo=qubes-templates-itl-testing list --available
|
||||
$ qvm-template --enablerepo=qubes-templates-itl-testing install <template_name>
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ Note that dom0 in R2 is based on Fedora 20, in contrast to Fedora 18 in previous
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update
|
||||
$ sudo qubes-dom0-update
|
||||
|
||||
|
||||
|
||||
|
@ -51,8 +51,8 @@ After this step you should have ``qubes-release-2-5`` in your Dom0. Important: i
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update qubes-dom0-dist-upgrade
|
||||
sudo qubes-dom0-update
|
||||
$ sudo qubes-dom0-update qubes-dom0-dist-upgrade
|
||||
$ sudo qubes-dom0-update
|
||||
|
||||
|
||||
|
||||
|
@ -66,7 +66,7 @@ After this step you should have ``qubes-release-2-5`` in your Dom0. Important: i
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update qubes-template-fedora-20-x64
|
||||
$ sudo qubes-dom0-update qubes-template-fedora-20-x64
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ By default, in Qubes R1, there is only one template, however users are free to c
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo yum install qubes-upgrade-vm
|
||||
$ sudo yum install qubes-upgrade-vm
|
||||
|
||||
|
||||
|
||||
|
@ -29,7 +29,7 @@ By default, in Qubes R1, there is only one template, however users are free to c
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo yum update
|
||||
$ sudo yum update
|
||||
|
||||
|
||||
The installer (yum) will prompt to accept the new Qubes R2 signing key:
|
||||
|
@ -72,7 +72,7 @@ Be sure to do steps described in this section after *all* your template and stan
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update qubes-release
|
||||
$ sudo qubes-dom0-update qubes-release
|
||||
|
||||
|
||||
This should install ``qubes-release-1-6`` in your Dom0.
|
||||
|
@ -81,7 +81,7 @@ Be sure to do steps described in this section after *all* your template and stan
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update --releasever=2
|
||||
$ sudo qubes-dom0-update --releasever=2
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ By default, in Qubes R1, there is only one template, however users are free to c
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo yum install qubes-upgrade-vm
|
||||
$ sudo yum install qubes-upgrade-vm
|
||||
|
||||
|
||||
|
||||
|
@ -27,7 +27,7 @@ By default, in Qubes R1, there is only one template, however users are free to c
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo yum update
|
||||
$ sudo yum update
|
||||
|
||||
|
||||
The installer (yum) will prompt to accept the new Qubes R2 signing key:
|
||||
|
@ -88,7 +88,7 @@ Be sure to do steps described in this section after *all* your template and stan
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update qubes-release
|
||||
$ sudo qubes-dom0-update qubes-release
|
||||
|
||||
|
||||
This should install ``qubes-release-1-6`` in your Dom0.
|
||||
|
@ -97,7 +97,7 @@ Be sure to do steps described in this section after *all* your template and stan
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update --releasever=1 qubes-dist-upgrade
|
||||
$ sudo qubes-dom0-update --releasever=1 qubes-dist-upgrade
|
||||
|
||||
|
||||
|
||||
|
@ -105,7 +105,7 @@ Be sure to do steps described in this section after *all* your template and stan
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dist-upgrade
|
||||
$ sudo qubes-dist-upgrade
|
||||
|
||||
|
||||
|
||||
|
@ -117,7 +117,7 @@ Be sure to do steps described in this section after *all* your template and stan
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dist-upgrade
|
||||
$ sudo qubes-dist-upgrade
|
||||
|
||||
|
||||
again. This will start second stage of upgrade, here most packages will be upgraded, so this will take a while.
|
||||
|
|
|
@ -23,7 +23,7 @@ It is critical to complete this step **before** proceeding to dom0 upgrade. Othe
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo yum update
|
||||
$ sudo yum update
|
||||
|
||||
|
||||
|
||||
|
@ -39,7 +39,7 @@ It is critical to complete this step **before** proceeding to dom0 upgrade. Othe
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo yum --enablerepo=qubes-vm-r2b3-current update
|
||||
$ sudo yum --enablerepo=qubes-vm-r2b3-current update
|
||||
|
||||
|
||||
|
||||
|
@ -59,7 +59,7 @@ Be sure to do steps described in this section after *all* your template and stan
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update qubes-release
|
||||
$ sudo qubes-dom0-update qubes-release
|
||||
|
||||
|
||||
This should install ``qubes-release-2-3.1`` in your Dom0.
|
||||
|
@ -68,7 +68,7 @@ Be sure to do steps described in this section after *all* your template and stan
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update --enablerepo=qubes-dom0-r2b3-current
|
||||
$ sudo qubes-dom0-update --enablerepo=qubes-dom0-r2b3-current
|
||||
|
||||
|
||||
|
||||
|
@ -78,7 +78,7 @@ Be sure to do steps described in this section after *all* your template and stan
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-shutdown --all --wait
|
||||
$ qvm-shutdown --all --wait
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ Upgrade Fedora template:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo yum install qubes-upgrade-vm
|
||||
$ sudo yum install qubes-upgrade-vm
|
||||
|
||||
|
||||
|
||||
|
@ -37,7 +37,7 @@ Upgrade Fedora template:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo yum update
|
||||
$ sudo yum update
|
||||
|
||||
|
||||
You’ll need to accept “Qubes Release 3 Signing Key” - it is delivered by signed qubes-upgrade-vm package (verify that the message is about local file), so you don’t need to manually verify it.
|
||||
|
@ -56,9 +56,8 @@ Upgrade Debian template:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo cp /etc/apt/sources.list.d/qubes-r2.list
|
||||
/etc/apt/sources.list.d/qubes-r3-upgrade.list
|
||||
sudo sed -i 's/r2/r3.0/' /etc/apt/sources.list.d/qubes-r3-upgrade.list
|
||||
$ sudo cp /etc/apt/sources.list.d/qubes-r2.list /etc/apt/sources.list.d/qubes-r3-upgrade.list
|
||||
$ sudo sed -i 's/r2/r3.0/' /etc/apt/sources.list.d/qubes-r3-upgrade.list
|
||||
|
||||
|
||||
|
||||
|
@ -66,8 +65,8 @@ Upgrade Debian template:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo apt-get update
|
||||
sudo apt-get dist-upgrade
|
||||
$ sudo apt-get update
|
||||
$ sudo apt-get dist-upgrade
|
||||
|
||||
|
||||
There will be some error messages during the process, but our tests does not revealed any negative consequences. Update of ``qubesdb-vm`` package will restart the service, which will fail (after 3min timeout), but you can ignore this problem for now. After completing the whole upgrade the service will be properly restarted.
|
||||
|
@ -88,7 +87,7 @@ Be sure to do steps described in this section after *all* your template and stan
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update qubes-release
|
||||
$ sudo qubes-dom0-update qubes-release
|
||||
|
||||
|
||||
This should install ``qubes-release-2-12`` in your Dom0.
|
||||
|
@ -97,7 +96,7 @@ Be sure to do steps described in this section after *all* your template and stan
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update --releasever=3.0
|
||||
$ sudo qubes-dom0-update --releasever=3.0
|
||||
|
||||
|
||||
After this step, until you reboot the system, most of the qvm-* tools will not work.
|
||||
|
@ -108,7 +107,7 @@ Be sure to do steps described in this section after *all* your template and stan
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo systemctl enable xenconsoled.service xenstored.service
|
||||
$ sudo systemctl enable xenconsoled.service xenstored.service
|
||||
|
||||
|
||||
|
||||
|
@ -126,7 +125,7 @@ Now, when you have dom0 upgraded, you can install new templates from Qubes R3.0
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update qubes-template-fedora-21
|
||||
$ sudo qubes-dom0-update qubes-template-fedora-21
|
||||
|
||||
|
||||
|
||||
|
@ -186,10 +185,10 @@ Because of above limitations, you will need to configure some of those manually.
|
|||
|
||||
.. code:: console
|
||||
|
||||
ip addr add 10.137.1.53/32 dev eth0
|
||||
ip route add 10.137.1.1/32 dev eth0
|
||||
ip route add via 10.137.1.1
|
||||
echo nameserver 10.137.1.1 > /etc/resolv.conf
|
||||
$ ip addr add 10.137.1.53/32 dev eth0
|
||||
$ ip route add 10.137.1.1/32 dev eth0
|
||||
$ ip route add via 10.137.1.1
|
||||
$ echo nameserver 10.137.1.1 > /etc/resolv.conf
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ Upgrade Fedora templates:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo yum install qubes-upgrade-vm
|
||||
$ sudo yum install qubes-upgrade-vm
|
||||
|
||||
|
||||
|
||||
|
@ -31,7 +31,7 @@ Upgrade Fedora templates:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo yum upgrade
|
||||
$ sudo yum upgrade
|
||||
|
||||
|
||||
|
||||
|
@ -49,8 +49,8 @@ Upgrade Debian (and Whonix) templates:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo cp /etc/apt/sources.list.d/qubes-r3.list /etc/apt/sources.list.d/qubes-r3-upgrade.list
|
||||
sudo sed -i 's/r3.0/r3.1/' /etc/apt/sources.list.d/qubes-r3-upgrade.list
|
||||
$ sudo cp /etc/apt/sources.list.d/qubes-r3.list /etc/apt/sources.list.d/qubes-r3-upgrade.list
|
||||
$ sudo sed -i 's/r3.0/r3.1/' /etc/apt/sources.list.d/qubes-r3-upgrade.list
|
||||
|
||||
|
||||
|
||||
|
@ -58,8 +58,8 @@ Upgrade Debian (and Whonix) templates:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo apt-get update
|
||||
sudo apt-get dist-upgrade
|
||||
$ sudo apt-get update
|
||||
$ sudo apt-get dist-upgrade
|
||||
|
||||
|
||||
|
||||
|
@ -67,7 +67,7 @@ Upgrade Debian (and Whonix) templates:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo rm -f /etc/apt/sources.list.d/qubes-r3-upgrade.list
|
||||
$ sudo rm -f /etc/apt/sources.list.d/qubes-r3-upgrade.list
|
||||
|
||||
|
||||
|
||||
|
@ -87,7 +87,7 @@ Upgrading dom0
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update --releasever=3.1
|
||||
$ sudo qubes-dom0-update --releasever=3.1
|
||||
|
||||
|
||||
At this point, most of the ``qvm-*`` tools will stop working until after you reboot the system.
|
||||
|
@ -110,6 +110,6 @@ Once you have upgraded dom0, you can install new templates from Qubes R3.1 repos
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update qubes-template-fedora-23
|
||||
$ sudo qubes-dom0-update qubes-template-fedora-23
|
||||
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ Upgrading dom0
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update --releasever=3.2 qubes-release
|
||||
$ sudo qubes-dom0-update --releasever=3.2 qubes-release
|
||||
|
||||
|
||||
|
||||
|
@ -31,7 +31,7 @@ Upgrading dom0
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update systemd-compat-libs perl-libwww-perl perl-Term-ANSIColor perl-Term-Cap gdk-pixbuf2-xlib speexdsp qubes-mgmt-salt-admin-tools lvm2
|
||||
$ sudo qubes-dom0-update systemd-compat-libs perl-libwww-perl perl-Term-ANSIColor perl-Term-Cap gdk-pixbuf2-xlib speexdsp qubes-mgmt-salt-admin-tools lvm2
|
||||
(...)
|
||||
Transaction Summary
|
||||
===============================================================
|
||||
|
@ -50,7 +50,7 @@ Upgrading dom0
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update
|
||||
$ sudo qubes-dom0-update
|
||||
|
||||
|
||||
|
||||
|
@ -118,7 +118,7 @@ Upgrade Fedora templates:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo dnf install --refresh qubes-upgrade-vm
|
||||
$ sudo dnf install --refresh qubes-upgrade-vm
|
||||
|
||||
|
||||
|
||||
|
@ -126,7 +126,7 @@ Upgrade Fedora templates:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo dnf upgrade --refresh
|
||||
$ sudo dnf upgrade --refresh
|
||||
|
||||
|
||||
|
||||
|
@ -134,7 +134,7 @@ Upgrade Fedora templates:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo dnf install qubes-mgmt-salt-vm-connector
|
||||
$ sudo dnf install qubes-mgmt-salt-vm-connector
|
||||
|
||||
|
||||
|
||||
|
@ -152,8 +152,8 @@ Upgrade Debian (and Whonix) templates:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo cp /etc/apt/sources.list.d/qubes-r3.list /etc/apt/sources.list.d/qubes-r3-upgrade.list
|
||||
sudo sed -i 's/r3.1/r3.2/' /etc/apt/sources.list.d/qubes-r3-upgrade.list
|
||||
$ sudo cp /etc/apt/sources.list.d/qubes-r3.list /etc/apt/sources.list.d/qubes-r3-upgrade.list
|
||||
$ sudo sed -i 's/r3.1/r3.2/' /etc/apt/sources.list.d/qubes-r3-upgrade.list
|
||||
|
||||
|
||||
|
||||
|
@ -161,8 +161,8 @@ Upgrade Debian (and Whonix) templates:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo apt-get update
|
||||
sudo apt-get dist-upgrade
|
||||
$ sudo apt-get update
|
||||
$ sudo apt-get dist-upgrade
|
||||
|
||||
|
||||
|
||||
|
@ -170,7 +170,7 @@ Upgrade Debian (and Whonix) templates:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo apt-get install qubes-mgmt-salt-vm-connector
|
||||
$ sudo apt-get install qubes-mgmt-salt-vm-connector
|
||||
|
||||
|
||||
|
||||
|
@ -178,7 +178,7 @@ Upgrade Debian (and Whonix) templates:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo rm -f /etc/apt/sources.list.d/qubes-r3-upgrade.list
|
||||
$ sudo rm -f /etc/apt/sources.list.d/qubes-r3-upgrade.list
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@ Restore from your backup
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update
|
||||
$ sudo qubes-dom0-update
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@ In place upgrade is a complex operation. For this reason, we provide a ``qubes-d
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update -y qubes-dist-upgrade
|
||||
$ sudo qubes-dom0-update -y qubes-dist-upgrade
|
||||
|
||||
|
||||
|
||||
|
@ -84,7 +84,7 @@ After installing the tool, upgrade can be performed all at once with:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dist-upgrade --all
|
||||
$ sudo qubes-dist-upgrade --all
|
||||
|
||||
|
||||
|
||||
|
@ -96,7 +96,7 @@ After completing “STAGE 0” through “STAGE 5”, restart the system. Then p
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dist-upgrade --resync-appmenus-features
|
||||
$ sudo qubes-dist-upgrade --resync-appmenus-features
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ If you would prefer to perform a clean installation rather than upgrading in-pla
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update -y qubes-dist-upgrade
|
||||
$ sudo qubes-dom0-update -y qubes-dist-upgrade
|
||||
|
||||
|
||||
|
||||
|
@ -58,7 +58,7 @@ In place upgrade is a complex operation. For this reason, we provide a ``qubes-d
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update -y qubes-dist-upgrade
|
||||
$ sudo qubes-dom0-update -y qubes-dist-upgrade
|
||||
|
||||
|
||||
|
||||
|
@ -104,7 +104,7 @@ After installing the tool, before-reboot stages can be performed at once with:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dist-upgrade --all-pre-reboot
|
||||
$ sudo qubes-dist-upgrade --all-pre-reboot
|
||||
|
||||
|
||||
|
||||
|
@ -116,7 +116,7 @@ After completing “STAGE 1” through “STAGE 3”, restart the system. Then p
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dist-upgrade --all-post-reboot
|
||||
$ sudo qubes-dist-upgrade --all-post-reboot
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -30,13 +30,13 @@ The same operations are also available via these command-line tools:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-copy [--without-progress] file [file]+
|
||||
$ qvm-copy [--without-progress] file [file]+
|
||||
|
||||
|
||||
|
||||
.. code:: console
|
||||
|
||||
qvm-move [--without-progress] file [file]+
|
||||
$ qvm-move [--without-progress] file [file]+
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -68,7 +68,7 @@ To enable automatic wiping of the clipboard after a minute use ``qvm-service``:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-service --enable VMNAME gui-agent-clipboard-wipe
|
||||
$ qvm-service --enable VMNAME gui-agent-clipboard-wipe
|
||||
|
||||
|
||||
|
||||
|
@ -80,8 +80,8 @@ The copy/paste shortcuts are configurable via ``qvm-features``, e.g.
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-features dom0 gui-default-secure-copy-sequence 'Mod4-c'
|
||||
qvm-features dom0 gui-default-secure-paste-sequence 'Mod4-v'
|
||||
$ qvm-features dom0 gui-default-secure-copy-sequence 'Mod4-c'
|
||||
$ qvm-features dom0 gui-default-secure-paste-sequence 'Mod4-v'
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ To copy a file from dom0 to a VM, simply use ``qvm-copy-to-vm``:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-copy-to-vm <target_vm> <file>
|
||||
$ qvm-copy-to-vm <target_vm> <file>
|
||||
|
||||
|
||||
|
||||
|
@ -73,7 +73,7 @@ If you are determined to copy some files to dom0 anyway, you can use the followi
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-run --pass-io <src-vm> 'cat /path/to/file_in_src_domain' > /path/to/file_name_in_dom0
|
||||
$ qvm-run --pass-io <src-vm> 'cat /path/to/file_in_src_domain' > /path/to/file_name_in_dom0
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -157,9 +157,9 @@ To temporarily enable any of these repos, use the ``--enablerepo=<repo-name>`` o
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo dnf upgrade --enablerepo=qubes-vm-*-current-testing
|
||||
sudo dnf upgrade --enablerepo=qubes-vm-*-security-testing
|
||||
sudo dnf upgrade --enablerepo=qubes-vm-*-unstable
|
||||
$ sudo dnf upgrade --enablerepo=qubes-vm-*-current-testing
|
||||
$ sudo dnf upgrade --enablerepo=qubes-vm-*-security-testing
|
||||
$ sudo dnf upgrade --enablerepo=qubes-vm-*-unstable
|
||||
|
||||
|
||||
|
||||
|
@ -195,11 +195,11 @@ If you would like to enable the `RPM Fusion <https://rpmfusion.org/>`__ reposito
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo dnf config-manager setopt rpmfusion-free.enabled=1
|
||||
sudo dnf config-manager setopt rpmfusion-free-updates.enabled=1
|
||||
sudo dnf config-manager setopt rpmfusion-nonfree.enabled=1
|
||||
sudo dnf config-manager setopt rpmfusion-nonfree-updates.enabled=1
|
||||
sudo dnf upgrade --refresh
|
||||
$ sudo dnf config-manager setopt rpmfusion-free.enabled=1
|
||||
$ sudo dnf config-manager setopt rpmfusion-free-updates.enabled=1
|
||||
$ sudo dnf config-manager setopt rpmfusion-nonfree.enabled=1
|
||||
$ sudo dnf config-manager setopt rpmfusion-nonfree-updates.enabled=1
|
||||
$ sudo dnf upgrade --refresh
|
||||
|
||||
|
||||
|
||||
|
@ -231,7 +231,7 @@ Root revert
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-volume revert <template>:root
|
||||
$ qvm-volume revert <template>:root
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -29,9 +29,9 @@ If not specified otherwise, block devices will show up as ``/dev/xvdi*`` in a li
|
|||
|
||||
.. code:: console
|
||||
|
||||
cd ~
|
||||
mkdir mnt
|
||||
sudo mount /dev/xvdi2 mnt
|
||||
$ cd ~
|
||||
$ mkdir mnt
|
||||
$ sudo mount /dev/xvdi2 mnt
|
||||
|
||||
|
||||
|
||||
|
@ -57,7 +57,7 @@ In case of a USB-drive, make sure it’s attached to your computer. If you don
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-block
|
||||
$ qvm-block
|
||||
|
||||
|
||||
This will list all available block devices in your system across all VMs. The name of the qube hosting the block device is displayed before the colon in the device ID. The string after the colon is the ID of the device used within the qube, like so:
|
||||
|
@ -73,7 +73,7 @@ In case of a USB-drive, make sure it’s attached to your computer. If you don
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-block attach work sys-usb:sdb
|
||||
$ qvm-block attach work sys-usb:sdb
|
||||
|
||||
|
||||
|
||||
|
@ -87,9 +87,9 @@ In case of a USB-drive, make sure it’s attached to your computer. If you don
|
|||
|
||||
.. code:: console
|
||||
|
||||
cd ~
|
||||
mkdir mnt
|
||||
sudo mount /dev/xvdi mnt
|
||||
$ cd ~
|
||||
$ mkdir mnt
|
||||
$ sudo mount /dev/xvdi mnt
|
||||
|
||||
|
||||
|
||||
|
@ -101,7 +101,7 @@ In case of a USB-drive, make sure it’s attached to your computer. If you don
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo umount mnt
|
||||
$ sudo umount mnt
|
||||
|
||||
|
||||
|
||||
|
@ -109,7 +109,7 @@ In case of a USB-drive, make sure it’s attached to your computer. If you don
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-block detach work sys-usb:sdb
|
||||
$ qvm-block detach work sys-usb:sdb
|
||||
|
||||
|
||||
|
||||
|
@ -177,7 +177,7 @@ To attach a file as block device to another qube, first turn it into a loopback
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo losetup -f --show /path/to/file
|
||||
$ sudo losetup -f --show /path/to/file
|
||||
|
||||
|
||||
`This command <https://linux.die.net/man/8/losetup>`__ will create the device node ``/dev/loop0`` or, if that is already in use, increase the trailing integer until that name is still available. Afterwards it prints the device-node-name it found.
|
||||
|
@ -201,7 +201,7 @@ To attach a file as block device to another qube, first turn it into a loopback
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-block a targetVM sourceVM:loop0
|
||||
$ qvm-block a targetVM sourceVM:loop0
|
||||
|
||||
|
||||
|
||||
|
@ -209,7 +209,7 @@ To attach a file as block device to another qube, first turn it into a loopback
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo losetup -d /dev/loop0
|
||||
$ sudo losetup -d /dev/loop0
|
||||
|
||||
|
||||
|
||||
|
@ -231,7 +231,7 @@ usage example:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-block a work sys-usb:sda1 -o frontend-dev=xvdz
|
||||
$ qvm-block a work sys-usb:sda1 -o frontend-dev=xvdz
|
||||
|
||||
|
||||
|
||||
|
@ -249,7 +249,7 @@ usage example:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-block a work sys-usb:sda1 -o read-only=true
|
||||
$ qvm-block a work sys-usb:sda1 -o read-only=true
|
||||
|
||||
|
||||
|
||||
|
@ -257,7 +257,7 @@ There exists a shortcut to set read-only ``true``, ``--ro``:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-block a work sys-usb:sda1 --ro
|
||||
$ qvm-block a work sys-usb:sda1 --ro
|
||||
|
||||
|
||||
|
||||
|
@ -273,7 +273,7 @@ usage example:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-block a work sys-usb:sda1 -o devtype=cdrom
|
||||
$ qvm-block a work sys-usb:sda1 -o devtype=cdrom
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@ You can set any app qube to have the ability to act as a disposable template wit
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-prefs <APP_QUBE> template_for_dispvms True
|
||||
$ qvm-prefs <APP_QUBE> template_for_dispvms True
|
||||
|
||||
|
||||
|
||||
|
@ -75,7 +75,7 @@ You can change this behavior for individual qubes: in the Application Menu, open
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-prefs <QUBE> default_dispvm <DISPOSABLE_TEMPLATE>
|
||||
$ qvm-prefs <QUBE> default_dispvm <DISPOSABLE_TEMPLATE>
|
||||
|
||||
|
||||
|
||||
|
@ -91,7 +91,7 @@ A disposable launched from the app menu inherits the net qube and firewall setti
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-features <DISPOSABLE_TEMPLATE> appmenus-dispvm 1
|
||||
$ qvm-features <DISPOSABLE_TEMPLATE> appmenus-dispvm 1
|
||||
|
||||
|
||||
|
||||
|
@ -99,7 +99,7 @@ To launch a disposable template from the command line, execute the following com
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-run --dispvm=<DISPOSABLE_TEMPLATE> --service qubes.StartApp+<APPLICATION>
|
||||
$ qvm-run --dispvm=<DISPOSABLE_TEMPLATE> --service qubes.StartApp+<APPLICATION>
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ To figure out what device to attach, first list the available PCI devices by run
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-pci
|
||||
$ qvm-pci
|
||||
|
||||
|
||||
|
||||
|
@ -63,7 +63,7 @@ This will show you the ``backend:BDF`` (Bus_Device.Function) address of each PCI
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-pci attach targetVM sourceVM:[BDF] --persistent
|
||||
$ qvm-pci attach targetVM sourceVM:[BDF] --persistent
|
||||
|
||||
|
||||
|
||||
|
@ -73,7 +73,7 @@ For example, if ``00_1a.0`` is the BDF of the device you want to attach to the
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-pci attach work dom0:00_1a.0 --persistent
|
||||
$ qvm-pci attach work dom0:00_1a.0 --persistent
|
||||
|
||||
|
||||
|
||||
|
@ -101,7 +101,7 @@ usage example:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-pci a work dom0:00_1a.0 --persistent -o no-strict-reset=true
|
||||
$ qvm-pci a work dom0:00_1a.0 --persistent -o no-strict-reset=true
|
||||
|
||||
|
||||
|
||||
|
@ -115,7 +115,7 @@ usage example:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-pci a work dom0:00_1a.0 --persistent -o permissive=true
|
||||
$ qvm-pci a work dom0:00_1a.0 --persistent -o permissive=true
|
||||
|
||||
|
||||
|
||||
|
@ -141,10 +141,10 @@ or
|
|||
|
||||
.. code:: console
|
||||
|
||||
echo <BDF> > /sys/bus/pci/drivers/pciback/unbind
|
||||
MODALIAS=`cat /sys/bus/pci/devices/<BDF>/modalias`
|
||||
MOD=`modprobe -R $MODALIAS | head -n 1`
|
||||
echo <BDF> > /sys/bus/pci/drivers/$MOD/bind
|
||||
$ echo <BDF> > /sys/bus/pci/drivers/pciback/unbind
|
||||
$ MODALIAS=`cat /sys/bus/pci/devices/<BDF>/modalias`
|
||||
$ MOD=`modprobe -R $MODALIAS | head -n 1`
|
||||
$ echo <BDF> > /sys/bus/pci/drivers/$MOD/bind
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -104,7 +104,7 @@ If you receive this error: ``ERROR: qubes-usb-proxy not installed in the qube``,
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo dnf install qubes-usb-proxy
|
||||
$ sudo dnf install qubes-usb-proxy
|
||||
|
||||
|
||||
|
||||
|
@ -112,7 +112,7 @@ If you receive this error: ``ERROR: qubes-usb-proxy not installed in the qube``,
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo apt-get install qubes-usb-proxy
|
||||
$ sudo apt-get install qubes-usb-proxy
|
||||
|
||||
|
||||
|
||||
|
@ -138,7 +138,7 @@ First, find out which USB bus the device is connected to (note that these steps
|
|||
|
||||
.. code:: console
|
||||
|
||||
lsusb
|
||||
$ lsusb
|
||||
|
||||
|
||||
|
||||
|
@ -174,7 +174,7 @@ Now you see the path: the text between ``/pci0000:00/0000:`` and ``/usb3`` i.e.
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-pci attach --persistent personal dom0:00_1a.0
|
||||
$ qvm-pci attach --persistent personal dom0:00_1a.0
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ In Dom0 install ``anti-evil-maid``:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update anti-evil-maid
|
||||
$ sudo qubes-dom0-update anti-evil-maid
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -106,8 +106,8 @@ If your USB qube is named differently than ``sys-usb``, then do the following in
|
|||
|
||||
.. code:: console
|
||||
|
||||
systemctl enable qubes-ctapproxy@USB_QUBE.service
|
||||
systemctl disable qubes-ctapproxy@sys-usb.service
|
||||
$ systemctl enable qubes-ctapproxy@USB_QUBE.service
|
||||
$ systemctl disable qubes-ctapproxy@sys-usb.service
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ Normally Qubes doesn’t let the user stop a NetVM if there are other qubes runn
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-prefs <vm> netvm <netvm>
|
||||
$ qvm-prefs <vm> netvm <netvm>
|
||||
|
||||
|
||||
|
||||
|
@ -71,7 +71,7 @@ Normally qubes do not connect directly to the actual NetVM (sys-net by default)
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-prefs sys-firewall netvm sys-net
|
||||
$ qvm-prefs sys-firewall netvm sys-net
|
||||
|
||||
|
||||
|
||||
|
@ -123,7 +123,7 @@ In order to allow networking from qube A (client) to qube B (server) follow thes
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo nft add rule ip qubes custom-forward ip saddr <IP address of A> ip daddr <IP address of B> ct state new,established,related counter accept
|
||||
$ sudo nft add rule ip qubes custom-forward ip saddr <IP address of A> ip daddr <IP address of B> ct state new,established,related counter accept
|
||||
|
||||
|
||||
|
||||
|
@ -133,7 +133,7 @@ In order to allow networking from qube A (client) to qube B (server) follow thes
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo nft add rule qubes custom-input ip saddr <IP address of A> ct state new,established,related counter accept
|
||||
$ sudo nft add rule qubes custom-input ip saddr <IP address of A> ct state new,established,related counter accept
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -111,7 +111,7 @@ In order to allow networking between qubes A and B follow these steps:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo iptables -I FORWARD 2 -s <IP address of A> -d <IP address of B> -j ACCEPT
|
||||
$ sudo iptables -I FORWARD 2 -s <IP address of A> -d <IP address of B> -j ACCEPT
|
||||
|
||||
|
||||
|
||||
|
@ -121,7 +121,7 @@ In order to allow networking between qubes A and B follow these steps:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo iptables -I INPUT -s <IP address of A> -j ACCEPT
|
||||
$ sudo iptables -I INPUT -s <IP address of A> -j ACCEPT
|
||||
|
||||
|
||||
|
||||
|
@ -380,7 +380,7 @@ Once you have confirmed that the counters increase, store these command in ``/rw
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo nano /rw/config/rc.local
|
||||
$ sudo nano /rw/config/rc.local
|
||||
|
||||
|
||||
|
||||
|
@ -485,7 +485,7 @@ Once you have confirmed that the counters increase, store these command in ``/rw
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo nano /rw/config/qubes-firewall-user-script
|
||||
$ sudo nano /rw/config/qubes-firewall-user-script
|
||||
|
||||
|
||||
|
||||
|
@ -550,7 +550,7 @@ Finally make this file executable (so it runs at every Firewall VM update)
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo chmod +x /rw/config/qubes-firewall-user-script
|
||||
$ sudo chmod +x /rw/config/qubes-firewall-user-script
|
||||
|
||||
|
||||
|
||||
|
@ -562,7 +562,7 @@ Here no routing is required, only filtering. Proceed in the same way as above bu
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo nano /rw/config/rc.local
|
||||
$ sudo nano /rw/config/rc.local
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ As the name implies, this generates authentication code that is time-dependent.
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update google-authenticator
|
||||
$ sudo qubes-dom0-update google-authenticator
|
||||
|
||||
|
||||
|
||||
|
@ -86,7 +86,7 @@ Now we are going to add the authenticator as a login requirement:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo authselect select custom/mfa
|
||||
$ sudo authselect select custom/mfa
|
||||
|
||||
|
||||
|
||||
|
@ -110,7 +110,7 @@ The following assumes you haven’t restarted your computer since setting up TOT
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo authselect select sssd
|
||||
$ sudo authselect select sssd
|
||||
|
||||
|
||||
|
||||
|
@ -170,7 +170,7 @@ All these requirements are described below, step by step, for the YubiKey and Ni
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo dnf install ykpers
|
||||
$ sudo dnf install ykpers
|
||||
|
||||
|
||||
|
||||
|
@ -180,7 +180,7 @@ All these requirements are described below, step by step, for the YubiKey and Ni
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo apt-get install yubikey-personalization
|
||||
$ sudo apt-get install yubikey-personalization
|
||||
|
||||
|
||||
|
||||
|
@ -204,7 +204,7 @@ All these requirements are described below, step by step, for the YubiKey and Ni
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update qubes-yubikey-dom0
|
||||
$ sudo qubes-dom0-update qubes-yubikey-dom0
|
||||
|
||||
|
||||
|
||||
|
@ -291,7 +291,7 @@ All these requirements are described below, step by step, for the YubiKey and Ni
|
|||
|
||||
.. code:: console
|
||||
|
||||
echo -n "$password" | openssl dgst -sha1 | cut -f2 -d ' '
|
||||
$ echo -n "$password" | openssl dgst -sha1 | cut -f2 -d ' '
|
||||
|
||||
|
||||
|
||||
|
@ -363,7 +363,7 @@ In dom0:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo chmod +x /etc/qubes-rpc/custom.LockScreen
|
||||
$ sudo chmod +x /etc/qubes-rpc/custom.LockScreen
|
||||
|
||||
|
||||
|
||||
|
@ -400,7 +400,7 @@ In your USB VM:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo chmod +x /rw/config/rc.local
|
||||
$ sudo chmod +x /rw/config/rc.local
|
||||
|
||||
|
||||
|
||||
|
@ -408,7 +408,7 @@ In your USB VM:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo /rw/config/rc.local
|
||||
$ sudo /rw/config/rc.local
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -75,9 +75,9 @@ If you have a Debian template from an earlier release that you want to use for s
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo apt-mark hold salt-common salt-ssh
|
||||
sudo apt update
|
||||
sudo apt upgrade
|
||||
$ sudo apt-mark hold salt-common salt-ssh
|
||||
$ sudo apt update
|
||||
$ sudo apt upgrade
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -205,14 +205,14 @@ When you install a new template or :ref:`upgrade <user/how-to-guides/how-to-upda
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-shutdown --wait --all; qvm-prefs <SYS_USB_DISPOSABLE_TEMPLATE> template <NEW_TEMPLATE>; qvm-start <USB_QUBE>
|
||||
$ qvm-shutdown --wait --all; qvm-prefs <SYS_USB_DISPOSABLE_TEMPLATE> template <NEW_TEMPLATE>; qvm-start <USB_QUBE>
|
||||
|
||||
|
||||
With substitutions, your command should look similar to this example. (**Warning:** This is just an example. Do not attempt to use it.)
|
||||
|
||||
.. code:: console
|
||||
|
||||
qvm-shutdown --wait --all; qvm-prefs fedora-01-dvm template fedora-02; qvm-start sys-usb
|
||||
$ qvm-shutdown --wait --all; qvm-prefs fedora-01-dvm template fedora-02; qvm-start sys-usb
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -122,8 +122,8 @@ This will allow you to install the Qubes Windows Tools on Windows 10 both as a S
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-features <VMname> gui 1
|
||||
qvm-prefs <VMname> qrexec_timeout 300
|
||||
$ qvm-features <VMname> gui 1
|
||||
$ qvm-prefs <VMname> qrexec_timeout 300
|
||||
|
||||
|
||||
|
||||
|
@ -135,7 +135,7 @@ This will allow you to install the Qubes Windows Tools on Windows 10 both as a S
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-prefs <VMname> default_user <username>
|
||||
$ qvm-prefs <VMname> default_user <username>
|
||||
|
||||
|
||||
|
||||
|
@ -159,7 +159,7 @@ First, make sure that ``qubes-windows-tools`` is installed in your system:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update qubes-windows-tools
|
||||
$ sudo qubes-dom0-update qubes-windows-tools
|
||||
|
||||
|
||||
|
||||
|
@ -169,7 +169,7 @@ You can also install the package from testing repositories, where we usually pub
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update --enablerepo=qubes-dom0-current-testing qubes-windows-tools
|
||||
$ sudo qubes-dom0-update --enablerepo=qubes-dom0-current-testing qubes-windows-tools
|
||||
|
||||
|
||||
|
||||
|
@ -191,7 +191,7 @@ To install the Qubes Windows Tools in a Windows VM one should start the VM passi
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-start lab-win7 --install-windows-tools
|
||||
$ qvm-start lab-win7 --install-windows-tools
|
||||
|
||||
|
||||
|
||||
|
@ -203,7 +203,7 @@ Qubes will automatically detect the tools has been installed in the VM and will
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-prefs <your-appvm-name>
|
||||
$ qvm-prefs <your-appvm-name>
|
||||
|
||||
|
||||
|
||||
|
@ -211,7 +211,7 @@ Qubes will automatically detect the tools has been installed in the VM and will
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-prefs <vm-name> qrexec_timeout 300
|
||||
$ qvm-prefs <vm-name> qrexec_timeout 300
|
||||
|
||||
|
||||
|
||||
|
@ -247,7 +247,7 @@ With Qubes Windows Tools installed the early graphical console provided in debug
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-prefs -s win7new debug false
|
||||
$ qvm-prefs -s win7new debug false
|
||||
|
||||
|
||||
|
||||
|
@ -261,7 +261,7 @@ Once you start a Windows-based AppVM with Qubes Tools installed, you can easily
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-run -a my-win7-appvm explorer.exe
|
||||
$ qvm-run -a my-win7-appvm explorer.exe
|
||||
|
||||
|
||||
|
||||
|
@ -305,7 +305,7 @@ In order to create a HVM TemplateVM one can use the following command, suitably
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-create --class TemplateVM win-template --property virt_mode=HVM --property kernel='' -l green
|
||||
$ qvm-create --class TemplateVM win-template --property virt_mode=HVM --property kernel='' -l green
|
||||
|
||||
|
||||
|
||||
|
@ -335,7 +335,7 @@ Once the template has been created and installed it is easy to create AppVMs bas
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-create --property virt_mode=hvm <new windows appvm name> --template <name of template vm> --label <label color>
|
||||
$ qvm-create --property virt_mode=hvm <new windows appvm name> --template <name of template vm> --label <label color>
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@ Qubes Windows Tools (QWT) are a set of programs and drivers that provide integra
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update qubes-windows-tools-4.1.68
|
||||
$ sudo qubes-dom0-update qubes-windows-tools-4.1.68
|
||||
|
||||
|
||||
|
||||
|
@ -47,7 +47,7 @@ for Qubes R4.1.2, or
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update qubes-windows-tools-4.1.69
|
||||
$ sudo qubes-dom0-update qubes-windows-tools-4.1.69
|
||||
|
||||
|
||||
|
||||
|
@ -162,7 +162,7 @@ Installing the Qubes Windows Tools on Windows 7, 8.1, 10 and 11 both as a Standa
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update qubes-windows-tools
|
||||
$ sudo qubes-dom0-update qubes-windows-tools
|
||||
|
||||
|
||||
(If the above command does not work, it could be that the Qubes Tools are not in the stable repo yet. Try installing from the testing repo instead.)
|
||||
|
@ -170,14 +170,14 @@ Installing the Qubes Windows Tools on Windows 7, 8.1, 10 and 11 both as a Standa
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update --enablerepo=qubes-dom0-current-testing qubes-windows-tools
|
||||
$ sudo qubes-dom0-update --enablerepo=qubes-dom0-current-testing qubes-windows-tools
|
||||
|
||||
|
||||
If an earlier version of Qubes Windows Tools is already installed, with enabled current-testing repo you need to specify as action to ``upgrade`` the existing package, because the default action is ``install``, which will fail if it detects that QWT is already present in Dom0:
|
||||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update --enablerepo=qubes-dom0-current-testing --action=upgrade qubes-windows-tools
|
||||
$ sudo qubes-dom0-update --enablerepo=qubes-dom0-current-testing --action=upgrade qubes-windows-tools
|
||||
|
||||
|
||||
This package brings the ISO with Qubes Windows Tools that is passed to the VM when ``--install-windows-tools`` is specified for the ``qvm-start`` command. Please note that none of this software ever runs in Dom0 or any other part of the system except for the Windows AppVM in which it is to be installed.
|
||||
|
@ -195,7 +195,7 @@ Installing the Qubes Windows Tools on Windows 7, 8.1, 10 and 11 both as a Standa
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-start <VMname> --install-windows-tools
|
||||
$ qvm-start <VMname> --install-windows-tools
|
||||
|
||||
|
||||
Once the Windows VM boots, a CDROM should appear in the ‘My Computer’ menu (typically as ``D:`` or ``E:``) with the setup program ``qubes-tools-x64.msi`` in its main directory.
|
||||
|
|
|
@ -124,8 +124,8 @@ Importing should work, simply make sure that you are not using Xen’s newer lin
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-features VMNAME linux-stubdom ''
|
||||
qvm-prefs VMNAME virt_mode hvm
|
||||
$ qvm-features VMNAME linux-stubdom ''
|
||||
$ qvm-prefs VMNAME virt_mode hvm
|
||||
|
||||
|
||||
|
||||
|
@ -147,23 +147,23 @@ Summary
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-create --class StandaloneVM --label red --property virt_mode=hvm win7new
|
||||
qvm-prefs win7new memory 4096
|
||||
qvm-prefs win7new maxmem 4096
|
||||
qvm-prefs win7new kernel ''
|
||||
qvm-volume extend win7new:root 25g
|
||||
qvm-prefs win7new debug true
|
||||
qvm-features win7new video-model cirrus
|
||||
qvm-start --cdrom=untrusted:/home/user/windows_install.iso win7new
|
||||
$ qvm-create --class StandaloneVM --label red --property virt_mode=hvm win7new
|
||||
$ qvm-prefs win7new memory 4096
|
||||
$ qvm-prefs win7new maxmem 4096
|
||||
$ qvm-prefs win7new kernel ''
|
||||
$ qvm-volume extend win7new:root 25g
|
||||
$ qvm-prefs win7new debug true
|
||||
$ qvm-features win7new video-model cirrus
|
||||
$ qvm-start --cdrom=untrusted:/home/user/windows_install.iso win7new
|
||||
# restart after the first part of the windows installation process ends
|
||||
qvm-start win7new
|
||||
$ qvm-start win7new
|
||||
# once Windows is installed and working
|
||||
qvm-prefs win7new memory 2048
|
||||
qvm-prefs win7new maxmem 2048
|
||||
qvm-features --unset win7new video-model
|
||||
qvm-prefs win7new qrexec_timeout 300
|
||||
$ qvm-prefs win7new memory 2048
|
||||
$ qvm-prefs win7new maxmem 2048
|
||||
$ qvm-features --unset win7new video-model
|
||||
$ qvm-prefs win7new qrexec_timeout 300
|
||||
# with Qubes Windows Tools installed:
|
||||
qvm-prefs win7new debug false
|
||||
$ qvm-prefs win7new debug false
|
||||
|
||||
|
||||
|
||||
|
@ -187,7 +187,7 @@ Create a VM named win7new in :doc:`HVM </user/advanced-topics/standalones-and-hv
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-create --class StandaloneVM --label red --property virt_mode=hvm win7new
|
||||
$ qvm-create --class StandaloneVM --label red --property virt_mode=hvm win7new
|
||||
|
||||
|
||||
|
||||
|
@ -207,8 +207,8 @@ So, increase the VM’s memory to 4096MB (memory = maxmem because we don’t use
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-prefs win7new memory 4096
|
||||
qvm-prefs win7new maxmem 4096
|
||||
$ qvm-prefs win7new memory 4096
|
||||
$ qvm-prefs win7new maxmem 4096
|
||||
|
||||
|
||||
|
||||
|
@ -216,7 +216,7 @@ Disable direct boot so that the VM will go through the standard cdrom/HDD boot s
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-prefs win7new kernel ''
|
||||
$ qvm-prefs win7new kernel ''
|
||||
|
||||
|
||||
|
||||
|
@ -224,7 +224,7 @@ A typical Windows 7 installation requires between 15GB up to 19GB of disk space
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-volume extend win7new:root 25g
|
||||
$ qvm-volume extend win7new:root 25g
|
||||
|
||||
|
||||
|
||||
|
@ -232,7 +232,7 @@ Set the debug flag in order to have a graphical console:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-prefs win7new debug true
|
||||
$ qvm-prefs win7new debug true
|
||||
|
||||
|
||||
|
||||
|
@ -248,7 +248,7 @@ To avoid that error we temporarily have to switch the video adapter to ‘cirrus
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-features win7new video-model cirrus
|
||||
$ qvm-features win7new video-model cirrus
|
||||
|
||||
|
||||
|
||||
|
@ -256,7 +256,7 @@ The VM is now ready to be started; the best practice is to use an installation I
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-start --cdrom=untrusted:/home/user/windows_install.iso win7new
|
||||
$ qvm-start --cdrom=untrusted:/home/user/windows_install.iso win7new
|
||||
|
||||
|
||||
|
||||
|
@ -280,8 +280,8 @@ Decrease the VM’s memory to a more reasonable value (memory balancing on Windo
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-prefs win7new memory 2048
|
||||
qvm-prefs win7new maxmem 2048
|
||||
$ qvm-prefs win7new memory 2048
|
||||
$ qvm-prefs win7new maxmem 2048
|
||||
|
||||
|
||||
|
||||
|
@ -289,7 +289,7 @@ Revert to the standard VGA adapter: the ‘cirrus’ adapter will limit the maxi
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-features --unset win7new video-model
|
||||
$ qvm-features --unset win7new video-model
|
||||
|
||||
|
||||
|
||||
|
@ -297,7 +297,7 @@ Finally, increase the VM’s ``qrexec_timeout``: in case you happen to get a BSO
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-prefs win7new qrexec_timeout 300
|
||||
$ qvm-prefs win7new qrexec_timeout 300
|
||||
|
||||
|
||||
|
||||
|
@ -311,7 +311,7 @@ Windows 7 and 10 can be installed as TemplateVM by selecting
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-create --class TemplateVM --property virt_mode=HVM --property kernel='' --label black Windows-template
|
||||
$ qvm-create --class TemplateVM --property virt_mode=HVM --property kernel='' --label black Windows-template
|
||||
|
||||
|
||||
|
||||
|
@ -329,7 +329,7 @@ AppVMs based on these templates can be created the normal way by using the Qube
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-create --class=AppVM --template=<VMname>
|
||||
$ qvm-create --class=AppVM --template=<VMname>
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -132,14 +132,14 @@ Create a VM named WindowsNew in :doc:`HVM </user/advanced-topics/standalones-and
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-create --class StandaloneVM --label orange --property virt_mode=hvm WindowsNew
|
||||
$ qvm-create --class StandaloneVM --label orange --property virt_mode=hvm WindowsNew
|
||||
|
||||
|
||||
and for a template:
|
||||
|
||||
.. code:: console
|
||||
|
||||
qvm-create --class TemplateVM --label black --property virt_mode=hvm WindowsNew
|
||||
$ qvm-create --class TemplateVM --label black --property virt_mode=hvm WindowsNew
|
||||
|
||||
|
||||
|
||||
|
@ -149,11 +149,11 @@ Create a VM named WindowsNew in :doc:`HVM </user/advanced-topics/standalones-and
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-volume extend WindowsNew:root 60g
|
||||
qvm-prefs WindowsNew memory 4096
|
||||
qvm-prefs WindowsNew maxmem 4096
|
||||
qvm-prefs WindowsNew kernel ''
|
||||
qvm-prefs WindowsNew qrexec_timeout 7200
|
||||
$ qvm-volume extend WindowsNew:root 60g
|
||||
$ qvm-prefs WindowsNew memory 4096
|
||||
$ qvm-prefs WindowsNew maxmem 4096
|
||||
$ qvm-prefs WindowsNew kernel ''
|
||||
$ qvm-prefs WindowsNew qrexec_timeout 7200
|
||||
|
||||
|
||||
|
||||
|
@ -184,7 +184,7 @@ These parameters are set for the following reasons:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-prefs WindowsNew qrexec_timeout 7200
|
||||
$ qvm-prefs WindowsNew qrexec_timeout 7200
|
||||
|
||||
|
||||
|
||||
|
@ -215,7 +215,7 @@ These parameters are set for the following reasons:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-start --cdrom=untrusted:/home/user/windows_install.iso WindowsNew
|
||||
$ qvm-start --cdrom=untrusted:/home/user/windows_install.iso WindowsNew
|
||||
|
||||
|
||||
|
||||
|
@ -396,7 +396,7 @@ AppVMs based on these templates can be created the normal way by using the Qube
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-create --class=AppVM --template=<VMname>
|
||||
$ qvm-create --class=AppVM --template=<VMname>
|
||||
|
||||
|
||||
|
||||
|
@ -408,7 +408,7 @@ Furthermore, if manual IP setup was used for the template, the IP address select
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-prefs WindowsNew ip 10.137.0.x
|
||||
$ qvm-prefs WindowsNew ip 10.137.0.x
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -208,8 +208,8 @@ Actual command lines for the menu shortcuts involve the ``qvm-run`` command whic
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-run -q -a --service -- %VMNAME% qubes.StartApp+firefox
|
||||
qvm-run -q -a --service -- %VMNAME% qubes.StartApp+7-Zip-7-Zip_File_Manager
|
||||
$ qvm-run -q -a --service -- %VMNAME% qubes.StartApp+firefox
|
||||
$ qvm-run -q -a --service -- %VMNAME% qubes.StartApp+7-Zip-7-Zip_File_Manager
|
||||
|
||||
|
||||
|
||||
|
@ -217,7 +217,7 @@ Note that you can create a shortcut that points to a ``.desktop`` file in your a
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-run -q -a --service -- personal qubes.StartApp+firefox
|
||||
$ qvm-run -q -a --service -- personal qubes.StartApp+firefox
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ After running the commands to update Debian or Whonix, hopefully everything will
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo apt-get update && sudo apt-get dist-upgrade
|
||||
$ sudo apt-get update && sudo apt-get dist-upgrade
|
||||
|
||||
|
||||
|
||||
|
@ -78,7 +78,7 @@ And then trying running the ``update`` and ``upgrade`` commands again.
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo apt-get update && sudo apt-get dist-upgrade
|
||||
$ sudo apt-get update && sudo apt-get dist-upgrade
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ In any case you’ll need some disk space to start the VM. Check ``df -h`` outpu
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo dnf clean all
|
||||
$ sudo dnf clean all
|
||||
|
||||
|
||||
|
||||
|
@ -38,7 +38,7 @@ In any case you’ll need some disk space to start the VM. Check ``df -h`` outpu
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-remove <VMname>
|
||||
$ qvm-remove <VMname>
|
||||
|
||||
|
||||
With this method, you lose the data of one VM, but it’ll work more reliably.
|
||||
|
@ -47,7 +47,7 @@ In any case you’ll need some disk space to start the VM. Check ``df -h`` outpu
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo tune2fs -m 4 /dev/mapper/vg_dom0-lv_root
|
||||
$ sudo tune2fs -m 4 /dev/mapper/vg_dom0-lv_root
|
||||
|
||||
|
||||
|
||||
|
@ -98,8 +98,8 @@ After freeing some initial space, it may be possible to recover more space by de
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-start <VMname>
|
||||
qvm-console-dispvm <VMname>
|
||||
$ qvm-start <VMname>
|
||||
$ qvm-console-dispvm <VMname>
|
||||
|
||||
|
||||
|
||||
|
@ -117,7 +117,7 @@ To fix this issue:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-console-dispvm sys-usb
|
||||
$ qvm-console-dispvm sys-usb
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -56,15 +56,15 @@ If you can start your VM, but can’t launch any applications, then you need to
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-start <VMname> # Make sure the VM is started
|
||||
qvm-console-dispvm <VMname>
|
||||
$ qvm-start <VMname> # Make sure the VM is started
|
||||
$ qvm-console-dispvm <VMname>
|
||||
|
||||
|
||||
After launching a VM console using ``qvm-console-dispvm``, you may look at the ``qubes-gui-agent`` service state with:
|
||||
|
||||
.. code:: console
|
||||
|
||||
systemctl status -l qubes-gui-agent
|
||||
$ systemctl status -l qubes-gui-agent
|
||||
|
||||
|
||||
|
||||
|
@ -80,8 +80,8 @@ During troubleshooting, you may be getting a lot of ‘audit’ messages which m
|
|||
|
||||
.. code:: console
|
||||
|
||||
previous_kernel_parameters=$(qvm-prefs --get <VMname> kernelopts) # Get current kernel parameters
|
||||
qvm-prefs --set <VMname> kernelopts "<previous_kernel_parameters> audit=0"
|
||||
$ previous_kernel_parameters=$(qvm-prefs --get <VMname> kernelopts) # Get current kernel parameters
|
||||
$ qvm-prefs --set <VMname> kernelopts "<previous_kernel_parameters> audit=0"
|
||||
|
||||
|
||||
Then, restart your VM.
|
||||
|
|
|
@ -11,7 +11,7 @@ By default, the kernel that is installed in dom0 comes from the ``kernel`` packa
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo qubes-dom0-update kernel-latest
|
||||
$ sudo qubes-dom0-update kernel-latest
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -77,7 +77,7 @@ If you see a screen popup with SeaBios and 4 lines, last one being ``Probing EDD
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-prefs <HVMname> kernel ""
|
||||
$ qvm-prefs <HVMname> kernel ""
|
||||
|
||||
|
||||
HVM crashes when booting from ISO
|
||||
|
@ -92,7 +92,7 @@ To give the VM a RAM of 2GB, open a terminal in ``dom0`` and enter:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-prefs <HVMname> memory 2000
|
||||
$ qvm-prefs <HVMname> memory 2000
|
||||
|
||||
|
||||
Attached devices in Windows HVM stop working on suspend/resume
|
||||
|
|
|
@ -73,8 +73,8 @@ Using the command line
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo su
|
||||
echo -n "1" > /sys/bus/pci/devices/0000:03:00.0/remove
|
||||
$ sudo su
|
||||
$ echo -n "1" > /sys/bus/pci/devices/0000:03:00.0/remove
|
||||
|
||||
|
||||
|
||||
|
@ -109,7 +109,7 @@ NOTE: The ``permissive`` flag increases attack surface and possibility of `side
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-pci attach --persistent --option permissive=true --option no-strict-reset=true sys-usb dom0:<BDF_OF_DEVICE>
|
||||
$ qvm-pci attach --persistent --option permissive=true --option no-strict-reset=true sys-usb dom0:<BDF_OF_DEVICE>
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -113,7 +113,7 @@ Some firmware will not recognize the default Qubes EFI configuration. As such, i
|
|||
|
||||
.. code:: console
|
||||
|
||||
cp /mnt/sysimage/boot/efi/EFI/qubes/grubx64.efi /mnt/sysimage/boot/efi/EFI/BOOT/bootx64.efi
|
||||
$ cp /mnt/sysimage/boot/efi/EFI/qubes/grubx64.efi /mnt/sysimage/boot/efi/EFI/BOOT/bootx64.efi
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ Most likely the offending controller is a USB 3.0 device. You can remove this co
|
|||
|
||||
.. code:: console
|
||||
|
||||
lspci -nn | grep USB | cut -d '[' -f3 | cut -d ']' -f1 | xargs -I@ setpci -H1 -d @ d0.l=0
|
||||
$ lspci -nn | grep USB | cut -d '[' -f3 | cut -d ']' -f1 | xargs -I@ setpci -H1 -d @ d0.l=0
|
||||
|
||||
|
||||
|
||||
|
@ -74,7 +74,7 @@ Another solution would be to set the pci_strictreset option in dom0:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-pci attach --persistent --option no-strict-reset=true usbVM dom0:<BDF>
|
||||
$ qvm-pci attach --persistent --option no-strict-reset=true usbVM dom0:<BDF>
|
||||
|
||||
|
||||
|
||||
|
@ -82,7 +82,7 @@ Another solution would be to set the pci_strictreset option in dom0:
|
|||
|
||||
.. code:: console
|
||||
|
||||
qvm-prefs usbVM -s pci_strictreset false
|
||||
$ qvm-prefs usbVM -s pci_strictreset false
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ Tips
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo journalctl -u qubes-vpn-handler
|
||||
$ sudo journalctl -u qubes-vpn-handler
|
||||
|
||||
|
||||
|
||||
|
@ -55,7 +55,7 @@ To check this tool is working properly run:
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo notify-send "$(hostname): Test notify-send OK" --icon=network-idle
|
||||
$ sudo notify-send "$(hostname): Test notify-send OK" --icon=network-idle
|
||||
|
||||
|
||||
You should see the ``info`` message appear on the top of your screen. If that is the case then ``notify-send`` is not the issue. If it is not, and you have an error of some sort you can:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue