├── .cvsignore ├── .gitignore ├── .gitlab-ci.yml ├── .gitmodules ├── Makefile ├── Makefile.builder ├── build-deps-iso.list ├── build-deps.list ├── conf ├── comps-dom0.xml ├── debug.ks ├── iso-full-online.ks ├── iso-online-testing-no-templates.ks ├── iso-online-testing.ks ├── iso-online.ks ├── iso-unknown-key.ks ├── iso-unsigned.ks ├── iso-unsigned2.ks ├── liveusb.ks ├── qubes-kickstart.cfg └── travis-iso-full.ks ├── live ├── default-appmenus-debian ├── default-appmenus-fedora ├── lightdm-qubes-live.conf ├── livesys ├── livesys-late └── qubes-live.spec ├── livecd-tools ├── .gitignore ├── 0001-Set-repo.gpgkey-when-provided-in-kickstart.patch ├── 0001-Support-repo-ignoregroups-option.patch ├── 0002-Actually-use-repo.gpgkey-verify-signatures-before-in.patch ├── Makefile ├── livecd-tools.spec └── sources ├── rpm ├── .gitignore └── SOURCES │ └── .gitignore ├── rpm_verify ├── scripts ├── expected-failure ├── ksparser ├── livecd-creator-qubes ├── rpm_verify └── tmplparser └── yum ├── clean_repos.sh ├── dnf.conf ├── dom0-updates ├── repodata │ └── .gitignore └── rpm │ └── .gitignore ├── installer ├── repodata │ └── .gitignore └── rpm │ └── .gitignore ├── qubes-dom0 ├── repodata │ └── .gitignore └── rpm │ └── .gitignore ├── repos.txt └── update_repo.sh /.cvsignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | po/*.mo 2 | src/*.pyc 3 | src/modules/*.pyc 4 | pkgs/ 5 | installer 6 | *~ 7 | build/ 8 | anaconda/widgets/src/gettext.h 9 | -------------------------------------------------------------------------------- /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | include: 2 | - project: 'QubesOS/qubes-continuous-integration' 3 | file: '/r4.1/gitlab-base.yml' 4 | 5 | default: 6 | tags: 7 | - vm-runner 8 | - long-living-job 9 | 10 | after_script: 11 | - tail -n 100 ~/qubes-builder/build-logs/installer-qubes-os-iso-*.log 12 | - ls -l ~/qubes-builder/iso 13 | 14 | variables: 15 | COMPONENTS: installer-qubes-os 16 | BUILDERCONF: "scripts/travis-builder.conf" 17 | 18 | build:iso-full: 19 | extends: .iso_build 20 | variables: 21 | DIST_DOM0: fc37 22 | USE_QUBES_REPO_VERSION: "4.2" 23 | USE_QUBES_REPO_TESTING: "1" 24 | RPM_BUILD_DEFINES: "--nocheck" 25 | INSTALLER_KICKSTART: "/tmp/qubes-installer/conf/iso-online-testing.ks" 26 | 27 | build:iso-unsigned: 28 | extends: .iso_build 29 | variables: 30 | DIST_DOM0: fc37 31 | USE_QUBES_REPO_VERSION: "4.2" 32 | USE_QUBES_REPO_TESTING: "1" 33 | RPM_BUILD_DEFINES: "--nocheck" 34 | INSTALLER_KICKSTART: "/tmp/qubes-installer/conf/iso-unsigned.ks" 35 | EXPECT_FAILURE: "./scripts/expected-failure" 36 | 37 | build:iso-unsigned2: 38 | extends: .iso_build 39 | variables: 40 | DIST_DOM0: fc37 41 | USE_QUBES_REPO_VERSION: "4.2" 42 | USE_QUBES_REPO_TESTING: "1" 43 | RPM_BUILD_DEFINES: "--nocheck" 44 | INSTALLER_KICKSTART: "/tmp/qubes-installer/conf/iso-unsigned2.ks" 45 | EXPECT_FAILURE: "./scripts/expected-failure" 46 | 47 | build:iso-unknown-key: 48 | extends: .iso_build 49 | variables: 50 | DIST_DOM0: fc37 51 | USE_QUBES_REPO_VERSION: "4.2" 52 | USE_QUBES_REPO_TESTING: "1" 53 | RPM_BUILD_DEFINES: "--nocheck" 54 | INSTALLER_KICKSTART: "/tmp/qubes-installer/conf/iso-unknown-key.ks" 55 | EXPECT_FAILURE: "./scripts/expected-failure" 56 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "qubes-release"] 2 | path = qubes-release 3 | url = https://github.com/QubesOS/qubes-qubes-release 4 | [submodule "meta-packages"] 5 | path = meta-packages 6 | url = https://github.com/QubesOS/qubes-meta-packages 7 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # The Qubes OS Project, http://www.qubes-os.org 2 | # 3 | # Copyright (C) 2022 Frédéric Pierret (fepitre) 4 | # 5 | # This program is free software; you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation; either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License along 16 | # with this program. If not, see . 17 | # 18 | # SPDX-License-Identifier: GPL-2.0-or-later 19 | 20 | DIST ?= fc37 21 | DIST_VER = $(subst fc,,$(DIST)) 22 | 23 | INSTALLER_DIR ?= $(PWD) 24 | 25 | ISO_INSTALLER ?= 1 26 | INSTALLER_KICKSTART ?= $(INSTALLER_DIR)/conf/qubes-kickstart.cfg 27 | 28 | ISO_LIVEUSB ?= 0 29 | LIVE_KICKSTART ?= $(INSTALLER_DIR)/conf/liveusb.ks 30 | 31 | CREATEREPO := $(shell which createrepo_c createrepo 2>/dev/null |head -1) 32 | 33 | ifdef QUBES_RELEASE 34 | ISO_VERSION := $(QUBES_RELEASE) 35 | endif 36 | ISO_VERSION ?= $(shell date +%Y%m%d) 37 | 38 | ifneq (,$(ISO_FLAVOR)) 39 | ISO_NAME := Qubes-$(ISO_VERSION)-$(ISO_FLAVOR)-x86_64 40 | else 41 | ISO_NAME := Qubes-$(ISO_VERSION)-x86_64 42 | endif 43 | ISO_VOLID := $(shell echo $(ISO_NAME) | tr a-z A-Z | tr -s -c [:alnum:]'\n' - | head -c 32) 44 | 45 | BASE_DIR := $(INSTALLER_DIR)/work/$(ISO_VERSION)/x86_64 46 | TMP_DIR := $(PWD)/work 47 | 48 | DNF := /usr/bin/dnf 49 | DNF_ROOT := /tmp/dnfroot 50 | DNF_REPO := $(DNF_ROOT)/etc/yum.repos.d/installer.repo 51 | DNF_PACKAGES := $(DNF_ROOT)/tmp/packages.list 52 | DNF_OPTS := -y --releasever=$(DIST_VER) --installroot=$(DNF_ROOT) --config=$(DNF_ROOT)/etc/dnf/dnf.conf 53 | 54 | LORAX := /usr/sbin/lorax 55 | LORAX_PACKAGES := $(DNF_ROOT)/tmp/lorax_packages.list 56 | LORAX_OPTS := --product "Qubes OS" --variant "qubes" --macboot --force --rootfs-size=4 57 | LORAX_OPTS += --version "$(ISO_VERSION)" --release "Qubes OS $(ISO_VERSION)" --volid $(ISO_VOLID) 58 | LORAX_OPTS += --workdir $(INSTALLER_DIR)/work/work/x86_64 --logfile $(INSTALLER_DIR)/work/logs/lorax-x86_64.log 59 | LORAX_OPTS += --repo $(DNF_REPO) --skip-branding --disablerepo=fedora --disablerepo=fedora-updates --disablerepo=updates --disablerepo='qubes-*' 60 | 61 | ifeq ($(ISO_USE_KERNEL_LATEST),1) 62 | LORAX_OPTS += --installpkgs kernel-latest --excludepkgs kernel 63 | endif 64 | 65 | ifdef QUBES_RELEASE 66 | LORAX_OPTS += --isfinal 67 | endif 68 | 69 | 70 | help: 71 | @echo "make iso <== \o/";\ 72 | echo; \ 73 | echo "make clean";\ 74 | echo; \ 75 | exit 0; 76 | 77 | .PHONY: clean clean-repos iso iso-prepare iso-installer iso-liveusb 78 | 79 | ifeq ($(ISO_INSTALLER),1) 80 | iso: iso-installer 81 | endif 82 | ifeq ($(ISO_LIVEUSB),1) 83 | iso: iso-liveusb 84 | endif 85 | 86 | iso-prepare: 87 | # 88 | # Prepare repositories 89 | # 90 | 91 | rm -rf $(TMP_DIR) 92 | rm -rf $(DNF_ROOT) 93 | 94 | # Copy the comps file 95 | mkdir -p $(TMP_DIR) 96 | cp $(INSTALLER_DIR)/meta-packages/comps/comps-dom0.xml $(TMP_DIR)/comps.xml 97 | if [ "$(ISO_USE_KERNEL_LATEST)" == 1 ]; then \ 98 | sed -i 's#optional">kernel-latest#mandatory">kernel-latest#g' $(TMP_DIR)/comps.xml; \ 99 | fi; 100 | 101 | # Legacy conf using this folder 102 | ln -nsf $(INSTALLER_DIR) /tmp/qubes-installer 103 | 104 | mkdir -p /tmp/qubes-installer/yum/installer/rpm 105 | rm -rf $(INSTALLER_DIR)/yum/installer/repodata 106 | $(CREATEREPO) -q -g $(TMP_DIR)/comps.xml yum/installer 107 | 108 | mkdir -p yum/qubes-dom0 109 | $(CREATEREPO) -q -g $(TMP_DIR)/comps.xml --update yum/qubes-dom0 110 | 111 | # 112 | # Prepare DNF 113 | # 114 | 115 | # Destination directory for RPM 116 | mkdir -p $(BASE_DIR)/os/Packages 117 | 118 | # Create default DNF conf 119 | mkdir -p $(DNF_ROOT)/etc/dnf 120 | cp $(INSTALLER_DIR)/yum/dnf.conf $(DNF_ROOT)/etc/dnf/ 121 | 122 | # Copy Fedora key to DNF installroot 123 | mkdir -p $(DNF_ROOT)/etc/pki/rpm-gpg 124 | cp $(INSTALLER_DIR)/qubes-release/RPM-GPG-KEY-fedora-$(DIST_VER)-primary $(DNF_ROOT)/etc/pki/rpm-gpg 125 | 126 | iso-parse-kickstart: 127 | # Extract repos conf and packages from kickstart 128 | mkdir -p $(DNF_ROOT)/etc/yum.repos.d $(DNF_ROOT)/tmp 129 | $(INSTALLER_DIR)/scripts/ksparser --ks $(INSTALLER_KICKSTART) --extract-repo-conf-to $(DNF_REPO) --extract-packages-to $(DNF_PACKAGES) 130 | 131 | iso-parse-tmpl: 132 | $(INSTALLER_DIR)/scripts/tmplparser --repo $(DNF_REPO) --extract-packages-to $(LORAX_PACKAGES) 133 | 134 | 135 | iso-packages-anaconda: 136 | $(DNF) $(DNF_OPTS) clean all 137 | umask 022; $(DNF) $(DNF_OPTS) --downloaddir=$(BASE_DIR)/os/Packages --downloadonly install $(shell cat $(DNF_PACKAGES)) 138 | pushd $(BASE_DIR)/os/ && $(CREATEREPO) -q -g $(TMP_DIR)/comps.xml . 139 | 140 | iso-packages-lorax: 141 | $(DNF) $(DNF_OPTS) clean all 142 | umask 022; $(DNF) $(DNF_OPTS) --downloaddir=$(INSTALLER_DIR)/yum/installer/rpm --downloadonly install $(shell cat $(LORAX_PACKAGES)) 143 | pushd $(INSTALLER_DIR)/yum/installer && $(CREATEREPO) -q -g $(TMP_DIR)/comps.xml --update . 144 | 145 | iso-installer-lorax: 146 | $(LORAX) $(LORAX_OPTS) $(BASE_DIR)/os 147 | 148 | iso-installer-mkisofs: 149 | mkdir -p $(BASE_DIR)/iso/ 150 | chmod og+rX -R $(BASE_DIR)/os/ 151 | xorrisofs -o $(BASE_DIR)/iso/$(ISO_NAME).iso \ 152 | -R -J -V $(ISO_VOLID) \ 153 | --grub2-mbr /usr/lib/grub/i386-pc/boot_hybrid.img \ 154 | -partition_offset 16 \ 155 | -append_partition 2 C12A7328-F81F-11D2-BA4B-00A0C93EC93B $(BASE_DIR)/os/images/efiboot.img \ 156 | -iso_mbr_part_type EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 \ 157 | -c boot.cat --boot-catalog-hide \ 158 | -b images/eltorito.img \ 159 | -no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info \ 160 | -eltorito-alt-boot \ 161 | -e '--interval:appended_partition_2:all::' -no-emul-boot \ 162 | -graft-points \ 163 | .=$(BASE_DIR)/os \ 164 | boot/grub2/i386-pc=/usr/lib/grub/i386-pc 165 | /usr/bin/implantisomd5 $(BASE_DIR)/iso/$(ISO_NAME).iso 166 | 167 | iso-installer: iso-prepare iso-parse-kickstart iso-parse-tmpl iso-packages-anaconda iso-packages-lorax iso-installer-lorax iso-installer-mkisofs 168 | # Move result files to known-named directories 169 | mkdir -p build/ISO/qubes-x86_64/iso 170 | mv $(BASE_DIR)/iso/$(ISO_NAME).iso build/ISO/qubes-x86_64/iso/ 171 | echo $(ISO_VERSION) > build/ISO/qubes-x86_64/iso/build_latest 172 | rm -rf build/work 173 | mv work build/work 174 | chown --reference=Makefile -R build yum 175 | rm -rf work 176 | 177 | iso-liveusb: $(LIVE_KICKSTART) iso-prepare 178 | pushd work && $(INSTALLER_DIR)/scripts/livecd-creator-qubes --debug --product='Qubes OS' --title="Qubes OS $(ISO_VERSION)" --fslabel="Qubes-$(ISO_VERSION)-x86_64-LIVE" --config $(LIVE_KICKSTART) && popd 179 | # Move result files to known-named directories 180 | mkdir -p build/ISO/qubes-x86_64/iso build/work 181 | mv work/*.iso build/ISO/qubes-x86_64/iso/ 182 | chown --reference=Makefile -R build yum 183 | rm -rf work 184 | 185 | clean-repos: 186 | @echo "--> Removing old rpms from the installer repos..." 187 | @(cd yum && ./clean_repos.sh) 188 | 189 | clean: 190 | sudo rm -rf $(DNF_ROOT) 191 | sudo rm -fr build/* 192 | 193 | get-sources: 194 | git submodule update --init --recursive 195 | 196 | ifeq ($(ISO_LIVEUSB),1) 197 | get-sources: 198 | $(MAKE) -C livecd-tools get-sources 199 | 200 | verify-sources: 201 | $(MAKE) -C livecd-tools verify-sources 202 | else 203 | verify-sources: 204 | @true 205 | endif 206 | -------------------------------------------------------------------------------- /Makefile.builder: -------------------------------------------------------------------------------- 1 | ifeq ($(ISO_LIVEUSB),1) 2 | RPM_SPEC_FILES.dom0 += \ 3 | livecd-tools/livecd-tools.spec \ 4 | live/qubes-live.spec 5 | endif 6 | 7 | RPM_SPEC_FILES := $(RPM_SPEC_FILES.$(PACKAGE_SET)) 8 | SOURCE_COPY_IN := $(RPM_SPEC_FILES.dom0) 9 | 10 | $(RPM_SPEC_FILES.dom0): SPEC=$(notdir $@) 11 | $(RPM_SPEC_FILES.dom0): PACKAGE=$(dir $@) 12 | $(RPM_SPEC_FILES.dom0): SOURCE_ARCHIVE_NAME=$(notdir $(shell $(RPM_PLUGIN_DIR)/tools/spectool --list-files --source 0 $(CHROOT_DIR)/$(DIST_SRC)/$(PACKAGE)/$(SPEC) | cut -d' ' -f2)) 13 | $(RPM_SPEC_FILES.dom0): 14 | # Create the archive for specific Qubes packages 15 | [[ -e $(CHROOT_DIR)/$(DIST_SRC)/$(PACKAGE)/$(SOURCE_ARCHIVE_NAME) ]] \ 16 | || $(BUILDER_DIR)/scripts/create-archive $(CHROOT_DIR)/$(DIST_SRC)/$(PACKAGE) $(SOURCE_ARCHIVE_NAME) 17 | 18 | NO_ARCHIVE = 1 19 | 20 | dist-package-build: RPM_SOURCE_DIR=$(dir $(DIST_SRC)/$(PACKAGE)) 21 | 22 | # vim: ft=make 23 | -------------------------------------------------------------------------------- /build-deps-iso.list: -------------------------------------------------------------------------------- 1 | anaconda 2 | pykickstart 3 | lorax-templates-qubes 4 | livecd-tools 5 | dracut-live 6 | python3-jinja2 7 | createrepo_c 8 | -------------------------------------------------------------------------------- /build-deps.list: -------------------------------------------------------------------------------- 1 | audit-libs-devel 2 | device-mapper-devel 3 | elfutils-devel 4 | intltool 5 | isomd5sum-devel 6 | libarchive-devel 7 | libblkid-devel 8 | libnl-devel 9 | libxml2-python 10 | newt-devel 11 | pykickstart 12 | python-urlgrabber 13 | rpm-devel 14 | rpm-python 15 | slang-devel 16 | xmlto 17 | yum 18 | NetworkManager-glib-devel 19 | system-config-keyboard 20 | iscsi-initiator-utils-devel 21 | python-setuptools-devel 22 | tar 23 | libX11-devel 24 | e2fsprogs-devel 25 | zlib-devel 26 | python-devel 27 | libXcomposite-devel 28 | gtk2-devel 29 | curl-devel 30 | libselinux-devel 31 | kde-filesystem-4.4.5 32 | bzip2-devel 33 | libXt-devel 34 | libXxf86misc-devel 35 | gtk3-devel 36 | gtk-doc 37 | gobject-introspection-devel 38 | glade-devel 39 | pygobject3 40 | libgnomekbd-devel 41 | python-pyblock 42 | python-nose 43 | transifex-client 44 | -------------------------------------------------------------------------------- /conf/comps-dom0.xml: -------------------------------------------------------------------------------- 1 | ../meta-packages/comps/comps-dom0.xml -------------------------------------------------------------------------------- /conf/debug.ks: -------------------------------------------------------------------------------- 1 | # This kickstart is used for building "debug" ISO, which is used for automatic 2 | # tests. Do not use for releases. 3 | 4 | %include qubes-kickstart.cfg 5 | 6 | %packages 7 | 8 | gdb 9 | python-ipython 10 | netplug 11 | openssh-server 12 | rpm-build 13 | rpm-sign 14 | strace 15 | xdotool 16 | xen-debuginfo 17 | 18 | qubes-core-dom0-debuginfo 19 | qubes-core-dom0-linux-debuginfo 20 | qubes-gui-dom0-debuginfo 21 | 22 | %end 23 | -------------------------------------------------------------------------------- /conf/iso-full-online.ks: -------------------------------------------------------------------------------- 1 | # Full ISO build using packages from online repositories instead of local build 2 | %include qubes-kickstart.cfg 3 | 4 | repo --name=qubes-r4.2 --gpgkey=file:///tmp/qubes-installer/qubes-release/RPM-GPG-KEY-qubes-4.2-primary --baseurl=http://yum.qubes-os.org/r4.2/current-testing/host/fc32 --ignoregroups=true 5 | repo --name=qubes-r4.2-templates-itl --gpgkey=file:///tmp/qubes-installer/qubes-release/RPM-GPG-KEY-qubes-4.2-primary --metalink=http://yum.qubes-os.org/r4.2/templates-itl/repodata/repomd.xml.metalink --ignoregroups=true 6 | repo --name=qubes-r4.2-templates-community --gpgkey=file:///tmp/qubes-installer/qubes-release/RPM-GPG-KEY-qubes-4.2-templates-community --metalink=http://yum.qubes-os.org/r4.2/templates-community/repodata/repomd.xml.metalink --ignoregroups=true 7 | 8 | -------------------------------------------------------------------------------- /conf/iso-online-testing-no-templates.ks: -------------------------------------------------------------------------------- 1 | %include qubes-kickstart.cfg 2 | 3 | repo --name=qubes-r4.2-testing --gpgkey=file:///tmp/qubes-installer/qubes-release/RPM-GPG-KEY-qubes-4.2-primary --baseurl=http://yum.qubes-os.org/r4.2/current-testing/host/fc37 --ignoregroups=true 4 | -------------------------------------------------------------------------------- /conf/iso-online-testing.ks: -------------------------------------------------------------------------------- 1 | %include iso-online.ks 2 | 3 | repo --name=qubes-r4.2-testing --gpgkey=file:///tmp/qubes-installer/qubes-release/RPM-GPG-KEY-qubes-4.2-primary --baseurl=http://yum.qubes-os.org/r4.2/current-testing/host/fc37 --ignoregroups=true 4 | repo --name=qubes-r4.2-templates-itl-testing --gpgkey=file:///tmp/qubes-installer/qubes-release/RPM-GPG-KEY-qubes-4.2-primary --metalink=http://yum.qubes-os.org/r4.2/templates-itl-testing/repodata/repomd.xml.metalink --ignoregroups=true 5 | repo --name=qubes-r4.2-templates-community-testing --gpgkey=file:///tmp/qubes-installer/qubes-release/RPM-GPG-KEY-qubes-4.2-templates-community --metalink=http://yum.qubes-os.org/r4.2/templates-community-testing/repodata/repomd.xml.metalink --ignoregroups=true 6 | 7 | -------------------------------------------------------------------------------- /conf/iso-online.ks: -------------------------------------------------------------------------------- 1 | # Full ISO build using packages from online repositories instead of local build 2 | %include qubes-kickstart.cfg 3 | 4 | repo --name=qubes-r4.2 --gpgkey=file:///tmp/qubes-installer/qubes-release/RPM-GPG-KEY-qubes-4.2-primary --baseurl=http://yum.qubes-os.org/r4.2/current/host/fc37 --ignoregroups=true 5 | repo --name=qubes-r4.2-templates-itl --gpgkey=file:///tmp/qubes-installer/qubes-release/RPM-GPG-KEY-qubes-4.2-primary --metalink=http://yum.qubes-os.org/r4.2/templates-itl/repodata/repomd.xml.metalink --ignoregroups=true 6 | repo --name=qubes-r4.2-templates-community --gpgkey=file:///tmp/qubes-installer/qubes-release/RPM-GPG-KEY-qubes-4.2-templates-community --metalink=http://yum.qubes-os.org/r4.2/templates-community/repodata/repomd.xml.metalink --ignoregroups=true 7 | 8 | -------------------------------------------------------------------------------- /conf/iso-unknown-key.ks: -------------------------------------------------------------------------------- 1 | %include iso-online-testing.ks 2 | 3 | repo --name=unknown-key --gpgkey=file:///tmp/qubes-installer/qubes-release/RPM-GPG-KEY-qubes-3.1-primary --baseurl=http://ftp.qubes-os.org/~marmarek/repo-verify-unknown-key --ignoregroups=true 4 | -------------------------------------------------------------------------------- /conf/iso-unsigned.ks: -------------------------------------------------------------------------------- 1 | %include iso-online-testing.ks 2 | 3 | # unsigned package to be downladed by pungi 4 | repo --name=unsigned --gpgkey=file:///tmp/qubes-installer/qubes-release/RPM-GPG-KEY-qubes-3.1-primary --baseurl=http://ftp.qubes-os.org/~marmarek/repo-verify-unsigned --ignoregroups=true 5 | -------------------------------------------------------------------------------- /conf/iso-unsigned2.ks: -------------------------------------------------------------------------------- 1 | %include iso-online-testing.ks 2 | 3 | # unsigned package to be downladed by lorax 4 | repo --name=unsigned2 --gpgkey=file:///tmp/qubes-installer/qubes-release/RPM-GPG-KEY-qubes-3.1-primary --baseurl=http://ftp.qubes-os.org/~marmarek/repo-verify-unsigned2 --ignoregroups=true 5 | -------------------------------------------------------------------------------- /conf/liveusb.ks: -------------------------------------------------------------------------------- 1 | # fedora-live-base.ks 2 | # 3 | # Defines the basics for all kickstarts in the fedora-live branch 4 | # Does not include package selection (other then mandatory) 5 | # Does not include localization packages or configuration 6 | # 7 | # Does includes "default" language configuration (kickstarts including 8 | # this template can override these settings) 9 | 10 | lang en_US.UTF-8 11 | keyboard us 12 | timezone US/Eastern 13 | auth --useshadow --passalgo=sha512 14 | xconfig --startxonboot 15 | part / --size 16386 --fstype ext4 16 | 17 | device xhci_hcd 18 | device xhci_pci 19 | 20 | %include qubes-kickstart.cfg 21 | 22 | %packages 23 | # This was added a while ago, I think it falls into the category of 24 | # "Diagnosis/recovery tool useful from a Live OS image". Leaving this untouched 25 | # for now. 26 | memtest86+ 27 | 28 | # The point of a live image is to install 29 | anaconda 30 | 31 | # Without this, initramfs generation during live image creation fails: #1242586 32 | #dracut-live 33 | 34 | qubes-live 35 | 36 | shim 37 | 38 | %end 39 | 40 | %post 41 | 42 | # make it so that we don't do writing to the overlay for things which 43 | # are just tmpdirs/caches 44 | # note https://bugzilla.redhat.com/show_bug.cgi?id=1135475 45 | cat >> /etc/fstab << EOF 46 | vartmp /var/tmp tmpfs defaults 0 0 47 | varcacheyum /var/cache/yum tmpfs mode=0755,context=system_u:object_r:rpm_var_cache_t:s0 0 0 48 | EOF 49 | 50 | # work around for poor key import UI in PackageKit 51 | rm -f /var/lib/rpm/__db* 52 | releasever=$(rpm -q --qf '%{version}\n' --whatprovides system-release) 53 | rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-qubes-$releasever-primary 54 | rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-20-primary 55 | echo "Packages within this LiveCD" 56 | rpm -qa 57 | # Note that running rpm recreates the rpm db files which aren't needed or wanted 58 | rm -f /var/lib/rpm/__db* 59 | 60 | # go ahead and pre-make the man -k cache (#455968) 61 | /usr/bin/mandb 62 | 63 | # save a little bit of space at least... 64 | rm -f /boot/initramfs* 65 | # make sure there aren't core files lying around 66 | rm -f /core* 67 | 68 | # convince readahead not to collect 69 | # FIXME: for systemd 70 | 71 | # forcibly regenerate fontconfig cache (so long as this live image has 72 | # fontconfig) - see #1169979 73 | if [ -x /usr/bin/fc-cache ] ; then 74 | fc-cache -f 75 | fi 76 | 77 | echo 'File created by kickstart. See systemd-update-done.service(8).' \ 78 | | tee /etc/.updated >/var/.updated 79 | 80 | 81 | # 82 | # setup Qubes 83 | # 84 | 85 | qubes-prefs -s default-template fedora-21 86 | 87 | # TODO: icons? 88 | for tpl in `ls /var/lib/qubes/vm-templates`; do 89 | case $tpl in 90 | fedora*) 91 | cat /usr/share/qubes/live-default-appmenus-fedora | \ 92 | /usr/bin/qvm-sync-appmenus \ 93 | --force-root --offline-mode $tpl 94 | ;; 95 | debian*) 96 | cat /usr/share/qubes/live-default-appmenus-debian | \ 97 | /usr/bin/qvm-sync-appmenus \ 98 | --force-root --offline-mode $tpl 99 | ;; 100 | esac 101 | done 102 | 103 | # we won't do `useradd qubes`, since his creation depends of persistent home 104 | # feature; see /etc/rc.d/init.d/livesys 105 | 106 | qvm-create --offline-mode --force-root --net --label red sys-net 107 | qvm-create --offline-mode --force-root --proxy --label green sys-firewall 108 | 109 | qvm-prefs --offline-mode --force-root --set sys-firewall netvm sys-net 110 | qubes-prefs --set default-netvm sys-firewall 111 | 112 | qvm-create --offline-mode --force-root work --label green 113 | qvm-create --offline-mode --force-root banking --label green 114 | qvm-create --offline-mode --force-root personal --label yellow 115 | qvm-create --offline-mode --force-root untrusted --label red 116 | 117 | qvm-create --offline-mode --force-root `qubes-prefs default-template`-dvm \ 118 | --label gray --internal 119 | 120 | qubes-set-updates --offline-mode disable 121 | 122 | chgrp -R qubes /var/lib/qubes 123 | chmod -R g+w /var/lib/qubes 124 | 125 | mv /var/lib/qubes /var/lib/qubes-base 126 | mkdir -p /var/lib/qubes 127 | 128 | %end 129 | 130 | 131 | %post --nochroot 132 | cp $INSTALL_ROOT/usr/share/licenses/*-release/* $LIVE_ROOT/ 133 | 134 | # only works on x86, x86_64 135 | if [ "$(uname -i)" = "i386" -o "$(uname -i)" = "x86_64" ]; then 136 | if [ ! -d $LIVE_ROOT/LiveOS ]; then mkdir -p $LIVE_ROOT/LiveOS ; fi 137 | cp /usr/bin/livecd-iso-to-disk $LIVE_ROOT/LiveOS 138 | fi 139 | %end 140 | -------------------------------------------------------------------------------- /conf/qubes-kickstart.cfg: -------------------------------------------------------------------------------- 1 | # Kickstart file for composing the "Qubes" spin of Fedora 2 | 3 | # Package manifest for the compose. Uses repo group metadata to translate groups. 4 | # (@base is added by default unless you add --nobase to %packages) 5 | # (default groups for the configured repos are added by --default) 6 | 7 | repo --name=fedora --gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-37-primary --ignoregroups=true --metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-37&arch=x86_64 8 | repo --name=fedora-updates --gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-37-primary --ignoregroups=true --metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-f37&arch=x86_64 9 | repo --name=installer --baseurl=file:///tmp/qubes-installer/yum/installer/ 10 | repo --name=qubes-dom0 --baseurl=file:///tmp/qubes-installer/yum/qubes-dom0/ 11 | 12 | %packages 13 | @core 14 | @base 15 | @base-x --nodefaults 16 | @xfce-desktop-qubes 17 | @xfce-extra-plugins 18 | @xfce-media 19 | @sound-basic 20 | @fonts 21 | @hardware-support 22 | @qubes 23 | @qubes-ui 24 | @anaconda-tools 25 | @fedora 26 | @debian 27 | @whonix 28 | kernel-latest 29 | kernel-latest-qubes-vm 30 | # weaks dependencies 31 | -adobe-source-code-pro-fonts 32 | -compat-f32-dejavu-sans-fonts 33 | -compat-f32-dejavu-sans-mono-fonts 34 | -compat-f32-dejavu-serif-fonts 35 | # -crypto-policies-scripts 36 | -deltarpm 37 | -dnfdaemon-selinux 38 | -fips-mode-setup 39 | -flac 40 | -fwupd-plugin-flashrom 41 | -fwupd-plugin-modem-manager 42 | -gcc-gdb-plugin 43 | -geoclue2 44 | -geolite2-city 45 | -geolite2-country 46 | -gnupg2-smime 47 | -gstreamer1-plugins-good-qt 48 | -lame 49 | -libsss_autofs 50 | -libsss_sudo 51 | -libxcrypt-compat 52 | -libyui-gtk 53 | -libyui-mga-gtk 54 | -libyui-mga-qt 55 | -libyui-qt 56 | -libyui-qt-graph 57 | -mkpasswd 58 | -ntfs-3g-system-compression 59 | -oddjob-mkhomedir 60 | -openssl-pkcs11 61 | -opus-tools 62 | -perl-IO-Compress 63 | -perl-IO-Socket-SSL 64 | -perl-Math-BigInt 65 | -perl-Mozilla-CA 66 | -pigz 67 | -pinentry 68 | -python-systemd-doc 69 | -python-unversioned-command 70 | -python3-unbound 71 | -rpm-plugin-systemd-inhibit 72 | -sssd-nfs-idmap 73 | -trousers 74 | -xorg-x11-fonts-misc 75 | -xdg-desktop-portal-gtk 76 | # selected dependencies 77 | -blueberry 78 | -gnome-bluetooth 79 | -gnome-bluetooth-libs 80 | %end 81 | -------------------------------------------------------------------------------- /conf/travis-iso-full.ks: -------------------------------------------------------------------------------- 1 | iso-online-testing.ks -------------------------------------------------------------------------------- /live/default-appmenus-debian: -------------------------------------------------------------------------------- 1 | /usr/share/applications/yelp.desktop:Name=Help 2 | /usr/share/applications/yelp.desktop:Comment=Get help with GNOME 3 | /usr/share/applications/yelp.desktop:Exec=qubes-desktop-run /usr/share/applications/yelp.desktop 4 | /usr/share/applications/yelp.desktop:Categories=GNOME;GTK;Core;Documentation;Utility; 5 | /usr/share/applications/gcr-prompter.desktop:Name=Access Prompt 6 | /usr/share/applications/gcr-prompter.desktop:Comment=Unlock access to passwords and other secrets 7 | /usr/share/applications/gcr-prompter.desktop:Exec=qubes-desktop-run /usr/share/applications/gcr-prompter.desktop 8 | /usr/share/applications/nm-applet.desktop:Name=Network 9 | /usr/share/applications/nm-applet.desktop:Comment=Manage your network connections 10 | /usr/share/applications/nm-applet.desktop:Exec=qubes-desktop-run /usr/share/applications/nm-applet.desktop 11 | /usr/share/applications/vim.desktop:Name=Vim 12 | /usr/share/applications/vim.desktop:GenericName=Text Editor 13 | /usr/share/applications/vim.desktop:Comment=Edit text files 14 | /usr/share/applications/vim.desktop:Exec=qubes-desktop-run /usr/share/applications/vim.desktop 15 | /usr/share/applications/vim.desktop:Categories=Utility;TextEditor; 16 | /usr/share/applications/mutt.desktop:Categories=Office;Network;Email; 17 | /usr/share/applications/mutt.desktop:Comment=Simple text-based Mail User Agent 18 | /usr/share/applications/mutt.desktop:Exec=qubes-desktop-run /usr/share/applications/mutt.desktop 19 | /usr/share/applications/mutt.desktop:Name=mutt 20 | /usr/share/applications/gpk-application.desktop:Name=Packages 21 | /usr/share/applications/gpk-application.desktop:Comment=Add or remove software installed on the system 22 | /usr/share/applications/gpk-application.desktop:Exec=qubes-desktop-run /usr/share/applications/gpk-application.desktop 23 | /usr/share/applications/gpk-application.desktop:Categories=GNOME;GTK;System;Settings;PackageManager; 24 | /usr/share/applications/mate-notification-properties.desktop:Name=Pop-Up Notifications 25 | /usr/share/applications/mate-notification-properties.desktop:Comment=Set your pop-up notification preferences 26 | /usr/share/applications/mate-notification-properties.desktop:Exec=qubes-desktop-run /usr/share/applications/mate-notification-properties.desktop 27 | /usr/share/applications/mate-notification-properties.desktop:Categories=GTK;Settings;DesktopSettings; 28 | /usr/share/applications/debian-uxterm.desktop:Name=UXTerm 29 | /usr/share/applications/debian-uxterm.desktop:Comment=standard terminal emulator for the X window system 30 | /usr/share/applications/debian-uxterm.desktop:Exec=qubes-desktop-run /usr/share/applications/debian-uxterm.desktop 31 | /usr/share/applications/debian-uxterm.desktop:Categories=System;TerminalEmulator;Utility; 32 | /usr/share/applications/iceweasel.desktop:Name=Iceweasel 33 | /usr/share/applications/iceweasel.desktop:Comment=Browse the World Wide Web 34 | /usr/share/applications/iceweasel.desktop:GenericName=Web Browser 35 | /usr/share/applications/iceweasel.desktop:Exec=qubes-desktop-run /usr/share/applications/iceweasel.desktop 36 | /usr/share/applications/iceweasel.desktop:Categories=Network;WebBrowser; 37 | /usr/share/applications/display-im6.q16.desktop:Name=ImageMagick (display Q16) 38 | /usr/share/applications/display-im6.q16.desktop:Comment=Display and edit image files 39 | /usr/share/applications/display-im6.q16.desktop:Exec=qubes-desktop-run /usr/share/applications/display-im6.q16.desktop 40 | /usr/share/applications/display-im6.q16.desktop:Categories=Graphics; 41 | /usr/share/applications/org.gnome.Nautilus.desktop:Name=Files 42 | /usr/share/applications/org.gnome.Nautilus.desktop:Comment=Access and organize files 43 | /usr/share/applications/org.gnome.Nautilus.desktop:Exec=qubes-desktop-run /usr/share/applications/org.gnome.Nautilus.desktop 44 | /usr/share/applications/org.gnome.Nautilus.desktop:Categories=GNOME;GTK;Utility;Core;FileManager; 45 | /usr/share/applications/python3.4.desktop:Name=Python (v3.4) 46 | /usr/share/applications/python3.4.desktop:Comment=Python Interpreter (v3.4) 47 | /usr/share/applications/python3.4.desktop:Exec=qubes-desktop-run /usr/share/applications/python3.4.desktop 48 | /usr/share/applications/python3.4.desktop:Categories=Development; 49 | /usr/share/applications/gpk-prefs.desktop:Name=Package Sources 50 | /usr/share/applications/gpk-prefs.desktop:Comment=Enable or disable package repositories 51 | /usr/share/applications/gpk-prefs.desktop:Exec=qubes-desktop-run /usr/share/applications/gpk-prefs.desktop 52 | /usr/share/applications/gpk-prefs.desktop:Categories=Settings;X-GNOME-SystemSettings; 53 | /usr/share/applications/gpk-update-viewer.desktop:Name=Package Updater 54 | /usr/share/applications/gpk-update-viewer.desktop:Comment=Update software installed on the system 55 | /usr/share/applications/gpk-update-viewer.desktop:Exec=qubes-desktop-run /usr/share/applications/gpk-update-viewer.desktop 56 | /usr/share/applications/gpk-update-viewer.desktop:Categories=GNOME;GTK;System; 57 | /usr/share/applications/display-im6.desktop:Name=ImageMagick (display Q16) 58 | /usr/share/applications/display-im6.desktop:Comment=Display and edit image files 59 | /usr/share/applications/display-im6.desktop:Exec=qubes-desktop-run /usr/share/applications/display-im6.desktop 60 | /usr/share/applications/display-im6.desktop:Categories=Graphics; 61 | /usr/share/applications/system-config-printer.desktop:Name=Print Settings 62 | /usr/share/applications/system-config-printer.desktop:Comment=Configure printers 63 | /usr/share/applications/system-config-printer.desktop:Exec=qubes-desktop-run /usr/share/applications/system-config-printer.desktop 64 | /usr/share/applications/system-config-printer.desktop:Categories=System;Settings;HardwareSettings;Printing;GTK; 65 | /usr/share/applications/emacs24.desktop:Name=GNU Emacs 24 66 | /usr/share/applications/emacs24.desktop:GenericName=Text Editor 67 | /usr/share/applications/emacs24.desktop:Comment=View and edit files 68 | /usr/share/applications/emacs24.desktop:Exec=qubes-desktop-run /usr/share/applications/emacs24.desktop 69 | /usr/share/applications/emacs24.desktop:Categories=Utility;Development;TextEditor; 70 | /usr/share/applications/gpk-log.desktop:Name=Package Log 71 | /usr/share/applications/gpk-log.desktop:Comment=View past package management tasks 72 | /usr/share/applications/gpk-log.desktop:Exec=qubes-desktop-run /usr/share/applications/gpk-log.desktop 73 | /usr/share/applications/gpk-log.desktop:Categories=GNOME;GTK;System; 74 | /usr/share/applications/nm-connection-editor.desktop:Name=Network Connections 75 | /usr/share/applications/nm-connection-editor.desktop:Comment=Manage and change your network connection settings 76 | /usr/share/applications/nm-connection-editor.desktop:Exec=qubes-desktop-run /usr/share/applications/nm-connection-editor.desktop 77 | /usr/share/applications/nm-connection-editor.desktop:Categories=GNOME;GTK;Settings;X-GNOME-NetworkSettings; 78 | /usr/share/applications/keepassx.desktop:Name=KeePassX 79 | /usr/share/applications/keepassx.desktop:GenericName=Cross Platform Password Manager 80 | /usr/share/applications/keepassx.desktop:Exec=qubes-desktop-run /usr/share/applications/keepassx.desktop 81 | /usr/share/applications/keepassx.desktop:Comment=Cross Platform Password Manager 82 | /usr/share/applications/keepassx.desktop:Categories=Qt;Utility;Security; 83 | /usr/share/applications/qtconfig-qt4.desktop:Categories=Qt;Settings; 84 | /usr/share/applications/qtconfig-qt4.desktop:Exec=qubes-desktop-run /usr/share/applications/qtconfig-qt4.desktop 85 | /usr/share/applications/qtconfig-qt4.desktop:Name=Qt 4 Settings 86 | /usr/share/applications/nautilus-classic.desktop:Name=Desktop Icons 87 | /usr/share/applications/nautilus-classic.desktop:Comment=Classic session desktop file for desktop icons 88 | /usr/share/applications/nautilus-classic.desktop:Exec=qubes-desktop-run /usr/share/applications/nautilus-classic.desktop 89 | /usr/share/applications/icedove.desktop:Name=Icedove 90 | /usr/share/applications/icedove.desktop:Comment=Read/Write Mail/News with Icedove 91 | /usr/share/applications/icedove.desktop:GenericName=Mail Client 92 | /usr/share/applications/icedove.desktop:Exec=qubes-desktop-run /usr/share/applications/icedove.desktop 93 | /usr/share/applications/icedove.desktop:Categories=Network;Email;News;GTK; 94 | /usr/share/applications/gnome-terminal.desktop:Name=Terminal 95 | /usr/share/applications/gnome-terminal.desktop:Comment=Use the command line 96 | /usr/share/applications/gnome-terminal.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-terminal.desktop 97 | /usr/share/applications/gnome-terminal.desktop:Categories=GNOME;GTK;System;TerminalEmulator; 98 | /usr/share/applications/reportbug.desktop:Name=Reportbug 99 | /usr/share/applications/reportbug.desktop:Comment=Report bugs to the Debian BTS 100 | /usr/share/applications/reportbug.desktop:GenericName=Debian bug reporting tool 101 | /usr/share/applications/reportbug.desktop:Exec=qubes-desktop-run /usr/share/applications/reportbug.desktop 102 | /usr/share/applications/reportbug.desktop:Categories=System; 103 | /usr/share/applications/geoclue-where-am-i.desktop:Name=Where am I? 104 | /usr/share/applications/geoclue-where-am-i.desktop:GenericName=Demo geolocation application 105 | /usr/share/applications/geoclue-where-am-i.desktop:Comment=Find your current location 106 | /usr/share/applications/geoclue-where-am-i.desktop:Exec=qubes-desktop-run /usr/share/applications/geoclue-where-am-i.desktop 107 | /usr/share/applications/python2.7.desktop:Name=Python (v2.7) 108 | /usr/share/applications/python2.7.desktop:Comment=Python Interpreter (v2.7) 109 | /usr/share/applications/python2.7.desktop:Exec=qubes-desktop-run /usr/share/applications/python2.7.desktop 110 | /usr/share/applications/python2.7.desktop:Categories=Development; 111 | /usr/share/applications/gcr-viewer.desktop:Name=View file 112 | /usr/share/applications/gcr-viewer.desktop:Exec=qubes-desktop-run /usr/share/applications/gcr-viewer.desktop 113 | /usr/share/applications/nautilus-connect-server.desktop:Name=Connect to Server 114 | /usr/share/applications/nautilus-connect-server.desktop:Exec=qubes-desktop-run /usr/share/applications/nautilus-connect-server.desktop 115 | /usr/share/applications/nautilus-autorun-software.desktop:Name=Run Software 116 | /usr/share/applications/nautilus-autorun-software.desktop:Exec=qubes-desktop-run /usr/share/applications/nautilus-autorun-software.desktop 117 | /usr/share/applications/notification-daemon.desktop:Name=Notification Daemon 118 | /usr/share/applications/notification-daemon.desktop:Comment=Display notifications 119 | /usr/share/applications/notification-daemon.desktop:Exec=qubes-desktop-run /usr/share/applications/notification-daemon.desktop 120 | /usr/share/applications/debian-xterm.desktop:Name=XTerm 121 | /usr/share/applications/debian-xterm.desktop:Comment=standard terminal emulator for the X window system 122 | /usr/share/applications/debian-xterm.desktop:Exec=qubes-desktop-run /usr/share/applications/debian-xterm.desktop 123 | /usr/share/applications/debian-xterm.desktop:Categories=System;TerminalEmulator;Utility; 124 | /usr/share/applications/gpk-install-local-file.desktop:Name=Package Install 125 | /usr/share/applications/gpk-install-local-file.desktop:Comment=Install selected packages on the system 126 | /usr/share/applications/gpk-install-local-file.desktop:Categories=System; 127 | /usr/share/applications/gpk-install-local-file.desktop:Exec=qubes-desktop-run /usr/share/applications/gpk-install-local-file.desktop 128 | /usr/share/applications/gpk-dbus-service.desktop:Name=Software Install 129 | /usr/share/applications/gpk-dbus-service.desktop:Comment=Install selected software on the system 130 | /usr/share/applications/gpk-dbus-service.desktop:Categories=System; 131 | /usr/share/applications/gpk-dbus-service.desktop:Exec=qubes-desktop-run /usr/share/applications/gpk-dbus-service.desktop 132 | -------------------------------------------------------------------------------- /live/default-appmenus-fedora: -------------------------------------------------------------------------------- 1 | /usr/share/applications/abrt-applet.desktop:Comment=ABRT notification applet 2 | /usr/share/applications/abrt-applet.desktop:Exec=qubes-desktop-run /usr/share/applications/abrt-applet.desktop 3 | /usr/share/applications/abrt-applet.desktop:Name=Automatic Bug Reporting Tool 4 | /usr/share/applications/bijiben.desktop:Categories=GNOME;GTK;Utility; 5 | /usr/share/applications/bijiben.desktop:Comment=Post notes, tag files! 6 | /usr/share/applications/bijiben.desktop:Exec=qubes-desktop-run /usr/share/applications/bijiben.desktop 7 | /usr/share/applications/bijiben.desktop:GenericName=Note-taker 8 | /usr/share/applications/bijiben.desktop:Name=Notes 9 | /usr/share/applications/bluetooth-sendto.desktop:Categories=GTK;GNOME;Utility;FileTools; 10 | /usr/share/applications/bluetooth-sendto.desktop:Comment=Send files via Bluetooth 11 | /usr/share/applications/bluetooth-sendto.desktop:Exec=qubes-desktop-run /usr/share/applications/bluetooth-sendto.desktop 12 | /usr/share/applications/bluetooth-sendto.desktop:Name=Bluetooth Transfer 13 | /usr/share/applications/devassistant.desktop:Categories=Development; 14 | /usr/share/applications/devassistant.desktop:Exec=qubes-desktop-run /usr/share/applications/devassistant.desktop 15 | /usr/share/applications/devassistant.desktop:GenericName=DevAssistant - making life easier for developers 16 | /usr/share/applications/devassistant.desktop:Name=DevAssistant 17 | /usr/share/applications/emacs.desktop:Categories=Application;Utility;TextEditor;X-Red-Hat-Base; 18 | /usr/share/applications/emacs.desktop:Comment=Edit text 19 | /usr/share/applications/emacs.desktop:Exec=qubes-desktop-run /usr/share/applications/emacs.desktop 20 | /usr/share/applications/emacs.desktop:GenericName=Text Editor 21 | /usr/share/applications/emacs.desktop:Name=Emacs 22 | /usr/share/applications/emacsclient.desktop:Categories=Application;Utility;TextEditor;X-Red-Hat-Base; 23 | /usr/share/applications/emacsclient.desktop:Comment=Edit text 24 | /usr/share/applications/emacsclient.desktop:Exec=qubes-desktop-run /usr/share/applications/emacsclient.desktop 25 | /usr/share/applications/emacsclient.desktop:GenericName=Text Editor 26 | /usr/share/applications/emacsclient.desktop:Name=Emacs Client 27 | /usr/share/applications/empathy.desktop:Categories=GNOME;GTK;Network;InstantMessaging; 28 | /usr/share/applications/empathy.desktop:Comment=Chat on Google Talk, Facebook, MSN and many other chat services 29 | /usr/share/applications/empathy.desktop:Exec=qubes-desktop-run /usr/share/applications/empathy.desktop 30 | /usr/share/applications/empathy.desktop:GenericName=IM Client 31 | /usr/share/applications/empathy.desktop:Name=Empathy 32 | /usr/share/applications/eog.desktop:Categories=GNOME;GTK;Graphics;2DGraphics;RasterGraphics;Viewer; 33 | /usr/share/applications/eog.desktop:Comment=Browse and rotate images 34 | /usr/share/applications/eog.desktop:Exec=qubes-desktop-run /usr/share/applications/eog.desktop 35 | /usr/share/applications/eog.desktop:Name=Image Viewer 36 | /usr/share/applications/evince-previewer.desktop:Categories=GNOME;GTK;Office;Viewer;Graphics;2DGraphics;VectorGraphics; 37 | /usr/share/applications/evince-previewer.desktop:Comment=Preview before printing 38 | /usr/share/applications/evince-previewer.desktop:Exec=qubes-desktop-run /usr/share/applications/evince-previewer.desktop 39 | /usr/share/applications/evince-previewer.desktop:Name=Print Preview 40 | /usr/share/applications/evince.desktop:Categories=GNOME;GTK;Office;Viewer;Graphics;2DGraphics;VectorGraphics; 41 | /usr/share/applications/evince.desktop:Comment=View multi-page documents 42 | /usr/share/applications/evince.desktop:Exec=qubes-desktop-run /usr/share/applications/evince.desktop 43 | /usr/share/applications/evince.desktop:Name=Document Viewer 44 | /usr/share/applications/evolution-calendar.desktop:Exec=qubes-desktop-run /usr/share/applications/evolution-calendar.desktop 45 | /usr/share/applications/evolution-calendar.desktop:Name=Evolution Calendar 46 | /usr/share/applications/evolution.desktop:Categories=GNOME;GTK;Office;Email;Calendar;ContactManagement;X-Red-Hat-Base; 47 | /usr/share/applications/evolution.desktop:Comment=Manage your email, contacts and schedule 48 | /usr/share/applications/evolution.desktop:Exec=qubes-desktop-run /usr/share/applications/evolution.desktop 49 | /usr/share/applications/evolution.desktop:GenericName=Groupware Suite 50 | /usr/share/applications/evolution.desktop:Name=Evolution 51 | /usr/share/applications/exo-file-manager.desktop:Categories=Utility;X-XFCE;X-Xfce-Toplevel; 52 | /usr/share/applications/exo-file-manager.desktop:Comment=Browse the file system 53 | /usr/share/applications/exo-file-manager.desktop:Exec=qubes-desktop-run /usr/share/applications/exo-file-manager.desktop 54 | /usr/share/applications/exo-file-manager.desktop:Name=File Manager 55 | /usr/share/applications/exo-mail-reader.desktop:Categories=Network;X-XFCE;X-Xfce-Toplevel; 56 | /usr/share/applications/exo-mail-reader.desktop:Comment=Read your email 57 | /usr/share/applications/exo-mail-reader.desktop:Exec=qubes-desktop-run /usr/share/applications/exo-mail-reader.desktop 58 | /usr/share/applications/exo-mail-reader.desktop:Name=Mail Reader 59 | /usr/share/applications/exo-preferred-applications.desktop:Categories=X-XFCE;GTK;Settings;DesktopSettings;X-XFCE-SettingsDialog;X-XFCE-PersonalSettings; 60 | /usr/share/applications/exo-preferred-applications.desktop:Comment=Preferred Applications (Web Browser, Mail Reader and Terminal Emulator) 61 | /usr/share/applications/exo-preferred-applications.desktop:Exec=qubes-desktop-run /usr/share/applications/exo-preferred-applications.desktop 62 | /usr/share/applications/exo-preferred-applications.desktop:Name=Preferred Applications 63 | /usr/share/applications/exo-terminal-emulator.desktop:Categories=Utility;X-XFCE;X-Xfce-Toplevel; 64 | /usr/share/applications/exo-terminal-emulator.desktop:Comment=Use the command line 65 | /usr/share/applications/exo-terminal-emulator.desktop:Exec=qubes-desktop-run /usr/share/applications/exo-terminal-emulator.desktop 66 | /usr/share/applications/exo-terminal-emulator.desktop:Name=Terminal Emulator 67 | /usr/share/applications/exo-web-browser.desktop:Categories=Network;X-XFCE;X-Xfce-Toplevel; 68 | /usr/share/applications/exo-web-browser.desktop:Comment=Browse the web 69 | /usr/share/applications/exo-web-browser.desktop:Exec=qubes-desktop-run /usr/share/applications/exo-web-browser.desktop 70 | /usr/share/applications/exo-web-browser.desktop:Name=Web Browser 71 | /usr/share/applications/firefox.desktop:Categories=Network;WebBrowser; 72 | /usr/share/applications/firefox.desktop:Comment=Browse the Web 73 | /usr/share/applications/firefox.desktop:Exec=qubes-desktop-run /usr/share/applications/firefox.desktop 74 | /usr/share/applications/firefox.desktop:GenericName=Web Browser 75 | /usr/share/applications/firefox.desktop:Name=Firefox 76 | /usr/share/applications/gcm-calibrate.desktop:Categories=Settings; 77 | /usr/share/applications/gcm-calibrate.desktop:Comment=Color Calibration 78 | /usr/share/applications/gcm-calibrate.desktop:Exec=qubes-desktop-run /usr/share/applications/gcm-calibrate.desktop 79 | /usr/share/applications/gcm-calibrate.desktop:Name=Color 80 | /usr/share/applications/gcm-import.desktop:Categories=System; 81 | /usr/share/applications/gcm-import.desktop:Comment=Install ICC profiles 82 | /usr/share/applications/gcm-import.desktop:Exec=qubes-desktop-run /usr/share/applications/gcm-import.desktop 83 | /usr/share/applications/gcm-import.desktop:Name=ICC Profile Installer 84 | /usr/share/applications/gcm-picker.desktop:Categories=GNOME;GTK;System; 85 | /usr/share/applications/gcm-picker.desktop:Comment=Use the color sensor to sample spot colors 86 | /usr/share/applications/gcm-picker.desktop:Exec=qubes-desktop-run /usr/share/applications/gcm-picker.desktop 87 | /usr/share/applications/gcm-picker.desktop:Name=Color Picker 88 | /usr/share/applications/gcm-viewer.desktop:Categories=GNOME;GTK;System; 89 | /usr/share/applications/gcm-viewer.desktop:Comment=Inspect and compare installed color profiles 90 | /usr/share/applications/gcm-viewer.desktop:Exec=qubes-desktop-run /usr/share/applications/gcm-viewer.desktop 91 | /usr/share/applications/gcm-viewer.desktop:Name=Color Profile Viewer 92 | /usr/share/applications/gcr-prompter.desktop:Comment=Unlock access to passwords and other secrets 93 | /usr/share/applications/gcr-prompter.desktop:Exec=qubes-desktop-run /usr/share/applications/gcr-prompter.desktop 94 | /usr/share/applications/gcr-prompter.desktop:Name=Access Prompt 95 | /usr/share/applications/gcr-viewer.desktop:Exec=qubes-desktop-run /usr/share/applications/gcr-viewer.desktop 96 | /usr/share/applications/gcr-viewer.desktop:Name=View file 97 | /usr/share/applications/gkbd-keyboard-display.desktop:Categories=GNOME;GTK;Core;System; 98 | /usr/share/applications/gkbd-keyboard-display.desktop:Comment=Preview keyboard layouts 99 | /usr/share/applications/gkbd-keyboard-display.desktop:Exec=qubes-desktop-run /usr/share/applications/gkbd-keyboard-display.desktop 100 | /usr/share/applications/gkbd-keyboard-display.desktop:Name=Keyboard Layout 101 | /usr/share/applications/gnome-abrt.desktop:Categories=System; 102 | /usr/share/applications/gnome-abrt.desktop:Comment=View and report application crashes 103 | /usr/share/applications/gnome-abrt.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-abrt.desktop 104 | /usr/share/applications/gnome-abrt.desktop:Name=Problem Reporting 105 | /usr/share/applications/gnome-background-panel.desktop:Categories=GNOME;GTK;Settings;DesktopSettings;X-GNOME-Settings-Panel;X-GNOME-PersonalSettings; 106 | /usr/share/applications/gnome-background-panel.desktop:Comment=Change your background image to a wallpaper or photo 107 | /usr/share/applications/gnome-background-panel.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-background-panel.desktop 108 | /usr/share/applications/gnome-background-panel.desktop:Name=Background 109 | /usr/share/applications/gnome-bluetooth-panel.desktop:Categories=GTK;GNOME;Settings;X-GNOME-NetworkSettings;HardwareSettings;X-GNOME-Settings-Panel; 110 | /usr/share/applications/gnome-bluetooth-panel.desktop:Comment=Turn Bluetooth on and off and connect your devices 111 | /usr/share/applications/gnome-bluetooth-panel.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-bluetooth-panel.desktop 112 | /usr/share/applications/gnome-bluetooth-panel.desktop:Name=Bluetooth 113 | /usr/share/applications/gnome-calculator.desktop:Categories=GNOME;GTK;Utility;Calculator; 114 | /usr/share/applications/gnome-calculator.desktop:Comment=Perform arithmetic, scientific or financial calculations 115 | /usr/share/applications/gnome-calculator.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-calculator.desktop 116 | /usr/share/applications/gnome-calculator.desktop:Name=Calculator 117 | /usr/share/applications/gnome-color-panel.desktop:Categories=GNOME;GTK;Settings;X-GNOME-Settings-Panel;HardwareSettings; 118 | /usr/share/applications/gnome-color-panel.desktop:Comment=Calibrate the color of your devices, such as displays, cameras or printers 119 | /usr/share/applications/gnome-color-panel.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-color-panel.desktop 120 | /usr/share/applications/gnome-color-panel.desktop:Name=Color 121 | /usr/share/applications/gnome-control-center.desktop:Categories=GNOME;GTK;System; 122 | /usr/share/applications/gnome-control-center.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-control-center.desktop 123 | /usr/share/applications/gnome-control-center.desktop:Name=Settings 124 | /usr/share/applications/gnome-datetime-panel.desktop:Categories=GNOME;GTK;Settings;X-GNOME-SystemSettings;X-GNOME-Settings-Panel; 125 | /usr/share/applications/gnome-datetime-panel.desktop:Comment=Change the date and time, including time zone 126 | /usr/share/applications/gnome-datetime-panel.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-datetime-panel.desktop 127 | /usr/share/applications/gnome-datetime-panel.desktop:Name=Date & Time 128 | /usr/share/applications/gnome-disk-image-mounter.desktop:Comment=Mount Disk Images 129 | /usr/share/applications/gnome-disk-image-mounter.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-disk-image-mounter.desktop 130 | /usr/share/applications/gnome-disk-image-mounter.desktop:Name=Disk Image Mounter 131 | /usr/share/applications/gnome-disk-image-writer.desktop:Comment=Write Disk Images to Devices 132 | /usr/share/applications/gnome-disk-image-writer.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-disk-image-writer.desktop 133 | /usr/share/applications/gnome-disk-image-writer.desktop:Name=Disk Image Writer 134 | /usr/share/applications/gnome-disks.desktop:Categories=GNOME;GTK;Utility;HardwareSettings; 135 | /usr/share/applications/gnome-disks.desktop:Comment=Manage Drives and Media 136 | /usr/share/applications/gnome-disks.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-disks.desktop 137 | /usr/share/applications/gnome-disks.desktop:Name=Disks 138 | /usr/share/applications/gnome-display-panel.desktop:Categories=GNOME;GTK;Settings;HardwareSettings;X-GNOME-Settings-Panel; 139 | /usr/share/applications/gnome-display-panel.desktop:Comment=Choose how to use connected monitors and projectors 140 | /usr/share/applications/gnome-display-panel.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-display-panel.desktop 141 | /usr/share/applications/gnome-display-panel.desktop:Name=Displays 142 | /usr/share/applications/gnome-info-panel.desktop:Categories=GNOME;GTK;Settings;X-GNOME-SystemSettings;X-GNOME-Settings-Panel; 143 | /usr/share/applications/gnome-info-panel.desktop:Comment=View information about your system 144 | /usr/share/applications/gnome-info-panel.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-info-panel.desktop 145 | /usr/share/applications/gnome-info-panel.desktop:Name=Details 146 | /usr/share/applications/gnome-keyboard-panel.desktop:Categories=GNOME;GTK;Settings;HardwareSettings;X-GNOME-Settings-Panel; 147 | /usr/share/applications/gnome-keyboard-panel.desktop:Comment=View and change keyboard shortcuts and set your typing preferences 148 | /usr/share/applications/gnome-keyboard-panel.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-keyboard-panel.desktop 149 | /usr/share/applications/gnome-keyboard-panel.desktop:Name=Keyboard 150 | /usr/share/applications/gnome-mouse-panel.desktop:Categories=GNOME;GTK;Settings;HardwareSettings;X-GNOME-Settings-Panel; 151 | /usr/share/applications/gnome-mouse-panel.desktop:Comment=Change your mouse or touchpad sensitivity and select right or left-handed 152 | /usr/share/applications/gnome-mouse-panel.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-mouse-panel.desktop 153 | /usr/share/applications/gnome-mouse-panel.desktop:Name=Mouse & Touchpad 154 | /usr/share/applications/gnome-network-panel.desktop:Categories=GNOME;GTK;Settings;HardwareSettings;X-GNOME-Settings-Panel; 155 | /usr/share/applications/gnome-network-panel.desktop:Comment=Control how you connect to the Internet 156 | /usr/share/applications/gnome-network-panel.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-network-panel.desktop 157 | /usr/share/applications/gnome-network-panel.desktop:Name=Network 158 | /usr/share/applications/gnome-notifications-panel.desktop:Categories=GNOME;GTK;Settings;DesktopSettings;X-GNOME-Settings-Panel;X-GNOME-PersonalSettings; 159 | /usr/share/applications/gnome-notifications-panel.desktop:Comment=Control which notifications are displayed and what they show 160 | /usr/share/applications/gnome-notifications-panel.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-notifications-panel.desktop 161 | /usr/share/applications/gnome-notifications-panel.desktop:Name=Notifications 162 | /usr/share/applications/gnome-online-accounts-panel.desktop:Categories=GNOME;GTK;Settings;DesktopSettings;X-GNOME-Settings-Panel;X-GNOME-PersonalSettings; 163 | /usr/share/applications/gnome-online-accounts-panel.desktop:Comment=Connect to your online accounts and decide what to use them for 164 | /usr/share/applications/gnome-online-accounts-panel.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-online-accounts-panel.desktop 165 | /usr/share/applications/gnome-online-accounts-panel.desktop:Name=Online Accounts 166 | /usr/share/applications/gnome-power-panel.desktop:Categories=GNOME;GTK;Settings;DesktopSettings;X-GNOME-Settings-Panel;HardwareSettings; 167 | /usr/share/applications/gnome-power-panel.desktop:Comment=View your battery status and change power saving settings 168 | /usr/share/applications/gnome-power-panel.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-power-panel.desktop 169 | /usr/share/applications/gnome-power-panel.desktop:Name=Power 170 | /usr/share/applications/gnome-printers-panel.desktop:Categories=GNOME;GTK;Settings;HardwareSettings;X-GNOME-Settings-Panel; 171 | /usr/share/applications/gnome-printers-panel.desktop:Comment=Add printers, view printer jobs and decide how you want to print 172 | /usr/share/applications/gnome-printers-panel.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-printers-panel.desktop 173 | /usr/share/applications/gnome-printers-panel.desktop:Name=Printers 174 | /usr/share/applications/gnome-privacy-panel.desktop:Categories=GNOME;GTK;Settings;DesktopSettings;X-GNOME-Settings-Panel;X-GNOME-PersonalSettings; 175 | /usr/share/applications/gnome-privacy-panel.desktop:Comment=Protect your personal information and control what others might see 176 | /usr/share/applications/gnome-privacy-panel.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-privacy-panel.desktop 177 | /usr/share/applications/gnome-privacy-panel.desktop:Name=Privacy 178 | /usr/share/applications/gnome-region-panel.desktop:Categories=GNOME;GTK;Settings;DesktopSettings;X-GNOME-Settings-Panel;X-GNOME-PersonalSettings; 179 | /usr/share/applications/gnome-region-panel.desktop:Comment=Select your display language, formats, keyboard layouts and input sources 180 | /usr/share/applications/gnome-region-panel.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-region-panel.desktop 181 | /usr/share/applications/gnome-region-panel.desktop:Name=Region & Language 182 | /usr/share/applications/gnome-search-panel.desktop:Categories=GNOME;GTK;Settings;DesktopSettings;X-GNOME-Settings-Panel;X-GNOME-PersonalSettings; 183 | /usr/share/applications/gnome-search-panel.desktop:Comment=Control which applications show search results in the Activities Overview 184 | /usr/share/applications/gnome-search-panel.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-search-panel.desktop 185 | /usr/share/applications/gnome-search-panel.desktop:Name=Search 186 | /usr/share/applications/gnome-sharing-panel.desktop:Categories=GNOME;GTK;Settings;DesktopSettings;X-GNOME-Settings-Panel;X-GNOME-SystemSettings; 187 | /usr/share/applications/gnome-sharing-panel.desktop:Comment=Control what you want to share with others 188 | /usr/share/applications/gnome-sharing-panel.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-sharing-panel.desktop 189 | /usr/share/applications/gnome-sharing-panel.desktop:Name=Sharing 190 | /usr/share/applications/gnome-shell-classic.desktop:Categories=GNOME;GTK;Core; 191 | /usr/share/applications/gnome-shell-classic.desktop:Comment=Window management and application launching 192 | /usr/share/applications/gnome-shell-classic.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-shell-classic.desktop 193 | /usr/share/applications/gnome-shell-classic.desktop:Name=GNOME Shell Classic 194 | /usr/share/applications/gnome-shell-extension-prefs.desktop:Categories=GNOME;GTK; 195 | /usr/share/applications/gnome-shell-extension-prefs.desktop:Comment=Configure GNOME Shell Extensions 196 | /usr/share/applications/gnome-shell-extension-prefs.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-shell-extension-prefs.desktop 197 | /usr/share/applications/gnome-shell-extension-prefs.desktop:Name=GNOME Shell Extension Preferences 198 | /usr/share/applications/gnome-shell.desktop:Categories=GNOME;GTK;Core; 199 | /usr/share/applications/gnome-shell.desktop:Comment=Window management and application launching 200 | /usr/share/applications/gnome-shell.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-shell.desktop 201 | /usr/share/applications/gnome-shell.desktop:Name=GNOME Shell 202 | /usr/share/applications/gnome-software-local-file.desktop:Categories=System; 203 | /usr/share/applications/gnome-software-local-file.desktop:Comment=Install selected software on the system 204 | /usr/share/applications/gnome-software-local-file.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-software-local-file.desktop 205 | /usr/share/applications/gnome-software-local-file.desktop:Name=Software Install 206 | /usr/share/applications/gnome-sound-panel.desktop:Categories=GNOME;GTK;Settings;HardwareSettings;X-GNOME-Settings-Panel; 207 | /usr/share/applications/gnome-sound-panel.desktop:Comment=Change sound levels, inputs, outputs, and alert sounds 208 | /usr/share/applications/gnome-sound-panel.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-sound-panel.desktop 209 | /usr/share/applications/gnome-sound-panel.desktop:Name=Sound 210 | /usr/share/applications/gnome-system-monitor-kde.desktop:Categories=GNOME;GTK;System;Monitor; 211 | /usr/share/applications/gnome-system-monitor-kde.desktop:Comment=View current processes and monitor system state 212 | /usr/share/applications/gnome-system-monitor-kde.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-system-monitor-kde.desktop 213 | /usr/share/applications/gnome-system-monitor-kde.desktop:Name=GNOME System Monitor 214 | /usr/share/applications/gnome-system-monitor.desktop:Categories=GNOME;GTK;System;Monitor; 215 | /usr/share/applications/gnome-system-monitor.desktop:Comment=View current processes and monitor system state 216 | /usr/share/applications/gnome-system-monitor.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-system-monitor.desktop 217 | /usr/share/applications/gnome-system-monitor.desktop:Name=System Monitor 218 | /usr/share/applications/gnome-terminal.desktop:Categories=GNOME;GTK;System;TerminalEmulator; 219 | /usr/share/applications/gnome-terminal.desktop:Comment=Use the command line 220 | /usr/share/applications/gnome-terminal.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-terminal.desktop 221 | /usr/share/applications/gnome-terminal.desktop:Name=Terminal 222 | /usr/share/applications/gnome-universal-access-panel.desktop:Categories=GNOME;GTK;Settings;X-GNOME-SystemSettings;X-GNOME-Settings-Panel; 223 | /usr/share/applications/gnome-universal-access-panel.desktop:Comment=Make it easier to see, hear, type, point and click 224 | /usr/share/applications/gnome-universal-access-panel.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-universal-access-panel.desktop 225 | /usr/share/applications/gnome-universal-access-panel.desktop:Name=Universal Access 226 | /usr/share/applications/gnome-user-accounts-panel.desktop:Categories=System;Settings;X-GNOME-Settings-Panel;X-GNOME-SystemSettings; 227 | /usr/share/applications/gnome-user-accounts-panel.desktop:Comment=Add or remove users and change your password 228 | /usr/share/applications/gnome-user-accounts-panel.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-user-accounts-panel.desktop 229 | /usr/share/applications/gnome-user-accounts-panel.desktop:Name=Users 230 | /usr/share/applications/gnome-user-share-webdav.desktop:Categories= 231 | /usr/share/applications/gnome-user-share-webdav.desktop:Comment=Launch Personal File Sharing if enabled 232 | /usr/share/applications/gnome-user-share-webdav.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-user-share-webdav.desktop 233 | /usr/share/applications/gnome-user-share-webdav.desktop:Name=Personal File Sharing 234 | /usr/share/applications/gnome-wacom-panel.desktop:Categories=GNOME;GTK;Settings;HardwareSettings;X-GNOME-Settings-Panel; 235 | /usr/share/applications/gnome-wacom-panel.desktop:Comment=Set button mappings and adjust stylus sensitivity for graphics tablets 236 | /usr/share/applications/gnome-wacom-panel.desktop:Exec=qubes-desktop-run /usr/share/applications/gnome-wacom-panel.desktop 237 | /usr/share/applications/gnome-wacom-panel.desktop:Name=Wacom Tablet 238 | /usr/share/applications/gpk-dbus-service.desktop:Categories=System; 239 | /usr/share/applications/gpk-dbus-service.desktop:Comment=Install selected software on the system 240 | /usr/share/applications/gpk-dbus-service.desktop:Exec=qubes-desktop-run /usr/share/applications/gpk-dbus-service.desktop 241 | /usr/share/applications/gpk-dbus-service.desktop:Name=Software Install 242 | /usr/share/applications/gpk-log.desktop:Categories=GNOME;GTK;System; 243 | /usr/share/applications/gpk-log.desktop:Comment=View past package management tasks 244 | /usr/share/applications/gpk-log.desktop:Exec=qubes-desktop-run /usr/share/applications/gpk-log.desktop 245 | /usr/share/applications/gpk-log.desktop:Name=Package Log 246 | /usr/share/applications/gpk-prefs.desktop:Categories=Settings;X-GNOME-SystemSettings; 247 | /usr/share/applications/gpk-prefs.desktop:Comment=Enable or disable package repositories 248 | /usr/share/applications/gpk-prefs.desktop:Exec=qubes-desktop-run /usr/share/applications/gpk-prefs.desktop 249 | /usr/share/applications/gpk-prefs.desktop:Name=Package Sources 250 | /usr/share/applications/gpk-update-viewer.desktop:Categories=GNOME;GTK;System; 251 | /usr/share/applications/gpk-update-viewer.desktop:Comment=Update software installed on the system 252 | /usr/share/applications/gpk-update-viewer.desktop:Exec=qubes-desktop-run /usr/share/applications/gpk-update-viewer.desktop 253 | /usr/share/applications/gpk-update-viewer.desktop:Name=Package Updater 254 | /usr/share/applications/gucharmap.desktop:Categories=GNOME;GTK;Utility; 255 | /usr/share/applications/gucharmap.desktop:Comment=Insert special characters into documents 256 | /usr/share/applications/gucharmap.desktop:Exec=qubes-desktop-run /usr/share/applications/gucharmap.desktop 257 | /usr/share/applications/gucharmap.desktop:Name=Character Map 258 | /usr/share/applications/ibus-setup-chewing.desktop:Categories=Settings; 259 | /usr/share/applications/ibus-setup-chewing.desktop:Comment=Set IBus Chewing Preferences 260 | /usr/share/applications/ibus-setup-chewing.desktop:Exec=qubes-desktop-run /usr/share/applications/ibus-setup-chewing.desktop 261 | /usr/share/applications/ibus-setup-chewing.desktop:Name=IBus Chewing Preferences 262 | /usr/share/applications/ibus-setup-hangul.desktop:Categories=Settings; 263 | /usr/share/applications/ibus-setup-hangul.desktop:Comment=Set IBus Hangul Preferences 264 | /usr/share/applications/ibus-setup-hangul.desktop:Exec=qubes-desktop-run /usr/share/applications/ibus-setup-hangul.desktop 265 | /usr/share/applications/ibus-setup-hangul.desktop:Name=IBus Hangul Preferences 266 | /usr/share/applications/ibus-setup-kkc.desktop:Comment=Customize Kana Kanji Conversion input-method 267 | /usr/share/applications/ibus-setup-kkc.desktop:Exec=qubes-desktop-run /usr/share/applications/ibus-setup-kkc.desktop 268 | /usr/share/applications/ibus-setup-kkc.desktop:Name=Kana Kanji Conversion Preferences 269 | /usr/share/applications/ibus-setup-libbopomofo.desktop:Comment=Set ibus-libbopomofo Preferences 270 | /usr/share/applications/ibus-setup-libbopomofo.desktop:Exec=qubes-desktop-run /usr/share/applications/ibus-setup-libbopomofo.desktop 271 | /usr/share/applications/ibus-setup-libbopomofo.desktop:Name=IBus LibBopomofo Preferences 272 | /usr/share/applications/ibus-setup-libpinyin.desktop:Comment=Set ibus-libpinyin Preferences 273 | /usr/share/applications/ibus-setup-libpinyin.desktop:Exec=qubes-desktop-run /usr/share/applications/ibus-setup-libpinyin.desktop 274 | /usr/share/applications/ibus-setup-libpinyin.desktop:Name=IBus LibPinyin Setup 275 | /usr/share/applications/ibus-setup-m17n.desktop:Comment=Set up IBus M17N engine 276 | /usr/share/applications/ibus-setup-m17n.desktop:Exec=qubes-desktop-run /usr/share/applications/ibus-setup-m17n.desktop 277 | /usr/share/applications/ibus-setup-m17n.desktop:Name=IBus M17N Setup 278 | /usr/share/applications/ibus-setup-typing-booster.desktop:Comment=Set ibus-typing-booster Preferences 279 | /usr/share/applications/ibus-setup-typing-booster.desktop:Exec=qubes-desktop-run /usr/share/applications/ibus-setup-typing-booster.desktop 280 | /usr/share/applications/ibus-setup-typing-booster.desktop:Name=IBus Typing Booster Setup 281 | /usr/share/applications/ibus-setup.desktop:Categories=Settings; 282 | /usr/share/applications/ibus-setup.desktop:Comment=Set IBus Preferences 283 | /usr/share/applications/ibus-setup.desktop:Exec=qubes-desktop-run /usr/share/applications/ibus-setup.desktop 284 | /usr/share/applications/ibus-setup.desktop:Name=IBus Preferences 285 | /usr/share/applications/keepassx.desktop:Categories=Qt;Utility;Security; 286 | /usr/share/applications/keepassx.desktop:Comment=Cross Platform Password Manager 287 | /usr/share/applications/keepassx.desktop:Exec=qubes-desktop-run /usr/share/applications/keepassx.desktop 288 | /usr/share/applications/keepassx.desktop:GenericName=Cross Platform Password Manager 289 | /usr/share/applications/keepassx.desktop:Name=KeePassX 290 | /usr/share/applications/libreoffice-calc.desktop:Categories=Office;Spreadsheet;X-Red-Hat-Base;X-MandrivaLinux-Office-Spreadsheets; 291 | /usr/share/applications/libreoffice-calc.desktop:Comment=Perform calculations, analyze information and manage lists in spreadsheets by using Calc. 292 | /usr/share/applications/libreoffice-calc.desktop:Exec=qubes-desktop-run /usr/share/applications/libreoffice-calc.desktop 293 | /usr/share/applications/libreoffice-calc.desktop:GenericName=Spreadsheet 294 | /usr/share/applications/libreoffice-calc.desktop:Name=LibreOffice Calc 295 | /usr/share/applications/libreoffice-draw.desktop:Categories=Office;FlowChart;Graphics;2DGraphics;VectorGraphics;X-Red-Hat-Base;X-MandrivaLinux-Office-Drawing; 296 | /usr/share/applications/libreoffice-draw.desktop:Comment=Create and edit drawings, flow charts and logos by using Draw. 297 | /usr/share/applications/libreoffice-draw.desktop:Exec=qubes-desktop-run /usr/share/applications/libreoffice-draw.desktop 298 | /usr/share/applications/libreoffice-draw.desktop:GenericName=Drawing Program 299 | /usr/share/applications/libreoffice-draw.desktop:Name=LibreOffice Draw 300 | /usr/share/applications/libreoffice-impress.desktop:Categories=Office;Presentation;X-Red-Hat-Base;X-MandrivaLinux-Office-Presentations; 301 | /usr/share/applications/libreoffice-impress.desktop:Comment=Create and edit presentations for slideshows, meeting and Web pages by using Impress. 302 | /usr/share/applications/libreoffice-impress.desktop:Exec=qubes-desktop-run /usr/share/applications/libreoffice-impress.desktop 303 | /usr/share/applications/libreoffice-impress.desktop:GenericName=Presentation 304 | /usr/share/applications/libreoffice-impress.desktop:Name=LibreOffice Impress 305 | /usr/share/applications/libreoffice-math.desktop:Categories=Office;Spreadsheet;Education;Science;Math;X-Red-Hat-Base;X-MandrivaLinux-Office-Other; 306 | /usr/share/applications/libreoffice-math.desktop:Comment=Create and edit scientific formulas and equations by using Math. 307 | /usr/share/applications/libreoffice-math.desktop:Exec=qubes-desktop-run /usr/share/applications/libreoffice-math.desktop 308 | /usr/share/applications/libreoffice-math.desktop:GenericName=Formula Editor 309 | /usr/share/applications/libreoffice-math.desktop:Name=LibreOffice Math 310 | /usr/share/applications/libreoffice-startcenter.desktop:Categories=Office;X-Red-Hat-Base;X-SuSE-Core-Office;X-MandrivaLinux-Office-Other; 311 | /usr/share/applications/libreoffice-startcenter.desktop:Comment=The office productivity suite compatible to the open and standardized ODF document format. Supported by The Document Foundation. 312 | /usr/share/applications/libreoffice-startcenter.desktop:Exec=qubes-desktop-run /usr/share/applications/libreoffice-startcenter.desktop 313 | /usr/share/applications/libreoffice-startcenter.desktop:GenericName=Office 314 | /usr/share/applications/libreoffice-startcenter.desktop:Name=LibreOffice 315 | /usr/share/applications/libreoffice-writer.desktop:Categories=Office;WordProcessor;X-Red-Hat-Base;X-MandrivaLinux-Office-Wordprocessors; 316 | /usr/share/applications/libreoffice-writer.desktop:Comment=Create and edit text and graphics in letters, reports, documents and Web pages by using Writer. 317 | /usr/share/applications/libreoffice-writer.desktop:Exec=qubes-desktop-run /usr/share/applications/libreoffice-writer.desktop 318 | /usr/share/applications/libreoffice-writer.desktop:GenericName=Word Processor 319 | /usr/share/applications/libreoffice-writer.desktop:Name=LibreOffice Writer 320 | /usr/share/applications/libreoffice-xsltfilter.desktop:Exec=qubes-desktop-run /usr/share/applications/libreoffice-xsltfilter.desktop 321 | /usr/share/applications/libreoffice-xsltfilter.desktop:GenericName=XSLT based filters 322 | /usr/share/applications/libreoffice-xsltfilter.desktop:Name=LibreOffice XSLT based filters 323 | /usr/share/applications/mate-notification-properties.desktop:Categories=GTK;Settings;DesktopSettings; 324 | /usr/share/applications/mate-notification-properties.desktop:Comment=Set your popup notification preferences 325 | /usr/share/applications/mate-notification-properties.desktop:Exec=qubes-desktop-run /usr/share/applications/mate-notification-properties.desktop 326 | /usr/share/applications/mate-notification-properties.desktop:Name=Popup Notifications 327 | /usr/share/applications/mount-archive.desktop:Exec=qubes-desktop-run /usr/share/applications/mount-archive.desktop 328 | /usr/share/applications/mount-archive.desktop:Name=Archive Mounter 329 | /usr/share/applications/mozilla-thunderbird.desktop:Categories=Network;Email; 330 | /usr/share/applications/mozilla-thunderbird.desktop:Comment=Send and Receive Email 331 | /usr/share/applications/mozilla-thunderbird.desktop:Exec=qubes-desktop-run /usr/share/applications/mozilla-thunderbird.desktop 332 | /usr/share/applications/mozilla-thunderbird.desktop:GenericName=Email 333 | /usr/share/applications/mozilla-thunderbird.desktop:Name=Thunderbird 334 | /usr/share/applications/nautilus-autorun-software.desktop:Exec=qubes-desktop-run /usr/share/applications/nautilus-autorun-software.desktop 335 | /usr/share/applications/nautilus-autorun-software.desktop:Name=Run Software 336 | /usr/share/applications/nautilus-classic.desktop:Comment=Classic session desktop file for desktop icons 337 | /usr/share/applications/nautilus-classic.desktop:Exec=qubes-desktop-run /usr/share/applications/nautilus-classic.desktop 338 | /usr/share/applications/nautilus-classic.desktop:Name=Desktop Icons 339 | /usr/share/applications/nautilus-connect-server.desktop:Exec=qubes-desktop-run /usr/share/applications/nautilus-connect-server.desktop 340 | /usr/share/applications/nautilus-connect-server.desktop:Name=Connect to Server 341 | /usr/share/applications/nm-applet.desktop:Comment=Manage your network connections 342 | /usr/share/applications/nm-applet.desktop:Exec=qubes-desktop-run /usr/share/applications/nm-applet.desktop 343 | /usr/share/applications/nm-applet.desktop:Name=Network 344 | /usr/share/applications/nm-connection-editor.desktop:Categories=GNOME;GTK;Settings;X-GNOME-NetworkSettings; 345 | /usr/share/applications/nm-connection-editor.desktop:Comment=Manage and change your network connection settings 346 | /usr/share/applications/nm-connection-editor.desktop:Exec=qubes-desktop-run /usr/share/applications/nm-connection-editor.desktop 347 | /usr/share/applications/nm-connection-editor.desktop:Name=Network Connections 348 | /usr/share/applications/nm-vpnc-auth-dialog.desktop:Comment=Request VPN authentication 349 | /usr/share/applications/nm-vpnc-auth-dialog.desktop:Exec=qubes-desktop-run /usr/share/applications/nm-vpnc-auth-dialog.desktop 350 | /usr/share/applications/nm-vpnc-auth-dialog.desktop:Name=Network 351 | /usr/share/applications/openoffice.org-diafilter.desktop:Exec=qubes-desktop-run /usr/share/applications/openoffice.org-diafilter.desktop 352 | /usr/share/applications/openoffice.org-diafilter.desktop:GenericName=DIA Format Importer 353 | /usr/share/applications/openoffice.org-diafilter.desktop:Name=%PRODUCTNAME DIA Format Importer 354 | /usr/share/applications/orca.desktop:Categories=GTK;GNOME;Utility;Accessibility; 355 | /usr/share/applications/orca.desktop:Comment=Provide access to graphical desktop environments via synthesized speech and/or refreshable braille 356 | /usr/share/applications/orca.desktop:Exec=qubes-desktop-run /usr/share/applications/orca.desktop 357 | /usr/share/applications/orca.desktop:GenericName=Screen Reader 358 | /usr/share/applications/orca.desktop:Name=Screen Reader 359 | /usr/share/applications/org.gnome.Cheese.desktop:Categories=GNOME;AudioVideo;Video;Recorder; 360 | /usr/share/applications/org.gnome.Cheese.desktop:Comment=Take photos and videos with your webcam, with fun graphical effects 361 | /usr/share/applications/org.gnome.Cheese.desktop:Exec=qubes-desktop-run /usr/share/applications/org.gnome.Cheese.desktop 362 | /usr/share/applications/org.gnome.Cheese.desktop:Name=Cheese 363 | /usr/share/applications/org.gnome.Contacts.desktop:Categories=GNOME;GTK;Utility; 364 | /usr/share/applications/org.gnome.Contacts.desktop:Comment=A contacts manager for GNOME 365 | /usr/share/applications/org.gnome.Contacts.desktop:Exec=qubes-desktop-run /usr/share/applications/org.gnome.Contacts.desktop 366 | /usr/share/applications/org.gnome.Contacts.desktop:Name=Contacts 367 | /usr/share/applications/org.gnome.Documents.desktop:Categories=GNOME;GTK;Utility;Core; 368 | /usr/share/applications/org.gnome.Documents.desktop:Comment=Access, manage and share documents 369 | /usr/share/applications/org.gnome.Documents.desktop:Exec=qubes-desktop-run /usr/share/applications/org.gnome.Documents.desktop 370 | /usr/share/applications/org.gnome.Documents.desktop:Name=Documents 371 | /usr/share/applications/org.gnome.FileRoller.desktop:Categories=GTK;GNOME;Utility;Archiving;Compression;X-GNOME-Utilities; 372 | /usr/share/applications/org.gnome.FileRoller.desktop:Comment=Create and modify an archive 373 | /usr/share/applications/org.gnome.FileRoller.desktop:Exec=qubes-desktop-run /usr/share/applications/org.gnome.FileRoller.desktop 374 | /usr/share/applications/org.gnome.FileRoller.desktop:Name=Archive Manager 375 | /usr/share/applications/org.gnome.Nautilus.desktop:Categories=GNOME;GTK;Utility;Core;FileManager; 376 | /usr/share/applications/org.gnome.Nautilus.desktop:Comment=Access and organize files 377 | /usr/share/applications/org.gnome.Nautilus.desktop:Exec=qubes-desktop-run /usr/share/applications/org.gnome.Nautilus.desktop 378 | /usr/share/applications/org.gnome.Nautilus.desktop:Name=Files 379 | /usr/share/applications/org.gnome.Screenshot.desktop:Categories=GTK;GNOME;Utility;X-GNOME-Utilities; 380 | /usr/share/applications/org.gnome.Screenshot.desktop:Comment=Save images of your screen or individual windows 381 | /usr/share/applications/org.gnome.Screenshot.desktop:Exec=qubes-desktop-run /usr/share/applications/org.gnome.Screenshot.desktop 382 | /usr/share/applications/org.gnome.Screenshot.desktop:Name=Screenshot 383 | /usr/share/applications/org.gnome.Shell.PortalHelper.desktop:Exec=qubes-desktop-run /usr/share/applications/org.gnome.Shell.PortalHelper.desktop 384 | /usr/share/applications/org.gnome.Shell.PortalHelper.desktop:Name=Captive Portal 385 | /usr/share/applications/org.gnome.Software.desktop:Categories=GNOME;GTK;System;PackageManager; 386 | /usr/share/applications/org.gnome.Software.desktop:Comment=Add, remove or update software on this computer 387 | /usr/share/applications/org.gnome.Software.desktop:Exec=qubes-desktop-run /usr/share/applications/org.gnome.Software.desktop 388 | /usr/share/applications/org.gnome.Software.desktop:Name=Software 389 | /usr/share/applications/org.gnome.Totem.desktop:Categories=GTK;GNOME;AudioVideo;Player;Video; 390 | /usr/share/applications/org.gnome.Totem.desktop:Comment=Play movies 391 | /usr/share/applications/org.gnome.Totem.desktop:Exec=qubes-desktop-run /usr/share/applications/org.gnome.Totem.desktop 392 | /usr/share/applications/org.gnome.Totem.desktop:Name=Videos 393 | /usr/share/applications/org.gnome.Weather.Application.desktop:Categories=GNOME;GTK;Utility;Core; 394 | /usr/share/applications/org.gnome.Weather.Application.desktop:Comment=Show weather conditions and forecast 395 | /usr/share/applications/org.gnome.Weather.Application.desktop:Exec=qubes-desktop-run /usr/share/applications/org.gnome.Weather.Application.desktop 396 | /usr/share/applications/org.gnome.Weather.Application.desktop:Name=Weather 397 | /usr/share/applications/org.gnome.baobab.desktop:Categories=GTK;GNOME;System;Filesystem;X-GNOME-Utilities; 398 | /usr/share/applications/org.gnome.baobab.desktop:Comment=Check folder sizes and available disk space 399 | /usr/share/applications/org.gnome.baobab.desktop:Exec=qubes-desktop-run /usr/share/applications/org.gnome.baobab.desktop 400 | /usr/share/applications/org.gnome.baobab.desktop:Name=Disk Usage Analyzer 401 | /usr/share/applications/org.gnome.clocks.desktop:Categories=GNOME;GTK;Utility;Clock; 402 | /usr/share/applications/org.gnome.clocks.desktop:Comment=Clocks for world times, plus alarms, stopwatch and a timer 403 | /usr/share/applications/org.gnome.clocks.desktop:Exec=qubes-desktop-run /usr/share/applications/org.gnome.clocks.desktop 404 | /usr/share/applications/org.gnome.clocks.desktop:GenericName=Clocks 405 | /usr/share/applications/org.gnome.clocks.desktop:Name=Clocks 406 | /usr/share/applications/org.gnome.font-viewer.desktop:Categories=GTK;GNOME;Utility;X-GNOME-Utilities; 407 | /usr/share/applications/org.gnome.font-viewer.desktop:Comment=View fonts on your system 408 | /usr/share/applications/org.gnome.font-viewer.desktop:Exec=qubes-desktop-run /usr/share/applications/org.gnome.font-viewer.desktop 409 | /usr/share/applications/org.gnome.font-viewer.desktop:Name=Font Viewer 410 | /usr/share/applications/org.gnome.gedit.desktop:Categories=GNOME;GTK;Utility;TextEditor; 411 | /usr/share/applications/org.gnome.gedit.desktop:Comment=Edit text files 412 | /usr/share/applications/org.gnome.gedit.desktop:Exec=qubes-desktop-run /usr/share/applications/org.gnome.gedit.desktop 413 | /usr/share/applications/org.gnome.gedit.desktop:GenericName=Text Editor 414 | /usr/share/applications/org.gnome.gedit.desktop:Name=gedit 415 | /usr/share/applications/qt4-designer.desktop:Categories=Qt;Development; 416 | /usr/share/applications/qt4-designer.desktop:Comment=Design GUIs for Qt4 applications 417 | /usr/share/applications/qt4-designer.desktop:Exec=qubes-desktop-run /usr/share/applications/qt4-designer.desktop 418 | /usr/share/applications/qt4-designer.desktop:GenericName=Interface Designer 419 | /usr/share/applications/qt4-designer.desktop:Name=Qt4 Designer 420 | /usr/share/applications/qt4-linguist.desktop:Categories=Qt;Development; 421 | /usr/share/applications/qt4-linguist.desktop:Comment=Add translations to Qt4 applications 422 | /usr/share/applications/qt4-linguist.desktop:Exec=qubes-desktop-run /usr/share/applications/qt4-linguist.desktop 423 | /usr/share/applications/qt4-linguist.desktop:GenericName=Translation tool 424 | /usr/share/applications/qt4-linguist.desktop:Name=Qt4 Linguist 425 | /usr/share/applications/rhythmbox-device.desktop:Categories=GNOME;GTK;AudioVideo; 426 | /usr/share/applications/rhythmbox-device.desktop:Comment=Play and organize your music collection 427 | /usr/share/applications/rhythmbox-device.desktop:Exec=qubes-desktop-run /usr/share/applications/rhythmbox-device.desktop 428 | /usr/share/applications/rhythmbox-device.desktop:GenericName=Music Player 429 | /usr/share/applications/rhythmbox-device.desktop:Name=Rhythmbox 430 | /usr/share/applications/rhythmbox.desktop:Categories=GNOME;GTK;AudioVideo;Audio;Player; 431 | /usr/share/applications/rhythmbox.desktop:Comment=Play and organize your music collection 432 | /usr/share/applications/rhythmbox.desktop:Exec=qubes-desktop-run /usr/share/applications/rhythmbox.desktop 433 | /usr/share/applications/rhythmbox.desktop:GenericName=Music Player 434 | /usr/share/applications/rhythmbox.desktop:Name=Rhythmbox 435 | /usr/share/applications/rygel-preferences.desktop:Categories=Settings;X-GNOME-PersonalSettings; 436 | /usr/share/applications/rygel-preferences.desktop:Exec=qubes-desktop-run /usr/share/applications/rygel-preferences.desktop 437 | /usr/share/applications/rygel-preferences.desktop:GenericName=UPnP/DLNA Preferences 438 | /usr/share/applications/rygel-preferences.desktop:Name=Rygel Preferences 439 | /usr/share/applications/rygel.desktop:Categories= 440 | /usr/share/applications/rygel.desktop:Comment=UPnP/DLNA Services 441 | /usr/share/applications/rygel.desktop:Exec=qubes-desktop-run /usr/share/applications/rygel.desktop 442 | /usr/share/applications/rygel.desktop:GenericName=UPnP/DLNA Services 443 | /usr/share/applications/rygel.desktop:Name=Rygel 444 | /usr/share/applications/seahorse.desktop:Categories=GNOME;GTK;Security;Utility;DesktopSettings;X-XFCE-SettingsDialog;X-Fedora; 445 | /usr/share/applications/seahorse.desktop:Comment=Manage your passwords and encryption keys 446 | /usr/share/applications/seahorse.desktop:Exec=qubes-desktop-run /usr/share/applications/seahorse.desktop 447 | /usr/share/applications/seahorse.desktop:Name=Passwords and Keys 448 | /usr/share/applications/setroubleshoot.desktop:Categories=System; 449 | /usr/share/applications/setroubleshoot.desktop:Comment=Troubleshoot SELinux access denials 450 | /usr/share/applications/setroubleshoot.desktop:Exec=qubes-desktop-run /usr/share/applications/setroubleshoot.desktop 451 | /usr/share/applications/setroubleshoot.desktop:GenericName=SELinux Troubleshooter 452 | /usr/share/applications/setroubleshoot.desktop:Name=SELinux Troubleshooter 453 | /usr/share/applications/shotwell-viewer.desktop:Categories=Graphics;Viewer;Photography;GNOME;GTK; 454 | /usr/share/applications/shotwell-viewer.desktop:Exec=qubes-desktop-run /usr/share/applications/shotwell-viewer.desktop 455 | /usr/share/applications/shotwell-viewer.desktop:GenericName=Photo Viewer 456 | /usr/share/applications/shotwell-viewer.desktop:Name=Shotwell Viewer 457 | /usr/share/applications/shotwell.desktop:Categories=Graphics;Photography;GNOME;GTK; 458 | /usr/share/applications/shotwell.desktop:Comment=Organize your photos 459 | /usr/share/applications/shotwell.desktop:Exec=qubes-desktop-run /usr/share/applications/shotwell.desktop 460 | /usr/share/applications/shotwell.desktop:GenericName=Photo Manager 461 | /usr/share/applications/shotwell.desktop:Name=Shotwell 462 | /usr/share/applications/transmission-gtk.desktop:Categories=Network;FileTransfer;P2P;GTK; 463 | /usr/share/applications/transmission-gtk.desktop:Comment=Download and share files over BitTorrent 464 | /usr/share/applications/transmission-gtk.desktop:Exec=qubes-desktop-run /usr/share/applications/transmission-gtk.desktop 465 | /usr/share/applications/transmission-gtk.desktop:GenericName=BitTorrent Client 466 | /usr/share/applications/transmission-gtk.desktop:Name=Transmission 467 | /usr/share/applications/vino-server.desktop:Comment=GNOME Desktop Sharing Server 468 | /usr/share/applications/vino-server.desktop:Exec=qubes-desktop-run /usr/share/applications/vino-server.desktop 469 | /usr/share/applications/vino-server.desktop:Name=Desktop Sharing 470 | /usr/share/applications/xfce4-terminal.desktop:Categories=GTK;System;TerminalEmulator; 471 | /usr/share/applications/xfce4-terminal.desktop:Comment=Terminal Emulator 472 | /usr/share/applications/xfce4-terminal.desktop:Exec=qubes-desktop-run /usr/share/applications/xfce4-terminal.desktop 473 | /usr/share/applications/xfce4-terminal.desktop:GenericName=Terminal Emulator 474 | /usr/share/applications/xfce4-terminal.desktop:Name=Xfce Terminal 475 | /usr/share/applications/xterm.desktop:Categories=System;TerminalEmulator; 476 | /usr/share/applications/xterm.desktop:Comment=standard terminal emulator for the X window system 477 | /usr/share/applications/xterm.desktop:Exec=qubes-desktop-run /usr/share/applications/xterm.desktop 478 | /usr/share/applications/xterm.desktop:GenericName=Terminal 479 | /usr/share/applications/xterm.desktop:Name=XTerm 480 | /usr/share/applications/yelp.desktop:Categories=GNOME;GTK;Core;Documentation;Utility; 481 | /usr/share/applications/yelp.desktop:Comment=Get help with GNOME 482 | /usr/share/applications/yelp.desktop:Exec=qubes-desktop-run /usr/share/applications/yelp.desktop 483 | /usr/share/applications/yelp.desktop:Name=Help 484 | -------------------------------------------------------------------------------- /live/lightdm-qubes-live.conf: -------------------------------------------------------------------------------- 1 | [SeatDefaults] 2 | autologin-user=liveuser 3 | autologin-user-timeout=0 4 | user-session=kde-plasma 5 | -------------------------------------------------------------------------------- /live/livesys: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # live: Init script for live image 4 | # 5 | # chkconfig: 345 00 99 6 | # description: Init script for live image. 7 | ### BEGIN INIT INFO 8 | # X-Start-Before: display-manager 9 | ### END INIT INFO 10 | 11 | . /etc/init.d/functions 12 | 13 | if ! strstr "`cat /proc/cmdline`" rd.live.image || [ "$1" != "start" ]; then 14 | exit 0 15 | fi 16 | 17 | if [ -e /.liveimg-configured ] ; then 18 | configdone=1 19 | fi 20 | 21 | exists() { 22 | which $1 >/dev/null 2>&1 || return 23 | $* 24 | } 25 | 26 | livedir="LiveOS" 27 | for arg in `cat /proc/cmdline` ; do 28 | if [ "${arg##rd.live.dir=}" != "${arg}" ]; then 29 | livedir=${arg##rd.live.dir=} 30 | return 31 | fi 32 | if [ "${arg##live_dir=}" != "${arg}" ]; then 33 | livedir=${arg##live_dir=} 34 | return 35 | fi 36 | done 37 | 38 | if ! strstr "`cat /proc/cmdline`" noswap && [ -f /run/initramfs/live/${livedir}/swap.img ] ; then 39 | action "Enabling swap file" swapon /run/initramfs/live/${livedir}/swap.img 40 | fi 41 | 42 | mountPersistentHome() { 43 | # support label/uuid 44 | if [ "${homedev##LABEL=}" != "${homedev}" -o "${homedev##UUID=}" != "${homedev}" ]; then 45 | homedev=`/sbin/blkid -o device -t "$homedev"` 46 | fi 47 | 48 | # if we're given a file rather than a blockdev, loopback it 49 | if [ "${homedev##mtd}" != "${homedev}" ]; then 50 | # mtd devs don't have a block device but get magic-mounted with -t jffs2 51 | mountopts="-t jffs2" 52 | elif [ ! -b "$homedev" ]; then 53 | loopdev=`losetup -f` 54 | if [ "${homedev##/run/initramfs/live}" != "${homedev}" ]; then 55 | action "Remounting live store r/w" mount -o remount,rw /run/initramfs/live 56 | fi 57 | losetup $loopdev $homedev 58 | homedev=$loopdev 59 | fi 60 | 61 | # if it's encrypted, we need to unlock it 62 | if [ "$(/sbin/blkid -s TYPE -o value $homedev 2>/dev/null)" = "crypto_LUKS" ]; then 63 | echo 64 | echo "Setting up encrypted /home device" 65 | plymouth ask-for-password --command="cryptsetup luksOpen $homedev EncHome" 66 | homedev=/dev/mapper/EncHome 67 | fi 68 | 69 | # and finally do the mount 70 | mount $mountopts $homedev /home 71 | # if we have /home under what's passed for persistent home, then 72 | # we should make that the real /home. useful for mtd device on olpc 73 | if [ -d /home/home ]; then mount --bind /home/home /home ; fi 74 | [ -x /sbin/restorecon ] && /sbin/restorecon /home 75 | if [ -d /home/liveuser ]; then USERADDARGS="-M" ; fi 76 | } 77 | 78 | findPersistentHome() { 79 | for arg in `cat /proc/cmdline` ; do 80 | if [ "${arg##persistenthome=}" != "${arg}" ]; then 81 | homedev=${arg##persistenthome=} 82 | return 83 | fi 84 | done 85 | } 86 | 87 | if strstr "`cat /proc/cmdline`" persistenthome= ; then 88 | findPersistentHome 89 | elif [ -e /run/initramfs/live/${livedir}/home.img ]; then 90 | homedev=/run/initramfs/live/${livedir}/home.img 91 | fi 92 | 93 | # if we have a persistent /home, then we want to go ahead and mount it 94 | if ! strstr "`cat /proc/cmdline`" nopersistenthome && [ -n "$homedev" ] ; then 95 | action "Mounting persistent /home" mountPersistentHome 96 | mkdir -p /home/qubes 97 | else 98 | mkdir -p /home/qubes 99 | mount -t tmpfs none /home/qubes 100 | chown root:qubes /home/qubes 101 | chmod 2775 /home/qubes 102 | fi 103 | 104 | # overlay fs doesn't handle sparse files: 105 | # fs/overlayfs/copy_up.c:94 /* FIXME: copy up sparse files efficiently */ 106 | # So for now it is useless here. But some day... 107 | # 108 | #mkdir -p /home/qubes/qubes 109 | #mkdir -p /home/qubes/workdir 110 | #ln -nsf /var/lib/qubes-base/vm-templates /home/qubes/qubes/vm-templates 111 | #mount -t overlay overlay \ 112 | # -o lowerdir=/var/lib/qubes-base \ 113 | # -o upperdir=/home/qubes/qubes \ 114 | # -o workdir=/home/qubes/workdir \ 115 | # /var/lib/qubes 116 | 117 | ln -nsf /var/lib/qubes-base/vm-templates /home/qubes/vm-templates 118 | ln -nsf /var/lib/qubes-base/vm-kernels /home/qubes/vm-kernels 119 | for dir in /var/lib/qubes-base/*; do 120 | dir=`basename $dir` 121 | case $dir in 122 | vm-templates) ;; 123 | vm-kernels) ;; 124 | *) 125 | if [ ! -e /home/qubes/$dir ]; then 126 | cp -a /var/lib/qubes-base/$dir /home/qubes/ 127 | fi 128 | ;; 129 | esac 130 | done 131 | for privateimg in /var/lib/qubes-base/*vms/*/private.img; do 132 | tmpfs_path=${privateimg/\/var\/lib\/qubes-base/\/home\/qubes} 133 | if rm $tmpfs_path; then 134 | ln -s $privateimg $tmpfs_path 135 | fi 136 | done 137 | mount --bind /home/qubes /var/lib/qubes 138 | 139 | /usr/bin/qvm-prefs --offline-mode -s sys-net pcidevs '[]' 140 | for dev in $(/sbin/lspci -mm -n | sed -ne 's/^\([0-9][0-9]:[0-9][0-9].[0-9]\) "02.*/\1/p'); do 141 | /usr/bin/qvm-pci --offline-mode -a sys-net $dev 142 | done 143 | 144 | if [ -n "$configdone" ]; then 145 | exit 0 146 | fi 147 | 148 | # add fedora user with no passwd 149 | action "Adding live user" useradd $USERADDARGS -c "Live System User" liveuser 150 | passwd -d liveuser > /dev/null 151 | usermod -aG wheel liveuser > /dev/null 152 | usermod -aG qubes liveuser > /dev/null 153 | 154 | # Remove root password lock 155 | passwd -d root > /dev/null 156 | 157 | # turn off firstboot for livecd boots 158 | systemctl --no-reload disable firstboot-text.service 2> /dev/null || : 159 | systemctl --no-reload disable firstboot-graphical.service 2> /dev/null || : 160 | systemctl stop firstboot-text.service 2> /dev/null || : 161 | systemctl stop firstboot-graphical.service 2> /dev/null || : 162 | 163 | # don't use prelink on a running live image 164 | sed -i 's/PRELINKING=yes/PRELINKING=no/' /etc/sysconfig/prelink &>/dev/null || : 165 | 166 | # turn off mdmonitor by default 167 | systemctl --no-reload disable mdmonitor.service 2> /dev/null || : 168 | systemctl --no-reload disable mdmonitor-takeover.service 2> /dev/null || : 169 | systemctl stop mdmonitor.service 2> /dev/null || : 170 | systemctl stop mdmonitor-takeover.service 2> /dev/null || : 171 | 172 | # don't enable the gnome-settings-daemon packagekit plugin 173 | gsettings set org.gnome.software download-updates 'false' || : 174 | 175 | # don't start cron/at as they tend to spawn things which are 176 | # disk intensive that are painful on a live image 177 | systemctl --no-reload disable crond.service 2> /dev/null || : 178 | systemctl --no-reload disable atd.service 2> /dev/null || : 179 | systemctl stop crond.service 2> /dev/null || : 180 | systemctl stop atd.service 2> /dev/null || : 181 | 182 | # Don't sync the system clock when running live (RHBZ #1018162) 183 | sed -i 's/rtcsync//' /etc/chrony.conf 184 | 185 | # Mark things as configured 186 | touch /.liveimg-configured 187 | 188 | # add static hostname to work around xauth bug 189 | # https://bugzilla.redhat.com/show_bug.cgi?id=679486 190 | echo "localhost" > /etc/hostname 191 | 192 | -------------------------------------------------------------------------------- /live/livesys-late: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # live: Late init script for live image 4 | # 5 | # chkconfig: 345 99 01 6 | # description: Late init script for live image. 7 | 8 | # bah, hal starts way too late 9 | 10 | . /etc/init.d/functions 11 | 12 | if ! strstr "`cat /proc/cmdline`" rd.live.image || [ "$1" != "start" ] || [ -e /.liveimg-late-configured ] ; then 13 | exit 0 14 | fi 15 | 16 | exists() { 17 | which $1 >/dev/null 2>&1 || return 18 | $* 19 | } 20 | 21 | touch /.liveimg-late-configured 22 | 23 | # read some variables out of /proc/cmdline 24 | for o in `cat /proc/cmdline` ; do 25 | case $o in 26 | ks=*) 27 | ks="--kickstart=${o#ks=}" 28 | ;; 29 | xdriver=*) 30 | xdriver="${o#xdriver=}" 31 | ;; 32 | esac 33 | done 34 | 35 | # if liveinst or textinst is given, start anaconda 36 | if strstr "`cat /proc/cmdline`" liveinst ; then 37 | plymouth --quit 38 | /usr/sbin/liveinst $ks 39 | fi 40 | if strstr "`cat /proc/cmdline`" textinst ; then 41 | plymouth --quit 42 | /usr/sbin/liveinst --text $ks 43 | fi 44 | 45 | # configure X, allowing user to override xdriver 46 | if [ -n "$xdriver" ]; then 47 | cat > /etc/X11/xorg.conf.d/00-xdriver.conf < 4 | Date: Fri, 7 Aug 2015 03:26:30 +0200 5 | Subject: [PATCH 1/2] Set repo.gpgkey when provided in kickstart 6 | MIME-Version: 1.0 7 | Content-Type: text/plain; charset=UTF-8 8 | Content-Transfer-Encoding: 8bit 9 | Organization: Invisible Things Lab 10 | Cc: Marek Marczykowski-Górecki 11 | 12 | Signed-off-by: Marek Marczykowski-Górecki 13 | --- 14 | imgcreate/creator.py | 6 +++++- 15 | imgcreate/kickstart.py | 2 +- 16 | 2 files changed, 6 insertions(+), 2 deletions(-) 17 | 18 | diff --git a/imgcreate/creator.py b/imgcreate/creator.py 19 | index 42faf6f..c3ed346 100644 20 | --- a/imgcreate/creator.py 21 | +++ b/imgcreate/creator.py 22 | @@ -627,7 +627,7 @@ class ImageCreator(object): 23 | ayum.setup(yum_conf, self._instroot, cacheonly=self.cacheonly) 24 | 25 | for repo in kickstart.get_repos(self.ks, repo_urls): 26 | - (name, baseurl, mirrorlist, proxy, inc, exc, cost, sslverify) = repo 27 | + (name, baseurl, mirrorlist, proxy, inc, exc, cost, sslverify, gpgkey) = repo 28 | 29 | yr = ayum.addRepository(name, baseurl, mirrorlist) 30 | if inc: 31 | @@ -639,6 +639,10 @@ class ImageCreator(object): 32 | if cost is not None: 33 | yr.cost = cost 34 | yr.sslverify = sslverify 35 | + if gpgkey: 36 | + yr.gpgcheck = True 37 | + yr.gpgkey = yum.parser.varReplace(gpgkey, ayum.conf.yumvar) 38 | + 39 | ayum.setup(yum_conf, self._instroot) 40 | 41 | if kickstart.exclude_docs(self.ks): 42 | diff --git a/imgcreate/kickstart.py b/imgcreate/kickstart.py 43 | index 1059801..b8b3c82 100644 44 | --- a/imgcreate/kickstart.py 45 | +++ b/imgcreate/kickstart.py 46 | @@ -551,7 +551,7 @@ def get_repos(ks, repo_urls = {}): 47 | 48 | if repos.has_key(repo.name): 49 | logging.warn("Overriding already specified repo %s" %(repo.name,)) 50 | - repos[repo.name] = (repo.name, baseurl, mirrorlist, proxy, inc, exc, repo.cost, sslverify) 51 | + repos[repo.name] = (repo.name, baseurl, mirrorlist, proxy, inc, exc, repo.cost, sslverify, repo.gpgkey) 52 | 53 | return repos.values() 54 | 55 | -- 56 | 2.1.0 57 | 58 | -------------------------------------------------------------------------------- /livecd-tools/0001-Support-repo-ignoregroups-option.patch: -------------------------------------------------------------------------------- 1 | From b61c95f54cb405713a145e33d87820ee7b98de35 Mon Sep 17 00:00:00 2001 2 | From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= 3 | 4 | Date: Sun, 4 Oct 2015 18:13:53 +0200 5 | Subject: [PATCH] Support "repo --ignoregroups" option 6 | MIME-Version: 1.0 7 | Content-Type: text/plain; charset=UTF-8 8 | Content-Transfer-Encoding: 8bit 9 | Organization: Invisible Things Lab 10 | Cc: Marek Marczykowski-Górecki 11 | 12 | Signed-off-by: Marek Marczykowski-Górecki 13 | --- 14 | imgcreate/creator.py | 3 ++- 15 | imgcreate/kickstart.py | 3 ++- 16 | 2 files changed, 4 insertions(+), 2 deletions(-) 17 | 18 | diff --git a/imgcreate/creator.py b/imgcreate/creator.py 19 | index 979e38a..fb3f956 100644 20 | --- a/imgcreate/creator.py 21 | +++ b/imgcreate/creator.py 22 | @@ -646,7 +646,7 @@ class ImageCreator(object): 23 | ayum.setup(yum_conf, self._instroot, cacheonly=self.cacheonly) 24 | 25 | for repo in kickstart.get_repos(self.ks, repo_urls): 26 | - (name, baseurl, mirrorlist, proxy, inc, exc, cost, sslverify, gpgkey) = repo 27 | + (name, baseurl, mirrorlist, proxy, inc, exc, cost, groups, sslverify, gpgkey) = repo 28 | 29 | yr = ayum.addRepository(name, baseurl, mirrorlist) 30 | if inc: 31 | @@ -657,6 +657,7 @@ class ImageCreator(object): 32 | yr.proxy = proxy 33 | if cost is not None: 34 | yr.cost = cost 35 | + yr.enablegroups = groups 36 | yr.sslverify = sslverify 37 | if gpgkey: 38 | yr.gpgcheck = True 39 | diff --git a/imgcreate/kickstart.py b/imgcreate/kickstart.py 40 | index 59049d9..9346fed 100644 41 | --- a/imgcreate/kickstart.py 42 | +++ b/imgcreate/kickstart.py 43 | @@ -557,6 +557,7 @@ def get_repos(ks, repo_urls = {}): 44 | mirrorlist = repo.mirrorlist 45 | proxy = repo.proxy 46 | sslverify = not repo.noverifyssl 47 | + groups = not bool(repo.ignoregroups) 48 | 49 | if repo.name in repo_urls: 50 | baseurl = repo_urls[repo.name] 51 | @@ -564,7 +565,7 @@ def get_repos(ks, repo_urls = {}): 52 | 53 | if repos.has_key(repo.name): 54 | logging.warn("Overriding already specified repo %s" %(repo.name,)) 55 | - repos[repo.name] = (repo.name, baseurl, mirrorlist, proxy, inc, exc, repo.cost, sslverify, repo.gpgkey) 56 | + repos[repo.name] = (repo.name, baseurl, mirrorlist, proxy, inc, exc, repo.cost, groups, sslverify, repo.gpgkey) 57 | 58 | return repos.values() 59 | 60 | -- 61 | 2.1.0 62 | 63 | -------------------------------------------------------------------------------- /livecd-tools/0002-Actually-use-repo.gpgkey-verify-signatures-before-in.patch: -------------------------------------------------------------------------------- 1 | From ad81fa7d70111c2d29cb44a17c3511c49538d66d Mon Sep 17 00:00:00 2001 2 | From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= 3 | 4 | Date: Sat, 26 Sep 2015 06:14:05 +0200 5 | Subject: [PATCH 2/2] Actually use repo.gpgkey - verify signatures before 6 | installing the packages 7 | MIME-Version: 1.0 8 | Content-Type: text/plain; charset=UTF-8 9 | Content-Transfer-Encoding: 8bit 10 | Organization: Invisible Things Lab 11 | Cc: Marek Marczykowski-Górecki 12 | 13 | Signed-off-by: Marek Marczykowski-Górecki 14 | --- 15 | imgcreate/yuminst.py | 35 +++++++++++++++++++++++++++++++++-- 16 | 1 file changed, 33 insertions(+), 2 deletions(-) 17 | 18 | diff --git a/imgcreate/yuminst.py b/imgcreate/yuminst.py 19 | index 22e840c..17f4774 100644 20 | --- a/imgcreate/yuminst.py 21 | +++ b/imgcreate/yuminst.py 22 | @@ -178,7 +178,7 @@ class LiveCDYum(yum.YumBase): 23 | repo.metadata_expire = 0 24 | repo.mirrorlist_expire = 0 25 | repo.timestamp_check = 0 26 | - # disable gpg check??? 27 | + # disable gpg by default, enable it later when gpgkey specified 28 | repo.gpgcheck = 0 29 | repo.enable() 30 | repo.setup(self.conf.cache) 31 | @@ -195,6 +195,33 @@ class LiveCDYum(yum.YumBase): 32 | return True 33 | return False 34 | 35 | + def gpgsigcheck(self, pkgs): 36 | + """Perform GPG signature verification on the given packages, 37 | + installing keys if possible. 38 | + 39 | + :param pkgs: a list of package objects to verify the GPG 40 | + signatures of 41 | + :return: non-zero if execution should stop due to an error 42 | + :raises: Will raise :class:`CreatorError` if there's a problem 43 | + """ 44 | + for po in pkgs: 45 | + result, errmsg = self.sigCheckPkg(po) 46 | + 47 | + if result == 0: 48 | + # Verified ok, or verify not req'd 49 | + continue 50 | + 51 | + elif result == 1: 52 | + # keys are provided through kickstart, so treat this as consent 53 | + # for importing them 54 | + self.getKeyForPackage(po, lambda x, y, z: True) 55 | + 56 | + else: 57 | + # Fatal error 58 | + raise CreatorError(errmsg) 59 | + 60 | + return 0 61 | + 62 | 63 | def runInstall(self): 64 | os.environ["HOME"] = "/" 65 | @@ -211,7 +238,11 @@ class LiveCDYum(yum.YumBase): 66 | 67 | dlpkgs = map(lambda x: x.po, filter(lambda txmbr: txmbr.ts_state in ("i", "u"), self.tsInfo.getMembers())) 68 | self.downloadPkgs(dlpkgs) 69 | - # FIXME: sigcheck? 70 | + 71 | + # Check GPG signatures 72 | + if self.gpgsigcheck(dlpkgs) != 0: 73 | + raise CreatorError("GPG signature verification failed") 74 | + 75 | 76 | self.initActionTs() 77 | self.populateTs(keepold=0) 78 | -- 79 | 2.1.0 80 | 81 | -------------------------------------------------------------------------------- /livecd-tools/Makefile: -------------------------------------------------------------------------------- 1 | 2 | SPECFILE := livecd-tools.spec 3 | URL := $(shell spectool --list-files --source 0 $(SPECFILE) 2> /dev/null| cut -d ' ' -f 2- ) 4 | ifndef SRC_FILE 5 | ifdef URL 6 | SRC_FILE := $(notdir $(URL)) 7 | endif 8 | endif 9 | 10 | get-sources: $(SRC_FILE) 11 | 12 | ifeq ($(FETCH_CMD),) 13 | $(error "You can not run this Makefile without having FETCH_CMD defined") 14 | endif 15 | 16 | $(SRC_FILE): 17 | ifneq ($(SRC_FILE), None) 18 | @$(FETCH_CMD) $(SRC_FILE) $(URL) 19 | endif 20 | 21 | .PHONY: verify-sources 22 | 23 | verify-sources: 24 | ifneq ($(SRC_FILE), None) 25 | @sha256sum --quiet -c sources 26 | endif 27 | 28 | -------------------------------------------------------------------------------- /livecd-tools/livecd-tools.spec: -------------------------------------------------------------------------------- 1 | %{!?python_sitelib: %define python_sitelib %(%{__python} -c "import distutils.sysconfig as d; print d.get_python_lib()")} 2 | 3 | %define debug_package %{nil} 4 | 5 | %if 0%{?qubes_builder} 6 | %define _sourcedir %(pwd)/livecd-tools 7 | %endif 8 | 9 | 10 | Summary: Tools for building live CDs 11 | Name: livecd-tools 12 | Version: 20.6 13 | Release: 3%{?dist} 14 | Epoch: 1000 15 | License: GPLv2 16 | Group: System Environment/Base 17 | URL: http://git.fedorahosted.org/git/livecd 18 | # To make source tar ball: 19 | # git clone git://git.fedorahosted.org/livecd 20 | # cd livecd 21 | # make dist 22 | # scp livecd*.tar.bz2 fedorahosted.org:livecd 23 | Source0: http://fedorahosted.org/releases/l/i/livecd/%{name}-%{version}.tar.bz2 24 | # Drop the requirements for grub2-efi and shim: breaks 32-bit compose 25 | # and not needed as we have them in comps 26 | Patch0: 0001-Set-repo.gpgkey-when-provided-in-kickstart.patch 27 | Patch1: 0002-Actually-use-repo.gpgkey-verify-signatures-before-in.patch 28 | Patch2: 0001-Support-repo-ignoregroups-option.patch 29 | BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root 30 | Requires: python-imgcreate = %{epoch}:%{version}-%{release} 31 | Requires: mkisofs 32 | Requires: isomd5sum 33 | Requires: parted 34 | Requires: pyparted 35 | Requires: util-linux 36 | Requires: dosfstools 37 | Requires: e2fsprogs 38 | Requires: lorax >= 18.3 39 | Requires: rsync 40 | %ifarch %{ix86} x86_64 ppc ppc64 41 | Requires: hfsplus-tools 42 | %endif 43 | %ifarch %{ix86} x86_64 44 | Requires: syslinux 45 | Requires: /sbin/extlinux 46 | %endif 47 | %ifarch ppc 48 | Requires: yaboot 49 | %endif 50 | Requires: dumpet 51 | BuildRequires: python 52 | BuildRequires: /usr/bin/pod2man 53 | 54 | 55 | %description 56 | Tools for generating live CDs on Fedora based systems including 57 | derived distributions such as RHEL, CentOS and others. See 58 | http://fedoraproject.org/wiki/FedoraLiveCD for more details. 59 | 60 | %package -n python-imgcreate 61 | Summary: Python modules for building system images 62 | Group: System Environment/Base 63 | Requires: util-linux 64 | Requires: coreutils 65 | Requires: e2fsprogs 66 | Requires: yum >= 3.2.18 67 | Requires: squashfs-tools 68 | Requires: pykickstart >= 0.96 69 | Requires: dosfstools >= 2.11-8 70 | Requires: system-config-keyboard >= 1.3.0 71 | Requires: python-urlgrabber 72 | Requires: libselinux-python 73 | Requires: dbus-python 74 | Requires: policycoreutils 75 | 76 | %description -n python-imgcreate 77 | Python modules that can be used for building images for things 78 | like live image or appliances. 79 | 80 | 81 | %prep 82 | %autosetup -p1 83 | 84 | %build 85 | make 86 | 87 | %install 88 | rm -rf $RPM_BUILD_ROOT 89 | make install DESTDIR=$RPM_BUILD_ROOT 90 | 91 | %clean 92 | rm -rf $RPM_BUILD_ROOT 93 | 94 | %files 95 | %defattr(-,root,root,-) 96 | %doc AUTHORS COPYING README HACKING 97 | %doc config/livecd-fedora-minimal.ks 98 | %{_mandir}/man*/* 99 | %{_bindir}/livecd-creator 100 | %{_bindir}/livecd-iso-to-disk 101 | %{_bindir}/livecd-iso-to-pxeboot 102 | %{_bindir}/image-creator 103 | %{_bindir}/liveimage-mount 104 | %{_bindir}/edit-livecd 105 | %{_bindir}/mkbiarch 106 | 107 | %files -n python-imgcreate 108 | %defattr(-,root,root,-) 109 | %doc API COPYING 110 | %dir %{python_sitelib}/imgcreate 111 | %{python_sitelib}/imgcreate/*.py 112 | %{python_sitelib}/imgcreate/*.pyo 113 | %{python_sitelib}/imgcreate/*.pyc 114 | 115 | %changelog 116 | * Mon Oct 27 2014 Brian C. Lane 20.6-1 117 | - Version 20.6 (bcl) 118 | - Ignore case when looking for UEFI boot*efi file (#1156380) (bcl) 119 | 120 | * Wed Mar 26 2014 Brian C. Lane 20.5-1 121 | - Version 20.5 (bcl) 122 | - Cleanup paths in README (bcl) 123 | - livecd-creator: Make sure kickstart file exists (#1074295) (bcl) 124 | 125 | * Fri Jan 31 2014 Brian C. Lane 20.4-1 126 | - Version 20.4 (bcl) 127 | - Fix extlinux check (#1059278) (bcl) 128 | - Check kickstart for repo line (#1005580) (bcl) 129 | - Catch CreatorError during class init (#1005580) (bcl) 130 | - Add docleanup to edit-livecd (#1000744) (bcl) 131 | - utf8 decode unicode error strings (#1035248) (bcl) 132 | - Remove switch to Permissive (#1051523) (bcl) 133 | 134 | * Tue Jan 07 2014 Brian C. Lane 20.3-1 135 | - Version 20.3 (bcl) 136 | - Add missing quote (#1044675) (bcl) 137 | 138 | * Tue Jan 07 2014 Brian C. Lane 20.2-1 139 | - Version 20.2 (bcl) 140 | - Use LC_ALL=C for parted calls (#1045854) (bcl) 141 | - Fix to work with the changed yum.config._getsysver (bruno) 142 | - Add check for extlinux tools (#881317) (bcl) 143 | - Cleanup arg parsing a bit (#725047) (bcl) 144 | 145 | * Mon Nov 18 2013 Brian C. Lane 20.1-1 146 | - add 'troubleshooting' submenu with 'basic graphics mode' to UEFI boot menu (awilliam) 147 | - make UEFI boot menu resemble the BIOS and non-live boot menus more (awilliam) 148 | - drop 'xdriver=vesa' from basic graphics mode parameters (per ajax) (awilliam) 149 | - Ensure filesystem modules end up in the live image initramfs. (notting) 150 | - Don't use mkfs.extN options for any filesystem types. (notting) 151 | - litd: Add --label option to override LIVE label (helio) 152 | - liveimage-mount: add missing import (bcl) 153 | - Change vfat limit from 2047 to 4095 (#995552) (bcl) 154 | 155 | * Wed Aug 07 2013 Brian C. Lane 20.0-1 156 | - Version 20.0 (bcl) 157 | - Install docs in unversioned doc directory (#992144) (bochecha) 158 | 159 | * Sat Aug 03 2013 Fedora Release Engineering - 1:19.6-2 160 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild 161 | 162 | * Mon Jul 15 2013 Brian C. Lane 19.6-1 163 | - Version 19.6 (bcl) 164 | - litd: Add kickstart option (bcl) 165 | - ts.check output is a list of tuples (#979759) (bcl) 166 | - Add repo --noverifyssl support (#907707) (bcl) 167 | 168 | * Mon Jun 17 2013 Brian C. Lane 19.5-1 169 | - Version 19.5 (bcl) 170 | - Write vconsole.conf directly (bcl) 171 | - litd: Add --updates option (bcl) 172 | 173 | * Fri May 31 2013 Brian C. Lane 19.4-1 174 | - Version 19.4 (bcl) 175 | - Replace bash string parsing with awk (#962039,#969521) (bcl) 176 | - Fix default.target symlink (#968272) (bcl) 177 | 178 | * Wed May 29 2013 Brian C. Lane 19.3-2 179 | - Add requirement on rsync (#967948) 180 | 181 | * Thu May 23 2013 Brian C. Lane 19.3-1 182 | - Version 19.3 (bcl) 183 | - Avoid setting empty root password (#964299) (thoger) 184 | CVE-2013-2069 185 | - Handle urlgrabber callback changes (#963645) (bcl) 186 | 187 | * Wed May 08 2013 Dennis Gilmore 19.2-2 188 | - only require hfsplus-tools on ppc and x86 arches 189 | 190 | * Wed Apr 03 2013 Brian C. Lane 19.2-1 191 | - Version 19.2 (bcl) 192 | - Use parted to check for GPT disklabel (#947653) (bcl) 193 | - Output details of dep check failure (bcl) 194 | - Properly generate kernel stanzas (#928093) (bcl) 195 | 196 | * Sat Mar 16 2013 Brian C. Lane 19.1-1 197 | - Version 19.1 (bcl) 198 | - iso9660 module is named isofs (bcl) 199 | - disable dracut hostonly and rescue image (#921422) (bcl) 200 | 201 | * Fri Mar 08 2013 Brian C. Lane 19.0-1 202 | - Version 19.0 (bcl) 203 | - iso9660 is now a module, include it (bcl) 204 | - correctly check for selinux state (#896610) (bcl) 205 | - Simplify kickstart example (#903378) (bcl) 206 | - default to symlink for /etc/localtime (#885246) (bcl) 207 | 208 | * Sat Feb 23 2013 Bruno Wolff III 18.14-2 209 | - Get an up to date build in rawhide, since the mass 210 | - rebuild used a master branch that was behind the f18 211 | - branch and builds from f18 are no longer inherited. 212 | 213 | - Version 18.14 (bcl) 214 | - add --verifyudev to dmsetup (#885385) (bcl) 215 | 216 | - Version 18.13 (bcl) 217 | - silence the selinux umount error (bcl) 218 | - use systemd instead of inittab for startx (bcl) 219 | - set selinux permissive mode when building (bcl) 220 | - fix kickstart logging entry (bcl) 221 | - write hostname to /etc/hostname (#870805) (bcl) 222 | - add nocontexts for selinux (#858373) (bcl) 223 | - remove lokkit usage (bcl) 224 | - use locale.conf not sysconfig/i18n (#870805) (bcl) 225 | - don't write clock (#870805) (bcl) 226 | - add remainder of virtio modules to initrd (#864012) (bcl) 227 | 228 | - Require hfsplus-tools so that images will boot on Mac 229 | 230 | - Version 18.12 (bcl) 231 | - Remove grub 0.97 splash (bcl) 232 | 233 | - Version 18.11 (bcl) 234 | - not copying UEFI files shouldn't be fatal (#856893) (bcl) 235 | - don't require shim and grub2-efi (#856893) (bcl) 236 | 237 | - efi_requires.patch: don't force grub2-efi and shim into the package 238 | list, it breaks 32-bit compose and isn't needed, we have it in comps 239 | 240 | - Version 18.10 (bcl) 241 | - use cp -r instead of -a (bcl) 242 | 243 | - Version 18.9 (bcl) 244 | - fix extra-kernel-args (#853570) (bcl) 245 | - New location for GRUB2 config on UEFI (#851220) (bcl) 246 | - Add nocleanup option to retain temp files (bcl) 247 | - Update imgcreate for UEFI Secure Boot (bcl) 248 | 249 | * Thu Feb 14 2013 Fedora Release Engineering - 1:18.8-2 250 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild 251 | 252 | * Mon Aug 06 2012 Brian C. Lane 18.8-1 253 | - Version 18.8 (bcl) 254 | - dracut needs to load vfat and msdos filesystems (bcl) 255 | 256 | * Thu Aug 02 2012 Brian C. Lane 18.7-1 257 | - Version 18.7 (bcl) 258 | - Recognize rd.live.image as well as liveimg in sed scripts of livecd-iso-to- 259 | disk & edit-livecd (fgrose) 260 | - fix /etc/localtime file vs. symlink (#829032) (bcl) 261 | 262 | * Tue Jul 31 2012 Brian C. Lane 18.6-1 263 | - Version 18.6 (bcl) 264 | - switch to using rd.live.image instead of liveimg (bcl) 265 | - dracut doesn't need explicit filesystems (bcl) 266 | - livecd-creator: Add --cacheonly for offline use (martin) 267 | - Implement cacheonly (offline) support in ImageCreator and LoopCreator (martin) 268 | - if mounting squashfs add ro mount option (jboggs) 269 | - imgcreate: Use copy2 for TimezoneConfig (#829032) (bcl) 270 | 271 | * Thu Jul 19 2012 Fedora Release Engineering - 1:18.5-2 272 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild 273 | 274 | * Thu May 03 2012 Brian C. Lane 18.5-1 275 | - Version 18.5 (bcl) 276 | - Include Mac volume name graphic (mjg) 277 | - copy repo data to USB for F17 (#806166) (bcl) 278 | - Version 18.4 (bcl) 279 | - allow for use of yum plugins during livecd creation (notting) 280 | - Capitalise EFI names (mjg) 281 | - Add tighter Mac boot image integration (mjg) 282 | - fix quoting with basename and SRC (#814174) (bcl) 283 | - check for LIVE-REPO partition when writing DVD (#813905) (bcl) 284 | 285 | * Mon Apr 16 2012 Brian C. Lane 18.3-1 286 | - Version 18.3 (bcl) 287 | - add support for cost in kickstart repo line (#735079) (mads) 288 | - skip copying DVD image file with skipcopy option (786037) (bcl) 289 | - remove kernel and initrd from EFI/BOOT (#811438) (bcl) 290 | - fix syntax problem in detectsrctype (bcl) 291 | 292 | * Thu Mar 01 2012 Brian C. Lane - 18.2-1 293 | - Version 18.2 (bcl) 294 | - livecd-iso-to-disk: Add 2MB slop to calculation (bcl) 295 | - Change EFI/boot to EFI/BOOT (mjg) 296 | - Add support for generating EFI-bootable hybrid images (mjg) 297 | 298 | * Thu Feb 23 2012 Brian C. Lane - 18.1-1 299 | - Version 18.1 (bcl) 300 | - livecd-iso-to-disk: create partition for iso (bcl) 301 | 302 | * Wed Feb 15 2012 Brian C. Lane - 18.0-1 303 | - Version 18.0 (bcl) 304 | - check for valid script path before editing livecd image and update usage 305 | options confusion (jboggs) 306 | - imgcreate: fix typo in ResizeError (bcl) 307 | - add missing selinux_mountpoint class object to edit-livecd (jboggs) 308 | 309 | * Wed Jan 18 2012 Brian C. Lane - 17.4-1 310 | - Version 17.4 (bcl) 311 | - selinux may be off on the host, skip mount (#737064) (bcl) 312 | - Set base_persistdir (#741614) (bcl) 313 | - Fix the fix for dracut modules (#766955) (bcl) 314 | - Use dracut.conf.d instead fo dracut.conf (bcl) 315 | - dracut needs dmsquash-live explicitly included (bcl) 316 | - edit-livecd: -k --kickstart option (apevec) 317 | 318 | * Fri Jan 13 2012 Fedora Release Engineering - 1:17.3-2 319 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild 320 | 321 | * Wed Dec 21 2011 Brian C. Lane 17.3-1 322 | - Version 17.3 (bcl) 323 | - python-imgcreate: remove -f from second lokkit call (#769457) (bcl) 324 | - Install edit-livecd to /usr/bin (bcl) 325 | 326 | * Thu Nov 03 2011 Brian C. Lane 17.2-1 327 | - Version 17.2 (bcl) 328 | - Fix indent and typo in liveimage-mount (#749643) (bcl) 329 | - Make sure the target is labeled LIVE (#751213) (bcl) 330 | - Only check first match for boot flag (#739411) (bcl) 331 | - Stop creating backup image before resizing (#737243) (bcl) 332 | 333 | * Thu Sep 01 2011 Brian C. Lane 17.1-1 334 | - Version 17.1 (bcl) 335 | - Add title and product args (#669120) (bcl) 336 | - Skip bind mounts when source isn't there (bcl) 337 | - Add new syslinux.cfg template (#734173) (bcl) 338 | - Use copyFile on the iso (bcl) 339 | - Use rsync to copy if available (bcl) 340 | 341 | * Thu Aug 11 2011 Brian C. Lane 17.0-1 342 | - Version 17.0 343 | - Quote $SRC so iso's with spaces will work (#694915) (bruno) 344 | - Handle move to /sys/fs/selinux (#728576) (dwalsh) 345 | - master is now v17.X (bcl) 346 | - Turn on the legacy_boot flag for EFI (#680563) (bcl) 347 | - Don't ask about replacing MBR when formatting (bcl) 348 | - Make MBR replacement message more clear (bcl) 349 | - Ensure previous filesystems are wiped when formatting (#712553) (bcl) 350 | - Modify pxeboot script to work with F16 (bcl) 351 | - Add initial support for ARM architectures (martin.langhoff) 352 | - Copy updates and product image files (bcl) 353 | 354 | * Thu Mar 31 2011 Brian C. Lane 16.3-1 355 | - Version 16.3 (bcl) 356 | - Copy old initrd/xen files to isolinux when using base-on (#690940) (bcl) 357 | - Don't fail on missing splash image (bcl) 358 | - Images go into $SYSLINUXPATH (bcl) 359 | - fix typo (bcl) 360 | - Check for spaces in fs label when using overlay (#597599) (bcl) 361 | - Fix logic for syslinux check (bcl) 362 | - Fix image-creator symlink so that it is relative (bcl) 363 | - symlink /etc/mtab to /proc/self/mounts (#688277) (bcl) 364 | - liveimage-mount installed LiveOS with overlay (fgrose) 365 | - Fix overzealous boot->BOOT change (bcl) 366 | - Fix return code failure (#689360) (fgrose) 367 | - Fix pipefailure in checkSyslinuxVersion (#689329) (fgrose) 368 | - Symlink image-creator instead of hardlink (#689167) (bcl) 369 | - Add extracting BOOTX64.efi from iso (#688258) (bcl) 370 | - Add repo to DVD EFI install config file (#688258) (bcl) 371 | - Add EFI support to netboot (#688258) (bcl) 372 | - Support /EFI/BOOT or /EFI/boot (#688258) (bcl) 373 | 374 | * Mon Mar 14 2011 Brian C. Lane 16.2-1 375 | - Version 16.2 (bcl) 376 | - livecd-iso-to-disk: Catch all failures (lkundrak) 377 | - Mailing list address changed (lkundrak) 378 | - Fall back to to msdos format if no extlinux (bcl) 379 | - Create an ext4 filesystem by default for home.img (fgrose) 380 | - Add error checks to home.img creation (bcl) 381 | - livecd-iso-to-disk Detect more disk space issues (fgrose) 382 | - gptmbr can be written directly to the mbr (bcl) 383 | - Fixup livedir support (#679023) (jan.kratochvil) 384 | 385 | * Fri Feb 18 2011 Brian C. Lane 16.1-1 386 | - Version 16.1 (bcl) 387 | - Print reason for sudden exit (bcl) 388 | - Fix skipcopy usage with DVD iso (#644194) (bmj001) 389 | - Move selinux relabel to after %post (#648591) (bcl) 390 | - Add support for virtio disks to livecd (#672936) (bcl) 391 | - Support attached LiveOS devices as well as image files for LiveOS editing. 392 | (fgrose) 393 | - Check return value on udevadm (#637258) (bcl) 394 | 395 | * Tue Feb 15 2011 Brian C. Lane 16.0-1 396 | - Version 16.0 (bcl) 397 | - Add tmpdir to LiveImageCreator (bcl) 398 | - Source may be a file or a block device, mount accordingly (bcl) 399 | - Enable reading of SquashFS compression type. (fgrose) 400 | - Enable cloning of a running LiveOS image into a fresh iso. (fgrose) 401 | - Update usage documentation & add it to the script (fgrose) 402 | - Support the propagation of an installed Live image (fgrose) 403 | - Rename image source- and target-related variables (fgrose) 404 | - Align start of partition at 1MiB (#668967) (bcl) 405 | - Pass tmpdir to ImageCreator class initializer (#476676) (bcl) 406 | - Add tmpdir to ImageCreator class initializer (#476676) (bcl) 407 | - Enable an optional tmpdir for e2image in fs.resize2fs() (fgrose) 408 | - Bad karma commit reverted; The option to boot from a local drive *MUST* exist 409 | as 99.9% of our consumers have default desktop hardware configurations. 410 | (jeroen.van.meeuwen) 411 | - Really switch the default compression type, not just the default cli option 412 | value (jeroen.van.meeuwen) 413 | 414 | * Tue Feb 08 2011 Fedora Release Engineering - 1:15.3-3 415 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild 416 | 417 | * Thu Jan 27 2011 Brian C. Lane - 15.3-1 418 | - Version 15.3 (bcl) 419 | - Remove boot from local drive option (bcl) 420 | - Check for one big initrd.img (#671900) (bcl) 421 | - Make xz the default compression type for live images. (bruno) 422 | - Update documentation for xz availability. (bruno) 423 | - Change releasever to a command line option (#667474) (bcl) 424 | 425 | * Tue Jan 04 2011 Dennis Gilmore - 15.2-2 426 | - patch to drop support of releasever in urls it destroys image creation in koji 427 | 428 | * Wed Dec 22 2010 Brian C. Lane - 15.2-1 429 | - Version 5.2 (bcl) 430 | - Assign a device-mapper UUID w/ subsystem prefix to the dm snapshot. (dlehman) 431 | - Fix git URLs to match reality. (dlehman) 432 | - Trap copyFile errors (#663849) (fgrose) 433 | - Fix incomplete rename of freespace variable (#656154) (fgrose) 434 | 435 | * Tue Nov 30 2010 Brian C. Lane - 15.1-1 436 | - Bump version to 15.1 (bcl) 437 | - Wrap subprocess.call() so we can capture all command output for debugging. 438 | (jlaska) 439 | - Work with the logging settings when emitting progress. (jlaska) 440 | - Add a quiet option to surpress stdout. Adjust handle_logfile to not surpress 441 | stdout. (jlaska) 442 | - Fix partition number selection for MMC bus devices (#587411) (fgrose) 443 | - Fix disk space estimation errors (#656154) (fgrose) 444 | - Tolerate empty transactions (lkundrak) 445 | - Merge livecd-creator and image-creator (lkundrak) 446 | - Cleanup if/then blocks (#652522) (fgrose) 447 | 448 | * Mon Nov 15 2010 Brian C. Lane - 15.0-1 449 | - Each branch needs a different version number. 450 | 451 | * Mon Nov 15 2010 Brian C. Lane - 0.3.6-1 452 | - Bump version to 0.3.6 (bcl) 453 | - Misc. fixups (#652522) (fgrose) 454 | - Set indentation to 4 spaces (#652522) (fgrose) 455 | - Add a release target (bcl) 456 | - Pass dracut args during check (#589778) (bcl) 457 | - Update dracut args (#652484) (bcl) 458 | - Cleanup tabs (#652522) (fgrose) 459 | - Cleanup EOL spaces (#652522) (fgrose) 460 | - Typo. Need space before ]. (bruno) 461 | - Add support for timeout and totaltimeout to livecd-iso-to-disk (#531566) 462 | (bcl) 463 | - Add proxy support to livecd-creator (#649546) (bcl) 464 | 465 | * Mon Nov 01 2010 Brian C. Lane - 0.3.5-1 466 | - Converting version number to NVR 467 | - Removed patches (now included in v0.3.5) 468 | 469 | * Sun Sep 26 2010 Bruno Wolff III - 034-11 470 | - Fix live image relabel when compose host has selinux disabled. 471 | 472 | * Tue Sep 21 2010 Bruno Wolff III - 034-10 473 | - Document the lzo compressor. 474 | 475 | * Thu Sep 16 2010 Bruno Wolff III - 034-9 476 | - Change requires to /sbin/extlinux since that will work with old and new 477 | versions of syslinux. 478 | 479 | * Thu Sep 16 2010 Bruno Wolff III - 034-8 480 | - extlinux is now in a subpackage that is required by livecd-iso-to-disk 481 | 482 | * Tue Sep 14 2010 Tom "spot" Callaway - 034-7 483 | - fix background image copying to use new-new logo path 484 | 485 | * Tue Sep 14 2010 Bruno Wolff III - 034-6 486 | - One /dev/loop* change had been missed. Backport patch. 487 | 488 | * Mon Sep 13 2010 Bruno Wolff III - 034-5 489 | - Backport basic video menu label fix 490 | 491 | * Mon Sep 13 2010 Bruno Wolff III - 034-4 492 | - Backport missing parts of the regex fix patch 493 | 494 | * Mon Sep 13 2010 Bruno Wolff III - 034-3 495 | - Backported fix for vesa boot menu item 496 | 497 | * Sun Sep 12 2010 Bruno Wolff III - 034-2 498 | - mkbiarch needs pyparted 499 | 500 | * Sat Sep 11 2010 Bruno Wolff III - 034-1 501 | - A new experimental script for creating live images. 502 | - Handle partition devices that have a separator character in them. 503 | - Initial checkin of a new expermiental tool for live backup images. 504 | - Allow use of stage2 for repos to help with netinst ISOs. 505 | - Fix issue with using netinst ISOs. 506 | - Add support for ext4 now that syslinux supports it. 507 | - Fix for enumerating loop devices using bash 4.1.7. 508 | - Change --skipcopy to not overwrite other large areas. 509 | - Add basic video driver option to syslinux/isolinux. 510 | - Don't create sparse files one byte too large. 511 | - Display progress information when copying image to USB devices. 512 | - Set default boot language for USB images to the current locale. 513 | - Use grep instead of depreceated egrep. 514 | - Set up locale or there can be problems handling nonascii strings. 515 | - Try normal umount before falling back to lazy umount. 516 | - Allow creation of SELinux enabled LiveCD from an SELinux disabled system. 517 | 518 | * Tue Jul 30 2010 Bruno Wolff III - 033-3 519 | - The previous update got replaced by the python update; another bump is needed. 520 | 521 | * Tue Jul 27 2010 Bruno Wolff III - 033-2 522 | - Replace 'zlib' with 'gzip' to fix thinko about the compressor name. 523 | 524 | * Tue Jul 27 2010 Bruno Wolff III - 033-1 525 | - Fix for vesa splash file change for bz 617115. 526 | - Use lazy umounts as a work around for bz 617844. 527 | - Better handling of Environment exceptions for bz 551932. 528 | 529 | * Wed Jul 21 2010 David Malcolm - 032-5 530 | - Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild 531 | 532 | * Sat Jun 19 2010 Bruno Wolff III - 032-4 533 | - liveimage-mount is new to 023 534 | 535 | * Sat Jun 19 2010 Bruno Wolff III - 032-3 536 | - Change the version in the Makefile 537 | 538 | * Sat Jun 19 2010 Bruno Wolff III - 032-2 539 | - Fix tar prefix and document how to make it 540 | 541 | * Sat Jun 19 2010 Bruno Wolff III - 032-1 542 | - Added support for specifying compressors 543 | - Add Requires for parted - Bug 605639 544 | - Add rd_NO_DM dracut cmdline options - Bug 589783 545 | - See http://git.fedorahosted.org/git/?p=livecd;a=shortlog for a list of 546 | upstream commits since 031 was tagged. 547 | 548 | * Tue Nov 03 2009 Warren Togami - 031-1 549 | - livecd-iso-to-disk capable of installing installer DVD to USB 550 | 551 | * Mon Oct 19 2009 Warren Togami - 030-1 552 | - Tell dracut not to ask for LUKS passwords or activate mdraid sets 553 | - Silence the /etc/modprobe.conf deprecation warning 554 | 555 | * Wed Sep 16 2009 Warren Togami - 028-1 556 | - Fix LiveUSB with live images 557 | - Fix display of free space during livecd-iso-to-disk error (farrell) 558 | 559 | * Tue Sep 15 2009 Warren Togami - 027-2 560 | - test patch to make LiveUSB work again, need to be sure it doesn't 561 | break LiveCD before committing in the next version 562 | 563 | * Thu Sep 10 2009 Warren Togami - 027-1 564 | - Support new dracut output filename /boot/initramfs-* 565 | - Fix cleanup of fake /selinux directory during teardown Bug #522224 566 | 567 | * Mon Aug 24 2009 Jeremy Katz - 026-1 568 | - More resize2fs -M usage 569 | - Work with dracut-based initramfs 570 | - Some error handling updates 571 | 572 | * Thu Jul 30 2009 Jeremy Katz - 025-1 573 | - Bind mount /dev/shm also (#502921) 574 | - Update man pages (Michel Duquaine, #505742) 575 | - Use blkid instead of vol_id (mclasen, #506360) 576 | - A few livecd-iso-to-disk tweaks (Martin Dengler, Jason Farrell) 577 | - Another fix for SELinux being disabled (#508402) 578 | - Use resize2fs -M and handle resize errors better 579 | - Use isohybrid on the live image 580 | - Use system-config-keyboard instead of rhpl 581 | 582 | * Sat Jul 25 2009 Fedora Release Engineering - 024-2 583 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild 584 | 585 | * Wed May 6 2009 Jeremy Katz - 024-1 586 | - Fix ppc image creation (#497193, help from jwboyer) 587 | - Fixes for using ext[23] usb stick (wtogami) 588 | - Check filesystem after resizing and raise an error if there are 589 | problems (#497377) 590 | 591 | * Tue Apr 14 2009 Jeremy Katz - 023-1 592 | - Don't prompt about overwriting when making usb stick (#491234) 593 | - Fix up livecd-iso-to-pxeboot for new syslinux paths 594 | - Fix --xo variable expansion (Alexander Boström) 595 | - Name of EFI partitions doesn't matter for mactel mode (Jim Radford) 596 | - Fix unterminated sed command (#492376) 597 | - Handle kernel/squashfs mismatch when making usb stick in 598 | --xo mode (Alexander Boström) 599 | - Support all of the options for the 'firewall' kickstart directive 600 | - Deal with syslinux com32 api incompat when making usb sticks (#492370) 601 | - Add options to force fetching of repomd.xml every run (jkeating) 602 | - Quiet restorecon (Marc Herbert) 603 | - Fix traceback with syslinux disabled (#495269) 604 | - Split python-imgcreate module into a subpackage 605 | 606 | * Mon Mar 9 2009 Jeremy Katz - 022-1 607 | - Fixes for hybird GPT/MBR usb sticks (Stewart Adam) 608 | - Support setting SELinux booleans (Dan Walsh) 609 | - Fix unicode error messages (Felix Schwarz) 610 | - Update man pages (Chris Curran, #484627) 611 | - Support syslinux under /usr/share 612 | - Remove some legacy support from livecd-iso-to-disk 613 | - Basic support for multi-image usb sticks 614 | 615 | * Wed Feb 25 2009 Fedora Release Engineering - 021-2 616 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild 617 | 618 | * Mon Jan 19 2009 Jeremy Katz - 021-1 619 | - Start of support for hybrid GPT/MBR usb sticks (Stewart Adam) 620 | - Fix for udev deprecated syntax (#480109) 621 | - Keep cache with --cache (Jan Kratochvil, #479716) 622 | - Use absolute path to cachedir (#479716) 623 | - Support UDF for large ISO spins (Bruno Wolf, #476696) 624 | - Improvements for encrypted /home setup (mdomsch, #475399) 625 | - Don't allow spaces in labels (#475834) 626 | - Fix --tmpdir relative path (dhuff) 627 | - Support ext4 rootfs 628 | - Fix device command version check (apevec) 629 | - Allow URLs for specifying the kickstart config (bkearney) 630 | - Fix macro name for excludedocs (bkearney) 631 | - Fix up --base-on (#471656) 632 | 633 | * Wed Nov 12 2008 Jeremy Katz - 020-1 634 | - Support setting up a swap file 635 | - Verify integer args in livecd-iso-to-disk (#467257) 636 | - Set up persistent /home on internal mtd0 for XO 637 | - Default to resetting the overlay on XO 638 | - Support copying the raw ext3fs to the usb stick instead of the squash 639 | - Mactel fixes 640 | - Align initrd properly on XO (#467093) 641 | - Make initrd load addr work on newer XO firmwares 642 | - Fix up Xen paths for Xen live images (Michael Ansel) 643 | - Support --defaultdesktop (Orion Poplawski) 644 | 645 | * Fri Oct 10 2008 Jeremy Katz - 019-1 646 | - livecd-iso-to-disk: Various other XO fixes 647 | - Cleanup rpmdb locks after package installation 648 | - Fix traceback due to lazy rhpl.keyboard import 649 | - Fix using groups with options (jkeating) 650 | - Support persistent /home on XO's internal flash 651 | - Fix ramdisk load addr in boot/olpc.fth for XO 652 | - Fix up boot from SD 653 | - Fix extracting boot parameters for pxe (apevec) 654 | - Make rpm macro information persist into the image (bkearney) 655 | - Support %%packages --instLangs (bkearney) 656 | 657 | * Thu Aug 28 2008 Jeremy Katz - 018-1 658 | - Use logging API for debugging messages (dhuff) 659 | - Some initial support for booting live images on an XO 660 | - Refactoring of mount code for appliance-creator (danpb, dhuff) 661 | - Make --base-on actually work again 662 | - Drop the image configs; these are now in the spin-kickstarts repo 663 | - plymouth support 664 | - Listen to bootloader --append in config 665 | - Add man pages (Pedro Silva) 666 | - Support booting from Intel based Macs via EFI on USB (#450193) 667 | - Fixes for SELinux enforcing (eparis) 668 | - Eject the CD on shutdown (#239928) 669 | - Allow adding extra kernel args with livecd-iso-to-disk 670 | - Support for persistent /home (#445218) 671 | - Copy timezone to /etc/localtime (#445624) 672 | - Ensure that commands run by livecd-creator exist 673 | - Mount a tmpfs for some dirs (#447127) 674 | 675 | * Tue May 6 2008 Bill Nottingham - 017-1 676 | - fix F9 final configs 677 | 678 | * Thu May 1 2008 Jeremy Katz - 016-1 679 | - Config changes all around, including F9 final configs 680 | - Fix up the minimal image creation 681 | - Fix odd traceback error on __del__ (#442443) 682 | - Add late initscript and split things in half 683 | - livecd-iso-to-disk: Check the available space on the stick (#443046) 684 | - Fix partition size overriding (kanarip) 685 | 686 | * Thu Mar 6 2008 Jeremy Katz - 015-1 687 | - Support for using live isos with pxe booting (Richard W.M. Jones and 688 | Chris Lalancette) 689 | - Fixes for SELinux being disabled (Warren Togami) 690 | - Stop using mayflower for building the initrd; mkinitrd can do it now 691 | - Create a minimal /dev rather than using the host /dev (Warren Togami) 692 | - Support for persistent overlays when using a USB stick (based on support 693 | by Douglas McClendon) 694 | 695 | * Tue Feb 12 2008 Jeremy Katz - 014-1 696 | - Rework to provide a python API for use by other tools (thanks to 697 | markmc for a lot of the legwork here) 698 | - Fix creation of images with ext2 filesystems and no SELinux 699 | - Don't require a yum-cache directory inside of the cachedir (#430066) 700 | - Many config updates for rawhide 701 | - Allow running live images from MMC/SD (#430444) 702 | - Don't let a non-standard TMPDIR break things (Jim Meyering) 703 | 704 | * Mon Oct 29 2007 Jeremy Katz - 013-1 705 | - Lots of config updates 706 | - Support 'device foo' to say what modules go in the initramfs 707 | - Support multiple kernels being installed 708 | - Allow blacklisting kernel modules on boot with blacklist=foo 709 | - Improve bootloader configs 710 | - Split configs off for f8 711 | 712 | * Tue Sep 25 2007 Jeremy Katz - 012-1 713 | - Allow %%post --nochroot to work for putting files in the root of the iso 714 | - Set environment variables for when %%post is run 715 | - Add progress for downloads (Colin Walters) 716 | - Add cachedir option (Colin Walters) 717 | - Fixes for ppc/ppc64 to work again 718 | - Clean up bootloader config a little 719 | - Enable swaps in the default desktop config 720 | - Ensure all configs are installed (#281911) 721 | - Convert method line to a repo for easier config reuse (jkeating) 722 | - Kill the modprobe FATAL warnings (#240585) 723 | - Verify isos with iso-to-disk script 724 | - Allow passing xdriver for setting the xdriver (#291281) 725 | - Add turboliveinst patch (Douglas McClendon) 726 | - Make iso-to-disk support --resetmbr (#294041) 727 | - Clean up filesystem layout (Douglas McClendon) 728 | - Manifest tweaks for most configs 729 | 730 | * Tue Aug 28 2007 Jeremy Katz - 011-1 731 | - Many config updates for Fedora 8 732 | - Support $basearch in repo line of configs; use it 733 | - Support setting up Xen kernels and memtest86+ in the bootloader config 734 | - Handle rhgb setup 735 | - Improved default fs label (Colin Walters) 736 | - Support localboot from the bootloader (#252192) 737 | - Use hidden menu support in syslinux 738 | - Have a base desktop config included by the other configs (Colin Walters) 739 | - Use optparse for optino parsing 740 | - Remove a lot of command line options; things should be specified via the 741 | kickstart config instead 742 | - Beginnings of PPC support (David Woodhouse) 743 | - Clean up kernel module inclusion to take advantage of files in Fedora 744 | kernels listing storage drivers 745 | 746 | * Wed Jul 25 2007 Jeremy Katz - 010-1 747 | - Separate out configs used for Fedora 7 748 | - Add patch from Douglas McClendon to make images smaller 749 | - Add patch from Matt Domsch to work with older syslinux without vesamenu 750 | - Add support for using mirrorlists; use them 751 | - Let livecd-iso-to-disk work with uncompressed images (#248081) 752 | - Raise error if SELinux requested without being enabled (#248080) 753 | - Set service defaults on level 2 also (#246350) 754 | - Catch some failure cases 755 | - Allow specifying tmpdir 756 | - Add patch from nameserver specification from Elias Hunt 757 | 758 | * Wed May 30 2007 Jeremy Katz - 009-1 759 | - miscellaneous live config changes 760 | - fix isomd5 checking syntax error 761 | 762 | * Fri May 4 2007 Jeremy Katz - 008-1 763 | - disable screensaver with default config 764 | - add aic7xxx and sym53c8xx drivers to default initramfs 765 | - fixes from johnp for FC6 support in the creator 766 | - fix iso-to-stick to work on FC6 767 | 768 | * Tue Apr 24 2007 Jeremy Katz - 007-1 769 | - Disable prelinking by default 770 | - Disable some things that slow down the live boot substantially 771 | - Lots of tweaks to the default package manifests 772 | - Allow setting the root password (Jeroen van Meeuwen) 773 | - Allow more specific network line setting (Mark McLoughlin) 774 | - Don't pollute the host yum cache (Mark McLoughlin) 775 | - Add support for mediachecking 776 | 777 | * Wed Apr 4 2007 Jeremy Katz - 006-1 778 | - Many fixes to error handling from Mark McLoughlin 779 | - Add the KDE config 780 | - Add support for prelinking 781 | - Fixes for installing when running from RAM or usb stick 782 | - Add sanity checking to better ensure that USB stick is bootable 783 | 784 | * Thu Mar 29 2007 Jeremy Katz - 005-3 785 | - have to use excludearch, not exclusivearch 786 | 787 | * Thu Mar 29 2007 Jeremy Katz - 005-2 788 | - exclusivearch since it only works on x86 and x86_64 for now 789 | 790 | * Wed Mar 28 2007 Jeremy Katz - 005-1 791 | - some shell quoting fixes 792 | - allow using UUID or LABEL for the fs label of a usb stick 793 | - work with ext2 formated usb stick 794 | 795 | * Mon Mar 26 2007 Jeremy Katz - 004-1 796 | - add livecd-iso-to-disk for setting up the live CD iso image onto a usb 797 | stick or similar 798 | 799 | * Fri Mar 23 2007 Jeremy Katz - 003-1 800 | - fix remaining reference to run-init 801 | 802 | * Thu Mar 22 2007 Jeremy Katz - 002-1 803 | - update for new version 804 | 805 | * Fri Dec 22 2006 David Zeuthen - 001-1%{?dist} 806 | - Initial build. 807 | 808 | -------------------------------------------------------------------------------- /livecd-tools/sources: -------------------------------------------------------------------------------- 1 | ae75be395f23865000450b9b0e687298bd053113d0b5ff3814805d2f89461f0b livecd-tools-20.6.tar.bz2 2 | -------------------------------------------------------------------------------- /rpm/.gitignore: -------------------------------------------------------------------------------- 1 | x86_64/ 2 | i686/ 3 | noarch/ 4 | -------------------------------------------------------------------------------- /rpm/SOURCES/.gitignore: -------------------------------------------------------------------------------- 1 | *.gz 2 | *.bz2 3 | *.patch 4 | *.diff 5 | *.spec 6 | *.xml 7 | -------------------------------------------------------------------------------- /rpm_verify: -------------------------------------------------------------------------------- 1 | scripts/rpm_verify -------------------------------------------------------------------------------- /scripts/expected-failure: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | ! "$@" 4 | -------------------------------------------------------------------------------- /scripts/ksparser: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import argparse 4 | 5 | from jinja2 import Environment 6 | from pykickstart.parser import * 7 | from pykickstart.version import makeVersion 8 | 9 | REPO_TEMPLATE = """ 10 | [{{ks_repo.name}}] 11 | name={{ks_repo.name}} 12 | enabled=1 13 | {%- if ks_repo.baseurl %} 14 | baseurl={{ks_repo.baseurl}} 15 | {%- endif -%} 16 | {%- if ks_repo.metalink %} 17 | metalink={{ks_repo.metalink}} 18 | {%- endif -%} 19 | {%- if ks_repo.gpgkey %} 20 | gpgcheck=1 21 | gpgkey={{ks_repo.gpgkey}} 22 | {% else %} 23 | gpgcheck=0 24 | {%- endif -%} 25 | {%- if ks_repo.ignoregroups %} 26 | enablegroups=0 27 | {% endif -%} 28 | """ 29 | 30 | 31 | def get_args(): 32 | parser = argparse.ArgumentParser() 33 | parser.add_argument( 34 | "--ks", 35 | metavar='PATH', 36 | required=True 37 | ) 38 | parser.add_argument( 39 | "--extract-repo-conf-to", 40 | metavar='PATH', 41 | required=False 42 | ) 43 | parser.add_argument( 44 | "--extract-packages-to", 45 | metavar='PATH', 46 | required=False 47 | ) 48 | return parser.parse_args() 49 | 50 | 51 | def main(): 52 | args = get_args() 53 | if args.ks: 54 | handler = makeVersion() 55 | ksparser = KickstartParser(handler) 56 | ksparser.readKickstart(args.ks) 57 | 58 | repo_content = '' 59 | 60 | if args.extract_repo_conf_to: 61 | for ks_repo in ksparser.handler.repo.repoList: 62 | repo_content += Environment().from_string(REPO_TEMPLATE).render( 63 | ks_repo=ks_repo.__dict__) 64 | 65 | try: 66 | with open(args.extract_repo_conf_to, 'w') as repo_fd: 67 | repo_fd.write(repo_content) 68 | except EnvironmentError: 69 | print("Cannot write repo file to %s" % args.extract_repo_conf_to) 70 | return 1 71 | 72 | if args.extract_packages_to: 73 | packages = [] 74 | for group in ksparser.handler.packages.groupList: 75 | packages.append('@%s' % group.name) 76 | 77 | for pkg in ksparser.handler.packages.packageList: 78 | packages.append('%s' % pkg) 79 | 80 | # for group in ksparser.handler.packages.excludedGroupList: 81 | # packages.append('--exclude=@%s' % group.name) 82 | 83 | for pkg in ksparser.handler.packages.excludedList: 84 | packages.append('--exclude=%s' % pkg) 85 | 86 | try: 87 | with open(args.extract_packages_to, 'w') as pkgs_fd: 88 | pkgs_fd.write(' '.join(packages)) 89 | except EnvironmentError: 90 | print("Cannot write packages list to %s" % args.extract_packages_to) 91 | return 1 92 | 93 | 94 | if __name__ == '__main__': 95 | sys.exit(main()) 96 | -------------------------------------------------------------------------------- /scripts/livecd-creator-qubes: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python -tt 2 | # 3 | # livecd-creator : Creates Live CD based for Fedora. 4 | # 5 | # Copyright 2007, Red Hat Inc. 6 | # 7 | # This program is free software; you can redistribute it and/or modify 8 | # it under the terms of the GNU General Public License as published by 9 | # the Free Software Foundation; version 2 of the License. 10 | # 11 | # This program is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU Library General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with this program; if not, write to the Free Software 18 | # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 19 | 20 | import os 21 | import os.path 22 | import glob 23 | import shutil 24 | import stat 25 | import subprocess 26 | import sys 27 | import time 28 | import optparse 29 | import logging 30 | 31 | import imgcreate 32 | from imgcreate.fs import makedirs 33 | 34 | class Usage(Exception): 35 | def __init__(self, msg = None, no_error = False): 36 | Exception.__init__(self, msg, no_error) 37 | 38 | class LiveEFIImageCreator(imgcreate.LiveImageCreator): 39 | 40 | def _get_mkisofs_options(self, isodir): 41 | options = [ "-b", "isolinux/isolinux.bin", 42 | "-c", "isolinux/boot.cat", 43 | "-no-emul-boot", "-boot-info-table", 44 | "-boot-load-size", "4" ] 45 | if os.path.exists(isodir + "/isolinux/efiboot.img"): 46 | options.extend([ "-eltorito-alt-boot", 47 | "-e", "isolinux/efiboot.img", 48 | "-no-emul-boot"]) 49 | if os.path.exists(isodir + "/isolinux/macboot.img"): 50 | options.extend([ "-eltorito-alt-boot", 51 | "-e", "isolinux/macboot.img", 52 | "-no-emul-boot"]) 53 | return options 54 | 55 | def __copy_efi_files(self, isodir): 56 | """ Copy the efi files into /EFI/BOOT/ 57 | If any of them are missing, return False. 58 | requires: 59 | xen.efi 60 | gcdx64.efi 61 | vmlinuz 62 | initrd 63 | """ 64 | fail = False 65 | missing = [] 66 | # XXX: when adding multiple kernel support, vmlinuz and initrd needs to 67 | # be suffixed with index 68 | files = [("/boot/efi/EFI/*/shim.efi", "/EFI/BOOT/BOOT%s.efi" % (self.efiarch,)), 69 | ("/boot/efi/EFI/*/gcd*.efi", "/EFI/BOOT/grubx64.efi"), 70 | ("/boot/efi/EFI/*/xen-*.efi", "/EFI/BOOT/xen.efi"), 71 | ("/boot/efi/EFI/*/vmlinuz", "/EFI/BOOT/vmlinuz"), 72 | ("/boot/efi/EFI/*/initrd-small.img", "/EFI/BOOT/initrd"), 73 | ("/boot/efi/EFI/*/fonts/unicode.pf2", "/EFI/BOOT/fonts/"), 74 | ] 75 | makedirs(isodir+"/EFI/BOOT/fonts/") 76 | for src, dest in files: 77 | src_glob = glob.glob(self._instroot+src) 78 | if not src_glob: 79 | missing.append("Missing EFI file (%s)" % (src,)) 80 | fail = True 81 | else: 82 | shutil.copy(src_glob[0], isodir+dest) 83 | map(logging.error, missing) 84 | return fail 85 | 86 | 87 | def __get_xen_efi_image_stanza(self, **args): 88 | if self._isDracut: 89 | args["rootlabel"] = "live:LABEL=%(fslabel)s" % args 90 | else: 91 | args["rootlabel"] = "CDLABEL=%(fslabel)s" % args 92 | return """[%(name)s%(index)s] 93 | kernel=vmlinuz%(index)s root=%(rootlabel)s %(liveargs)s %(extra)s 94 | ramdisk=initrd%(index)s 95 | 96 | """ %args 97 | 98 | 99 | def __get_efi_image_stanza(self, **args): 100 | return """menuentry '%(long)s' --class qubes --class gnu-linux --class gnu --class os { 101 | chainloader /efi/boot/xen.efi placeholder %(name)s%(index)s 102 | } 103 | """ %args 104 | 105 | def __get_efi_image_stanzas(self, isodir, name): 106 | # FIXME: this only supports one kernel right now... 107 | 108 | kernel_options = self._get_kernel_options() 109 | checkisomd5 = self._has_checkisomd5() 110 | 111 | cfg = "" 112 | 113 | for index in range(0, 9): 114 | # only one supported anyway, so simply drop the suffix 115 | index = "" 116 | cfg += self.__get_efi_image_stanza(long = "Start " + self.product, 117 | index = index, name = "normal") 118 | if checkisomd5: 119 | cfg += self.__get_efi_image_stanza( 120 | long = "Test this media & start " + self.product, 121 | index = index, name = "check") 122 | cfg += """ 123 | submenu 'Troubleshooting -->' { 124 | """ 125 | cfg += self.__get_efi_image_stanza(long = "Start " + self.product + " in basic graphics mode", 126 | index = index, name = "basicvideo") 127 | 128 | cfg+= """} 129 | """ 130 | break 131 | 132 | return cfg 133 | 134 | def __get_xen_efi_image_stanzas(self, isodir, name): 135 | # FIXME: this only supports one kernel right now... 136 | 137 | kernel_options = self._get_kernel_options() 138 | checkisomd5 = self._has_checkisomd5() 139 | 140 | cfg = "" 141 | 142 | for index in range(0, 9): 143 | # only one supported anyway, so simply drop the suffix 144 | index = "" 145 | cfg += self.__get_xen_efi_image_stanza(fslabel = self.fslabel, 146 | liveargs = kernel_options, 147 | long = "Start " + self.product, 148 | extra = "", index = index, 149 | name = "normal") 150 | if checkisomd5: 151 | cfg += self.__get_xen_efi_image_stanza(fslabel = self.fslabel, 152 | liveargs = kernel_options, 153 | long = "Test this media & start " + self.product, 154 | extra = "rd.live.check", 155 | index = index, name = "check") 156 | cfg += self.__get_xen_efi_image_stanza(fslabel = self.fslabel, 157 | liveargs = kernel_options, 158 | long = "Start " + self.product + " in basic graphics mode", 159 | extra = "nomodeset", index = index, 160 | name = "basicvideo") 161 | 162 | break 163 | 164 | return cfg 165 | 166 | def __get_basic_xen_efi_config(self): 167 | return """ 168 | [global] 169 | default=normal 170 | """ 171 | 172 | def __get_basic_efi_config(self, **args): 173 | return """ 174 | set default="0" 175 | 176 | function load_video { 177 | insmod efi_gop 178 | insmod efi_uga 179 | insmod video_bochs 180 | insmod video_cirrus 181 | insmod all_video 182 | } 183 | 184 | load_video 185 | set gfxpayload=keep 186 | insmod gzio 187 | insmod part_gpt 188 | insmod ext2 189 | 190 | set timeout=%(timeout)d 191 | ### END /etc/grub.d/00_header ### 192 | 193 | # do not use 'search' - root should be already set based on grub.efi location 194 | 195 | ### BEGIN /etc/grub.d/10_linux ### 196 | """ %args 197 | 198 | def _configure_efi_bootloader(self, isodir): 199 | """Set up the configuration for an EFI bootloader""" 200 | if self.__copy_efi_files(isodir): 201 | shutil.rmtree(isodir + "/EFI") 202 | logging.warn("Failed to copy EFI files, no EFI Support will be included.") 203 | return 204 | 205 | cfg = self.__get_basic_efi_config(isolabel = self.fslabel, 206 | timeout = self._timeout) 207 | cfg += self.__get_efi_image_stanzas(isodir, self.name) 208 | 209 | xen_cfg = self.__get_basic_xen_efi_config() 210 | xen_cfg += self.__get_xen_efi_image_stanzas(isodir, self.name) 211 | 212 | cfgf = open(isodir + "/EFI/BOOT/grub.cfg", "w") 213 | cfgf.write(cfg) 214 | cfgf.close() 215 | 216 | xen_cfgf = open(isodir + "/EFI/BOOT/xen.cfg", "w") 217 | xen_cfgf.write(xen_cfg) 218 | xen_cfgf.close() 219 | 220 | def _generate_efiboot(self, isodir): 221 | """Generate EFI boot images.""" 222 | if not glob.glob(self._instroot+"/boot/efi/EFI/*/xen-*.efi"): 223 | logging.error("Missing xen-*.efi, skipping efiboot.img creation.") 224 | return 225 | 226 | subprocess.call(["mkefiboot", "--label", "QUBESEFI", isodir + "/EFI/BOOT", 227 | isodir + "/isolinux/efiboot.img"]) 228 | # FIXME: replace icon 229 | # FIXME: this is broken for many reasons: 230 | # - mkefiboot generates unnecessary big image (about 4 times bigger 231 | # than required) - the bug is in mkmacboot function: 232 | # size = estimate_size(bootdir, graft=graft) * 2 233 | # ^^^^^^^^^^^^^^^^^^^^ already counted twice 234 | # - mkefiboot -a assumes that the loader is grub.efi 235 | # - it isn't clear whether xen.efi would even work on Apple 236 | subprocess.call(["mkefiboot", "-a", isodir + "/EFI/BOOT", 237 | isodir + "/isolinux/macboot.img", "-l", self.product, 238 | "-n", "/usr/share/pixmaps/bootloader/fedora-media.vol", 239 | "-i", "/usr/share/pixmaps/bootloader/fedora.icns", 240 | "-p", self.product]) 241 | 242 | 243 | def parse_options(args): 244 | parser = optparse.OptionParser() 245 | 246 | imgopt = optparse.OptionGroup(parser, "Image options", 247 | "These options define the created image.") 248 | imgopt.add_option("-c", "--config", type="string", dest="kscfg", 249 | help="Path or url to kickstart config file") 250 | imgopt.add_option("-b", "--base-on", type="string", dest="base_on", 251 | help="Add packages to an existing live CD iso9660 image.") 252 | imgopt.add_option("-f", "--fslabel", type="string", dest="fslabel", 253 | help="File system label (default based on config name)") 254 | imgopt.add_option("", "--title", type="string", dest="title", 255 | help="Title used by syslinux.cfg file"), 256 | imgopt.add_option("", "--product", type="string", dest="product", 257 | help="Product name used in syslinux.cfg boot stanzas and countdown"), 258 | # Provided for img-create compatibility 259 | imgopt.add_option("-n", "--name", type="string", dest="fslabel", 260 | help=optparse.SUPPRESS_HELP) 261 | imgopt.add_option("-p", "--plugins", action="store_true", dest="plugins", 262 | help="Use yum plugins during image creation", 263 | default=False) 264 | imgopt.add_option("", "--image-type", type="string", dest="image_type", 265 | help=optparse.SUPPRESS_HELP) 266 | imgopt.add_option("", "--compression-type", type="string", dest="compress_type", 267 | help="Compression type recognized by mksquashfs " 268 | "(default xz needs a 2.6.38+ kernel, gzip works " 269 | "with all kernels, lzo needs a 2.6.36+ kernel, lzma " 270 | "needs custom kernel.) Set to 'None' to force read " 271 | "from base_on.", 272 | default="xz") 273 | imgopt.add_option("", "--releasever", type="string", dest="releasever", 274 | default=None, 275 | help="Value to substitute for $releasever in kickstart repo urls") 276 | parser.add_option_group(imgopt) 277 | 278 | # options related to the config of your system 279 | sysopt = optparse.OptionGroup(parser, "System directory options", 280 | "These options define directories used on your system for creating the live image") 281 | sysopt.add_option("-t", "--tmpdir", type="string", 282 | dest="tmpdir", default="/var/tmp", 283 | help="Temporary directory to use (default: /var/tmp)") 284 | sysopt.add_option("", "--cache", type="string", 285 | dest="cachedir", default=None, 286 | help="Cache directory to use (default: private cache") 287 | sysopt.add_option("", "--cacheonly", action="store_true", 288 | dest="cacheonly", default=False, 289 | help="Work offline from cache, use together with --cache (default: False)") 290 | sysopt.add_option("", "--nocleanup", action="store_true", 291 | dest="nocleanup", default=False, 292 | help="Skip cleanup of temporary files") 293 | 294 | parser.add_option_group(sysopt) 295 | 296 | imgcreate.setup_logging(parser) 297 | 298 | # debug options not recommended for "production" images 299 | # Start a shell in the chroot for post-configuration. 300 | parser.add_option("-l", "--shell", action="store_true", dest="give_shell", 301 | help=optparse.SUPPRESS_HELP) 302 | # Don't compress the image. 303 | parser.add_option("-s", "--skip-compression", action="store_true", dest="skip_compression", 304 | help=optparse.SUPPRESS_HELP) 305 | parser.add_option("", "--skip-minimize", action="store_true", dest="skip_minimize", 306 | help=optparse.SUPPRESS_HELP) 307 | 308 | (options, args) = parser.parse_args() 309 | 310 | # Pretend to be a image-creator if called with that name 311 | if not options.image_type: 312 | if sys.argv[0].endswith('image-creator'): 313 | options.image_type = 'image' 314 | else: 315 | options.image_type = 'livecd' 316 | if options.image_type not in ('livecd', 'image'): 317 | raise Usage("'%s' is not a recognized image type" % options.image_type) 318 | 319 | # image-create compatibility: Last argument is kickstart file 320 | if len(args) == 1: 321 | options.kscfg = args.pop() 322 | if len(args): 323 | raise Usage("Extra arguments given") 324 | 325 | if not options.kscfg or not os.path.exists(options.kscfg): 326 | raise Usage("Kickstart file must be provided") 327 | if options.base_on and not os.path.isfile(options.base_on): 328 | raise Usage("Image file '%s' does not exist" %(options.base_on,)) 329 | if options.image_type == 'livecd': 330 | if options.fslabel and len(options.fslabel) > imgcreate.FSLABEL_MAXLEN: 331 | raise Usage("CD labels are limited to 32 characters") 332 | if options.fslabel and options.fslabel.find(" ") != -1: 333 | raise Usage("CD labels cannot contain spaces.") 334 | 335 | return options 336 | 337 | def main(): 338 | try: 339 | options = parse_options(sys.argv[1:]) 340 | except Usage, (msg, no_error): 341 | if no_error: 342 | out = sys.stdout 343 | ret = 0 344 | else: 345 | out = sys.stderr 346 | ret = 2 347 | if msg: 348 | print >> out, msg 349 | return ret 350 | 351 | if os.geteuid () != 0: 352 | print >> sys.stderr, "You must run %s as root" % sys.argv[0] 353 | return 1 354 | 355 | if options.fslabel: 356 | fslabel = options.fslabel 357 | name = fslabel 358 | else: 359 | name = imgcreate.build_name(options.kscfg, options.image_type + "-") 360 | 361 | fslabel = imgcreate.build_name(options.kscfg, 362 | options.image_type + "-", 363 | maxlen = imgcreate.FSLABEL_MAXLEN, 364 | suffix = "%s-%s" %(os.uname()[4], time.strftime("%Y%m%d%H%M"))) 365 | 366 | logging.info("Using label '%s' and name '%s'" % (fslabel, name)) 367 | 368 | if options.title: 369 | title = options.title 370 | else: 371 | try: 372 | title = " ".join(name.split("-")[:2]) 373 | title = title.title() 374 | except: 375 | title = "Linux" 376 | if options.product: 377 | product = options.product 378 | else: 379 | try: 380 | product = " ".join(name.split("-")[:2]) 381 | product = product.title() 382 | except: 383 | product = "Linux" 384 | logging.info("Using title '%s' and product '%s'" % (title, product)) 385 | 386 | ks = imgcreate.read_kickstart(options.kscfg) 387 | if not ks.handler.repo.seen: 388 | print >> sys.stderr, "Kickstart (%s) must have at least one repository." % (options.kscfg) 389 | return 1 390 | 391 | try: 392 | if options.image_type == 'livecd': 393 | creator = LiveEFIImageCreator(ks, name, 394 | fslabel=fslabel, 395 | releasever=options.releasever, 396 | tmpdir=os.path.abspath(options.tmpdir), 397 | useplugins=options.plugins, 398 | title=title, product=product, 399 | cacheonly=options.cacheonly, 400 | docleanup=not options.nocleanup) 401 | elif options.image_type == 'image': 402 | creator = imgcreate.LoopImageCreator(ks, name, 403 | fslabel=fslabel, 404 | releasever=options.releasever, 405 | useplugins=options.plugins, 406 | tmpdir=os.path.abspath(options.tmpdir), 407 | cacheonly=options.cacheonly, 408 | docleanup=not options.nocleanup) 409 | except imgcreate.CreatorError as e: 410 | logging.error(u"%s creation failed: %s", options.image_type, e) 411 | return 1 412 | 413 | creator.compress_type = options.compress_type 414 | creator.skip_compression = options.skip_compression 415 | creator.skip_minimize = options.skip_minimize 416 | if options.cachedir: 417 | options.cachedir = os.path.abspath(options.cachedir) 418 | 419 | try: 420 | creator.mount(options.base_on, options.cachedir) 421 | 422 | # fix /dev 423 | os.mknod(os.path.join( 424 | creator._instroot, 'dev/loop-control'), 0666 | stat.S_IFBLK, os.makedev(10, 237)) 425 | for i in range(8): 426 | os.mknod(os.path.join(creator._instroot, 'dev/loop{}'.format(i)), 427 | 0666 | stat.S_IFBLK, os.makedev(7, i)) 428 | 429 | creator.install() 430 | creator.configure() 431 | if options.give_shell: 432 | print "Launching shell. Exit to continue." 433 | print "----------------------------------" 434 | creator.launch_shell() 435 | creator.unmount() 436 | creator.package() 437 | except imgcreate.CreatorError, e: 438 | logging.error(u"Error creating Live CD : %s" % e) 439 | return 1 440 | finally: 441 | creator.cleanup() 442 | 443 | return 0 444 | 445 | if __name__ == "__main__": 446 | sys.exit(main()) 447 | -------------------------------------------------------------------------------- /scripts/rpm_verify: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | verify_rpm() { 4 | RPM=$1 5 | 6 | if ! [ -f $RPM ]; then 7 | echo -n "No such file... " 8 | return 9 | fi 10 | 11 | if ! rpm --checksig $RPM > /dev/null; then 12 | echo "Wrong PGP signature on $RPM!" 13 | exit 1 14 | fi 15 | 16 | # Even if rpm returns success (ret = 0) that doesn't 17 | # mean that the rpm has been signed! It might simply 18 | # have no PGP signature at all. Yes, stupidity... 19 | 20 | if ! rpm --checksig $RPM | grep ' pgp ' > /dev/null ; then 21 | if [ "$NO_SIGN" == "1" ] ; then 22 | # When signing is disabed in qubes-builder 23 | # This is used to build unsigned ISO 24 | # This should only be used for testing builds 25 | return 0 26 | fi 27 | 28 | echo "No PGP signature found!" 29 | 30 | exit 2 31 | fi 32 | } 33 | 34 | 35 | if [ $# -lt 1 ]; then 36 | echo "Usage: $0 " 37 | exit 1 38 | fi 39 | 40 | if [ -w /var/lib/rpm ]; then 41 | # Make sure that the right Qubes release key is imported (in chroot) 42 | rpm --import `dirname $0`/../qubes-release/RPM-GPG-KEY-qubes-*-primary 43 | # installation image includes community templates too 44 | rpm --import `dirname $0`/../qubes-release/RPM-GPG-KEY-qubes-*-templates-community 45 | fi 46 | 47 | for FILE in "$@"; do 48 | verify_rpm $FILE || exit 1 49 | done 50 | 51 | -------------------------------------------------------------------------------- /scripts/tmplparser: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | import argparse 4 | import pathlib 5 | import re 6 | import sys 7 | import tempfile 8 | 9 | import dnf 10 | import dnf.exceptions 11 | import dnf.subject 12 | 13 | from pylorax.dnfbase import get_dnf_base_object 14 | from pylorax.ltmpl import LoraxTemplate 15 | 16 | variables = { 17 | "arch": { 18 | "buildarch": "x86_64", 19 | "basearch": "x86_64", 20 | "libdir": "lib64", 21 | "bcj": "x86", 22 | }, 23 | "product": { 24 | "name": "qubes os", 25 | "version": "r4.1", 26 | "release": "Qubes OS r4.1", 27 | "variant": "qubes", 28 | "bugurl": "your distribution provided bug reporting tool", 29 | "isfinal": True, 30 | }, 31 | "root": "/tmp/work/work/x86_64/installtree", 32 | "basearch": "x86_64", 33 | "libdir": "lib64", 34 | } 35 | 36 | # From https://github.com/weldr/lorax/blob/77226abf3a34a5aa378ee64a78425ccfdbb4fda6/src/pylorax/ltmpl.py#L190 37 | def find_pkgspec(dbo, pkg_spec): 38 | if not any(g for g in ["=", "<", ">", "!"] if g in pkg_spec): 39 | query = dnf.subject.Subject(pkg_spec).get_best_query(dbo.sack) 40 | else: 41 | pcv = re.split(r"([!<>=]+)", pkg_spec) 42 | if not pcv[0]: 43 | raise RuntimeError("Missing package name") 44 | if not pcv[-1]: 45 | raise RuntimeError("Missing version") 46 | if len(pcv) != 3: 47 | raise RuntimeError("Too many comparisons") 48 | 49 | query = dnf.subject.Subject(pcv[0]).get_best_query(dbo.sack) 50 | 51 | # Parse the comparison operators 52 | if pcv[1] == "=" or pcv[1] == "==": 53 | query.filterm(evr__eq=pcv[2]) 54 | elif pcv[1] == "!=" or pcv[1] == "<>": 55 | query.filterm(evr__neq=pcv[2]) 56 | elif pcv[1] == ">": 57 | query.filterm(evr__gt=pcv[2]) 58 | elif pcv[1] == ">=" or pcv[1] == "=>": 59 | query.filterm(evr__gte=pcv[2]) 60 | elif pcv[1] == "<": 61 | query.filterm(evr__lt=pcv[2]) 62 | elif pcv[1] == "<=" or pcv[1] == "=<": 63 | query.filterm(evr__lte=pcv[2]) 64 | 65 | query.filterm(latest=True) 66 | return [pkg.name for pkg in query.apply()] 67 | 68 | 69 | def parse_installpkg(pkgs, dbo=None): 70 | if pkgs[0] == "--optional": 71 | pkgs = pkgs[1:] 72 | elif pkgs[0] == "--required": 73 | pkgs = pkgs[1:] 74 | 75 | excludes = [] 76 | while "--except" in pkgs: 77 | idx = pkgs.index("--except") 78 | if len(pkgs) == idx + 1: 79 | raise ValueError("installpkg needs an argument after --except") 80 | excludes.append(f"--exclude={pkgs[idx + 1]}") 81 | pkgs = pkgs[:idx] + pkgs[idx + 2 :] 82 | 83 | if dbo: 84 | packages = [] 85 | for pkg_spec in pkgs: 86 | print(f"requested: {pkg_spec}") 87 | pkgnames = find_pkgspec(dbo, pkg_spec) 88 | if not pkgnames: 89 | print(f"no package matched: {pkg_spec}", file=sys.stderr) 90 | continue 91 | packages += pkgnames 92 | else: 93 | packages = pkgs 94 | 95 | return packages + excludes 96 | 97 | 98 | def get_args(): 99 | parser = argparse.ArgumentParser() 100 | parser.add_argument("--repo", metavar="PATH", required=True, nargs="+") 101 | parser.add_argument( 102 | "--check", 103 | required=False, 104 | action="store_true", 105 | help="Check that requested packages exist. It uses DNF api and needs network.", 106 | ) 107 | parser.add_argument( 108 | "--tmpl", 109 | metavar="PATH", 110 | default="/usr/share/lorax-qubes/runtime-install.tmpl", 111 | ) 112 | parser.add_argument("--extract-packages-to", metavar="PATH", required=False) 113 | return parser.parse_args() 114 | 115 | 116 | def main(): 117 | args = get_args() 118 | 119 | templates = LoraxTemplate() 120 | result = templates.parse(args.tmpl, variables) 121 | print(f"Parsing Lorax template file: {args.tmpl}") 122 | with tempfile.TemporaryDirectory() as tmpdir: 123 | basedir = pathlib.Path(tmpdir) 124 | installroot = basedir / "installroot" 125 | tempdir = basedir / "tmp" 126 | cachedir = basedir / "cache" 127 | logdir = basedir / "log" 128 | 129 | installroot.mkdir(parents=True) 130 | tempdir.mkdir(parents=True) 131 | cachedir.mkdir(parents=True) 132 | logdir.mkdir(parents=True) 133 | 134 | dnfbase = None 135 | if args.check: 136 | dnfbase = get_dnf_base_object( 137 | installroot=str(installroot), 138 | sources=[], 139 | repos=args.repo, 140 | tempdir=str(tempdir), 141 | cachedir=str(cachedir), 142 | logdir=str(logdir), 143 | enablerepos=[], 144 | disablerepos=[], 145 | ) 146 | 147 | if dnfbase is None: 148 | print("Unable to create the dnf base object", file=sys.stderr) 149 | return 1 150 | 151 | packages = [] 152 | for r in result: 153 | if r[0] == "installpkg": 154 | packages += parse_installpkg(pkgs=r[1:], dbo=dnfbase) 155 | 156 | if args.extract_packages_to: 157 | try: 158 | with open(args.extract_packages_to, "w") as pkgs_fd: 159 | pkgs_fd.write(" ".join(packages)) 160 | except EnvironmentError: 161 | print( 162 | f"Cannot write packages list to {args.extract_packages_to}", 163 | file=sys.stderr, 164 | ) 165 | return 1 166 | else: 167 | print(" ".join(packages)) 168 | 169 | 170 | if __name__ == "__main__": 171 | sys.exit(main()) 172 | -------------------------------------------------------------------------------- /yum/clean_repos.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | createrepo=$(which createrepo_c createrepo 2>/dev/null |head -1) 4 | if [ -z "$createrepo" ]; then 5 | echo "ERROR: createrepo not found" 6 | exit 1 7 | fi 8 | 9 | for repo in dom0-updates installer qubes-dom0 ; do 10 | echo "---> Cleaning up repo: $repo..." 11 | rm -f $repo/rpm/*.rpm 12 | rm -f $repo/repodata/* 13 | $createrepo -q $repo 14 | done 15 | 16 | 17 | -------------------------------------------------------------------------------- /yum/dnf.conf: -------------------------------------------------------------------------------- 1 | [main] 2 | gpgcheck=True 3 | installonly_limit=3 4 | clean_requirements_on_remove=True 5 | best=False 6 | skip_if_unavailable=True 7 | -------------------------------------------------------------------------------- /yum/dom0-updates/repodata/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | -------------------------------------------------------------------------------- /yum/dom0-updates/rpm/.gitignore: -------------------------------------------------------------------------------- 1 | *.rpm 2 | -------------------------------------------------------------------------------- /yum/installer/repodata/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | -------------------------------------------------------------------------------- /yum/installer/rpm/.gitignore: -------------------------------------------------------------------------------- 1 | *.rpm 2 | -------------------------------------------------------------------------------- /yum/qubes-dom0/repodata/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | -------------------------------------------------------------------------------- /yum/qubes-dom0/rpm/.gitignore: -------------------------------------------------------------------------------- 1 | *.rpm 2 | *.buildinfo 3 | -------------------------------------------------------------------------------- /yum/repos.txt: -------------------------------------------------------------------------------- 1 | dom0-update <-- select update packages from Dom0, such as new Xorg drivers 2 | (see dom0-updates repo) 3 | qubes-dom0 <-- all qubes-related packages 4 | installer <-- packages needed for anaconda 5 | -------------------------------------------------------------------------------- /yum/update_repo.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | createrepo=$(which createrepo_c createrepo 2>/dev/null |head -1) 4 | 5 | # $1 -- path to rpm dir 6 | check_repo() 7 | { 8 | if ! ../scripts/rpm_verify $1/*.rpm ; then 9 | echo "ERROR: There are unsigned RPM packages in $1 repo:" 10 | echo "---------------------------------------" 11 | rpm --checksig $1/*.rpm | grep -v pgp 12 | echo "---------------------------------------" 13 | echo "Sign them before proceeding." 14 | exit 1 15 | fi 16 | } 17 | 18 | 19 | update_repo() 20 | { 21 | $createrepo -q -g ../../conf/comps-dom0.xml --update $1 22 | } 23 | 24 | 25 | for repo in dom0-updates installer qubes-dom0 ; do 26 | echo "---> Processing repo: $repo..." 27 | ls $repo/rpm/*.rpm 2>/dev/null 1>&2 28 | if [ $? -ne 0 ]; then 29 | echo "Empty repo, skipping..." 30 | continue 31 | fi 32 | check_repo $repo/rpm -o $repo/repodata 33 | update_repo $repo -o $repo/repodata 34 | done 35 | 36 | #yum clean metadata 37 | --------------------------------------------------------------------------------