(c) 2010 Invisible Things Lab Authors: ========= Joanna Rutkowska <joanna@invisiblethingslab.com> Rafal Wojtczuk <rafal@invisiblethingslab.com>pull/1/head v1.0.0
commit
b5e395d385
@ -0,0 +1,39 @@
|
||||
The Template Builder
|
||||
======================
|
||||
|
||||
(applies also to the netvm builder)
|
||||
|
||||
1) get a clean image of a Linux install (e.g. by using virt-install) NOTE: We
|
||||
assume that the image will have a two-partition layout:
|
||||
|
||||
img1 <--- the root fs (/)
|
||||
img2 <--- the swap
|
||||
|
||||
2) update symlinks in rpms_to_install so that they point to the current version
|
||||
of rpms to install
|
||||
|
||||
3) Now, you can "qubeize" the image. This must be done as root. E.g.:
|
||||
|
||||
# ./qubeize_image clean_images/some_image.img f12-x64-compact
|
||||
|
||||
4) Make sure the symlinks in vm_kernels point to correct kernel and initramfs
|
||||
files.
|
||||
|
||||
4a) In order to prepare a patched initramfs file, use the
|
||||
patch_appvm_initramfs.sh program that is installed as part of
|
||||
qubes-core-dom0.rpm:
|
||||
|
||||
# /usr/lib/qubes/patch_appvm_initramfs.sh \
|
||||
<original_initrafms> \
|
||||
<filename_for_patched_initramfs> \
|
||||
/abs_path/vm-initramfs-patches/qubes_cow_setup.sh
|
||||
|
||||
|
||||
4b) Manually adjust the appmenus
|
||||
|
||||
5) Finally, build the Template RPM (do it as normal user, not root), e.g.:
|
||||
|
||||
$./build_rpm <name>
|
||||
|
||||
The resulting rpm is stored in rpm/noarch directory.
|
||||
|
@ -0,0 +1,2 @@
|
||||
#!/bin/sh
|
||||
cp ../rpms_3rd_party/libflashplayer.so mnt/usr/lib64/mozilla/plugins/
|
@ -0,0 +1,26 @@
|
||||
#!/bin/sh
|
||||
SRC=$1
|
||||
DSTDIR=$2
|
||||
DST=$DSTDIR/$(basename $SRC)
|
||||
|
||||
# Do not copy KDE/GNOME specific apps, e.g. "Home", "Find files", etc
|
||||
if grep -q OnlyShowIn $SRC ; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if ! grep -q ^Name $SRC ; then
|
||||
echo "WARNING: app $SRC doesn't have Name keyword, skipping..."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
sed -e "s/^\(Name.*\)=\(.*\)/\1=%VMNAME%: \2/" \
|
||||
-e "s/^\(GenericName.*\)=\(.*\)/\1=%VMNAME%: \2/" \
|
||||
-e "s/^Exec=\(.*\)/Exec=qvm-run -q --tray -a %VMNAME% \'\1\'/" \
|
||||
<$SRC | \
|
||||
grep -v "^Mime" | \
|
||||
grep -v "^Icon" | \
|
||||
grep -v "^TryExec" | \
|
||||
grep -v "^Startup" >$DST
|
||||
|
||||
echo X-Qubes-VmName=%VMNAME% >> $DST
|
||||
echo Icon=%VMDIR%/icon.png >> $DST
|
@ -0,0 +1,17 @@
|
||||
#!/bin/sh
|
||||
SRC=$1
|
||||
DSTDIR=$2
|
||||
DST=$DSTDIR/$(basename $SRC)
|
||||
|
||||
sed -e "s/^\(Name.*\)=\(.*\)/\1=%VMNAME%: \2/" \
|
||||
-e "s/^\(GenericName.*\)=\(.*\)/\1=%VMNAME%: \2/" \
|
||||
-e "s/^Exec=\(.*\)/Exec=qvm-run -q --tray -a --user=root %VMNAME% \"\1\"/" \
|
||||
<$SRC | \
|
||||
grep -v "^Mime" | \
|
||||
grep -v "^TryExec" | \
|
||||
grep -v "^Startup" >$DST
|
||||
|
||||
#echo "Categories=%VMNAME%" >> $DST
|
||||
|
||||
echo X-Qubes-VmName=%VMNAME% >> $DST
|
||||
echo Icon=%VMDIR%/icon.png >> $DST
|
@ -0,0 +1,13 @@
|
||||
#!/bin/sh
|
||||
SRC=$1
|
||||
DSTDIR=$2
|
||||
VMNAME=$3
|
||||
VMDIR=$4
|
||||
|
||||
DST=$DSTDIR/$VMNAME-$(basename $SRC)
|
||||
|
||||
sed -e "s/%VMNAME%/$VMNAME/" \
|
||||
-e "s %VMDIR% $VMDIR " \
|
||||
<$SRC >$DST
|
||||
|
||||
|
@ -0,0 +1,11 @@
|
||||
#!/bin/sh
|
||||
SRC=$1
|
||||
DST=$2
|
||||
VMNAME=$3
|
||||
VMDIR=$4
|
||||
|
||||
sed -e "s/%VMNAME%/$VMNAME/" \
|
||||
-e "s %VMDIR% $VMDIR " \
|
||||
<$SRC >$DST
|
||||
|
||||
|
@ -0,0 +1,5 @@
|
||||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Type=Directory
|
||||
Name=%VMNAME% (NetVM)
|
||||
Icon=/usr/share/qubes/icons/netvm.png
|
@ -0,0 +1,5 @@
|
||||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Type=Directory
|
||||
Name=%VMNAME% (TemplateVM)
|
||||
Icon=/usr/share/qubes/icons/template.png
|
@ -0,0 +1,5 @@
|
||||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Type=Directory
|
||||
Name=%VMNAME% (VM)
|
||||
Icon=%VMDIR%/icon.png
|
@ -0,0 +1,9 @@
|
||||
#!/bin/sh
|
||||
NAME=$1
|
||||
|
||||
if [ x$NAME = x ] ; then
|
||||
echo "usage $0 <netvm_name>"
|
||||
exit
|
||||
fi
|
||||
|
||||
rpmbuild --sign --target noarch --define "netvm_name $NAME" -bb netvm.spec
|
@ -0,0 +1,9 @@
|
||||
#!/bin/sh
|
||||
NAME=$1
|
||||
|
||||
if [ x$NAME = x ] ; then
|
||||
echo "usage $0 <template_name>"
|
||||
exit
|
||||
fi
|
||||
|
||||
rpmbuild --sign --target noarch --define "template_name $NAME" -bb templates.spec
|
@ -0,0 +1 @@
|
||||
*
|
@ -0,0 +1,15 @@
|
||||
#!/bin/sh
|
||||
SRCDIR=$1
|
||||
VMNAME=$2
|
||||
VMDIR=$3
|
||||
APPSDIR=$4
|
||||
|
||||
if [ $# != 4 ]; then
|
||||
echo "usage: $0 <apps_templates_dir> <vmname> <vmdir> <apps_dir>"
|
||||
exit
|
||||
fi
|
||||
mkdir -p $APPSDIR
|
||||
|
||||
find $SRCDIR -name "*.desktop" -exec appmenus/convert_apptemplate2vm.sh {} $APPSDIR $VMNAME $VMDIR \;
|
||||
|
||||
appmenus/convert_dirtemplate2vm.sh appmenus/qubes-netvm.directory.template $APPSDIR/$VMNAME-vm.directory $VMNAME $VMDIR
|
@ -0,0 +1,15 @@
|
||||
#!/bin/sh
|
||||
SRCDIR=$1
|
||||
VMNAME=$2
|
||||
VMDIR=$3
|
||||
APPSDIR=$4
|
||||
|
||||
if [ $# != 4 ]; then
|
||||
echo "usage: $0 <apps_templates_dir> <vmname> <vmdir> <apps_dir>"
|
||||
exit
|
||||
fi
|
||||
mkdir -p $APPSDIR
|
||||
|
||||
find $SRCDIR -name "*.desktop" -exec appmenus/convert_apptemplate2vm.sh {} $APPSDIR $VMNAME $VMDIR \;
|
||||
|
||||
appmenus/convert_dirtemplate2vm.sh appmenus/qubes-templatevm.directory.template $APPSDIR/$VMNAME-vm.directory $VMNAME $VMDIR
|
@ -0,0 +1,14 @@
|
||||
#!/bin/sh
|
||||
APPSORIG=$1
|
||||
APPSTMPL=$2
|
||||
|
||||
if [ $# != 2 ]; then
|
||||
echo "usage $0 <apps_orig_dir> <apps_templ_dir>"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
rm -f $APPSTMPL/*
|
||||
mkdir -p $APPSTMPL
|
||||
find $APPSORIG -name "*.desktop" -exec appmenus/convert_app2template.sh {} $APPSTMPL \;
|
||||
|
||||
cp appmenus/qubes-vm.directory.template $APPSTMPL
|
@ -0,0 +1,14 @@
|
||||
#!/bin/sh
|
||||
APPSORIG=$1
|
||||
APPSTMPL=$2
|
||||
|
||||
if [ $# != 2 ]; then
|
||||
echo "usage $0 <apps_orig_dir> <apps_templ_dir>"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
#rm -f $APPSTMPL/*
|
||||
mkdir -p $APPSTMPL
|
||||
find $APPSORIG -name "*.desktop" -exec appmenus/convert_app2template_for_netvm.sh {} $APPSTMPL \;
|
||||
|
||||
cp appmenus/qubes-vm.directory.template $APPSTMPL
|
@ -0,0 +1,42 @@
|
||||
#!/bin/sh
|
||||
ROOTIMG=$1
|
||||
|
||||
if [ x$ROOTIMG = x ] ; then
|
||||
echo "usage: $0 <root.img>"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# We assume that the input root.img has the following structure:
|
||||
|
||||
# /dev/sda1 <--- root fs
|
||||
# /dev/sda2 <--- swap
|
||||
|
||||
# and that the first partition starts at offset 63*512 from the begging of the image file
|
||||
OFFSET=$((63*512))
|
||||
|
||||
mkdir -p mnt
|
||||
|
||||
MNTDIR=$(pwd)/mnt
|
||||
|
||||
LOOP=$(/sbin/losetup -f -s -o $OFFSET $ROOTIMG)
|
||||
|
||||
if [ x$LOOP = x ] ; then
|
||||
echo "Cannot setup loopback device for the $ROOTIMG file -- perhaps a permissions problem?"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mount $LOOP $MNTDIR || {
|
||||
echo "Cannot mount $LOOP to $MNTDIR"
|
||||
/sbin/losetup -d $LOOP
|
||||
exit 2
|
||||
}
|
||||
|
||||
# generate unmount script
|
||||
BASENAE=$(basename $ROOTIMG)
|
||||
UNMOUNT_SCRIPT=$(echo unmount_root-$BASENAE.sh)
|
||||
echo "#!/bin/sh" > $UNMOUNT_SCRIPT
|
||||
echo "umount $MNTDIR || { echo \"Cannot unmount!\"; exit 1; }" >> $UNMOUNT_SCRIPT
|
||||
echo "/sbin/losetup -d $LOOP || { echo \"Cannot delete the loop device\"; exit 1; }" >> $UNMOUNT_SCRIPT
|
||||
echo "rm -f $UNMOUNT_SCRIPT" >> $UNMOUNT_SCRIPT
|
||||
chmod +x $UNMOUNT_SCRIPT
|
||||
|
@ -0,0 +1,108 @@
|
||||
#
|
||||
# This SPEC is for bulding RPM packages that contain complete Qubes NetVM files
|
||||
# This includes the VM's root image, patched with all qubes rpms, etc
|
||||
#
|
||||
|
||||
%{!?version: %define version %(cat version_netvm)}
|
||||
|
||||
Name: qubes-servicevm-%{netvm_name}
|
||||
Version: %{version}
|
||||
Release: 1
|
||||
Summary: Qubes NetVM image for '%{netvm_name}'
|
||||
|
||||
License: GPL
|
||||
URL: http://www.qubes-os.org
|
||||
Source: .
|
||||
|
||||
Requires: qubes-core-dom0 xdg-utils
|
||||
|
||||
%define _builddir %(pwd)
|
||||
%define _rpmdir %(pwd)/rpm
|
||||
%define dest_dir /var/lib/qubes/servicevms/%{netvm_name}
|
||||
|
||||
%description
|
||||
Qubes NetVM image for '%{netvm_name}'.
|
||||
|
||||
%build
|
||||
cd qubeized_images
|
||||
rm -f %{netvm_name}-root.img.tar
|
||||
tar --sparse -cf %{netvm_name}-root.img.tar %{netvm_name}-root.img
|
||||
cd ..
|
||||
./create_apps_for_netvm.sh netvm/apps.templates/ %{netvm_name} %{dest_dir} qubeized_images/%{netvm_name}-apps
|
||||
|
||||
%install
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
mkdir -p $RPM_BUILD_ROOT/%{dest_dir}
|
||||
ln qubeized_images/%{netvm_name}-root.img.tar $RPM_BUILD_ROOT/%{dest_dir}/root.img.tar
|
||||
touch $RPM_BUILD_ROOT/%{dest_dir}/root.img # we will create the real file in %post
|
||||
|
||||
sed -e s/%NETVMNAME%/%{netvm_name}/ < vm_conf_files/netvm.conf >\
|
||||
$RPM_BUILD_ROOT/%{dest_dir}/%{netvm_name}.conf
|
||||
|
||||
mkdir -p $RPM_BUILD_ROOT/%{dest_dir}/kernels
|
||||
cp vm_kernels/vmlinuz $RPM_BUILD_ROOT/%{dest_dir}/kernels/vmlinuz
|
||||
cp vm_kernels/initramfs $RPM_BUILD_ROOT/%{dest_dir}/kernels/initramfs
|
||||
|
||||
cp vm_initramfs_patches/qubes_cow_setup.sh $RPM_BUILD_ROOT/%{dest_dir}/kernels/qubes_cow_setup.sh
|
||||
|
||||
mkdir -p $RPM_BUILD_ROOT/%{dest_dir}/apps
|
||||
cp -r qubeized_images/%{netvm_name}-apps/* $RPM_BUILD_ROOT/%{dest_dir}/apps
|
||||
touch $RPM_BUILD_ROOT/%{dest_dir}/icon.png
|
||||
|
||||
%post
|
||||
echo "--> Processing the root.img... (this might take a while)"
|
||||
tar --sparse -xf %{dest_dir}/root.img.tar -C %{dest_dir}
|
||||
rm -f %{dest_dir}/root.img.tar
|
||||
mv %{dest_dir}/%{netvm_name}-root.img %{dest_dir}/root.img
|
||||
chown root.qubes %{dest_dir}/root.img
|
||||
chmod 0660 %{dest_dir}/root.img
|
||||
|
||||
export XDG_DATA_DIRS=/usr/share/
|
||||
if [ "$1" -gt 1 ] ; then
|
||||
# upgrading already installed template...
|
||||
echo "--> Removing previous menu shortcuts..."
|
||||
xdg-desktop-menu uninstall --mode system %{dest_dir}/apps/*.directory %{dest_dir}/apps/*.desktop
|
||||
fi
|
||||
|
||||
echo "--> Instaling menu shortcuts..."
|
||||
ln -sf /usr/share/qubes/icons/netvm.png %{dest_dir}/icon.png
|
||||
xdg-desktop-menu install --mode system %{dest_dir}/apps/*.directory %{dest_dir}/apps/*.desktop
|
||||
|
||||
echo "--> Adding to Qubes DB..."
|
||||
if [ "$1" = 1 ] ; then
|
||||
# installing for the first time
|
||||
qvm-add-netvm %{netvm_name}
|
||||
else
|
||||
qvm-remove -q --just-db %{netvm_name}
|
||||
qvm-add-netvm %{netvm_name}
|
||||
fi
|
||||
|
||||
%preun
|
||||
if [ "$1" = 0 ] ; then
|
||||
# no more packages left
|
||||
qvm-remove -q --just-db %{netvm_name}
|
||||
|
||||
# we need to have it here, because rpm -U <template>
|
||||
# apparently executes %preun of the old package *after* %post of the new packages...
|
||||
echo "--> Removing menu shortcuts..."
|
||||
export XDG_DATA_DIRS=/usr/share/
|
||||
xdg-desktop-menu uninstall --mode system %{dest_dir}/apps/*.directory %{dest_dir}/apps/*.desktop
|
||||
|
||||
fi
|
||||
|
||||
%clean
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
%files
|
||||
%defattr(660,root,qubes,770)
|
||||
%dir %{dest_dir}
|
||||
%ghost %{dest_dir}/root.img
|
||||
%{dest_dir}/root.img.tar
|
||||
%{dest_dir}/%{netvm_name}.conf
|
||||
%dir %{dest_dir}/kernels
|
||||
%{dest_dir}/kernels/vmlinuz
|
||||
%{dest_dir}/kernels/initramfs
|
||||
%{dest_dir}/kernels/qubes_cow_setup.sh
|
||||
%attr (775,root,qubes) %dir %{dest_dir}/apps
|
||||
%attr (664,root,qubes) %{dest_dir}/apps/*
|
||||
%{dest_dir}/icon.png
|
@ -0,0 +1,173 @@
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Exec=konsole
|
||||
Icon=utilities-terminal
|
||||
X-DocPath=konsole/index.html
|
||||
Terminal=false
|
||||
X-KDE-StartupNotify=true
|
||||
|
||||
Name=Konsole
|
||||
Name[af]=Konsole
|
||||
Name[ar]=كونسول
|
||||
Name[as]=Konsole
|
||||
Name[be]=Konsole
|
||||
Name[be@latin]=Konsole
|
||||
Name[bg]=Konsole
|
||||
Name[bn]=কনসোল
|
||||
Name[bn_IN]=Konsole
|
||||
Name[br]=Konsole
|
||||
Name[ca]=Konsole
|
||||
Name[ca@valencia]=Konsole
|
||||
Name[cs]=Konsole
|
||||
Name[csb]=Kònsola
|
||||
Name[cy]=Konsole
|
||||
Name[da]=Konsole
|
||||
Name[de]=Konsole
|
||||
Name[el]=Κονσόλα
|
||||
Name[en_GB]=Konsole
|
||||
Name[eo]=Konsole
|
||||
Name[es]=Konsole
|
||||
Name[et]=Konsool
|
||||
Name[eu]=Kontsola
|
||||
Name[fi]=Konsole
|
||||
Name[fr]=Konsole
|
||||
Name[fy]=Konsole
|
||||
Name[ga]=Konsole
|
||||
Name[gl]=Konsole
|
||||
Name[gu]=કોન્સોલ
|
||||
Name[he]=Konsole
|
||||
Name[hi]=कंसोल
|
||||
Name[hne]=कंसोल
|
||||
Name[hr]=Konzola
|
||||
Name[hsb]=Konsola
|
||||
Name[hu]=Konsole
|
||||
Name[is]=Skjáhermir
|
||||
Name[it]=Konsole
|
||||
Name[ja]=Konsole
|
||||
Name[ka]=კონსოლი
|
||||
Name[kk]=Konsole
|
||||
Name[km]=កុងសូល
|
||||
Name[kn]=ಕನ್ಸೋಲ್
|
||||
Name[ko]=Konsole
|
||||
Name[ku]=Konsol
|
||||
Name[lt]=Konsole
|
||||
Name[lv]=Konsole
|
||||
Name[mai]=कंसोल
|
||||
Name[mk]=Конзола
|
||||
Name[ml]=കണ്സോള്
|
||||
Name[mr]=कंसोल
|
||||
Name[ms]=Konsole
|
||||
Name[nb]=Konsole
|
||||
Name[nds]=Konsole
|
||||
Name[ne]=कन्सोल
|
||||
Name[nl]=Konsole
|
||||
Name[nn]=Konsoll
|
||||
Name[oc]=Konsole
|
||||
Name[or]=କୋଲସୋଲ
|
||||
Name[pa]=ਕਨਸੋਲ
|
||||
Name[pl]=Konsola
|
||||
Name[pt]=Konsole
|
||||
Name[pt_BR]=Konsole
|
||||
Name[ro]=Konsolă
|
||||
Name[ru]=Konsole
|
||||
Name[se]=Konsolla
|
||||
Name[si]=Konsole
|
||||
Name[sk]=Konzola
|
||||
Name[sl]=Konzola
|
||||
Name[sr]=Конзола
|
||||
Name[sr@latin]=Konsole
|
||||
Name[sv]=Konsole
|
||||
Name[ta]=கான்சோல்
|
||||
Name[te]=కాన్సోల్
|
||||
Name[tg]=Консол
|
||||
Name[th]=คอนโซล K
|
||||
Name[tr]=Konsole
|
||||
Name[uk]=Konsole
|
||||
Name[uz]=Konsole
|
||||
Name[uz@cyrillic]=Konsole
|
||||
Name[vi]=Konsole
|
||||
Name[wa]=Konsole
|
||||
Name[xh]=Konsole
|
||||
Name[x-test]=xxKonsolexx
|
||||
Name[zh_CN]=Konsole
|
||||
Name[zh_TW]=Konsole
|
||||
|
||||
GenericName=Terminal
|
||||
GenericName[af]=Terminaal
|
||||
GenericName[ar]=طرفيّة
|
||||
GenericName[as]=টাৰ্মিনেল
|
||||
GenericName[be@latin]=Terminał
|
||||
GenericName[bg]=Терминал
|
||||
GenericName[bn]=টার্মিনাল
|
||||
GenericName[bn_IN]=টার্মিন্যাল
|
||||
GenericName[ca]=Terminal
|
||||
GenericName[ca@valencia]=Terminal
|
||||
GenericName[cs]=Terminál
|
||||
GenericName[csb]=Terminal
|
||||
GenericName[da]=Terminal
|
||||
GenericName[de]=Terminal
|
||||
GenericName[el]=Τερματικό
|
||||
GenericName[en_GB]=Terminal
|
||||
GenericName[eo]=Terminalo
|
||||
GenericName[es]=Terminal
|
||||
GenericName[et]=Terminal
|
||||
GenericName[eu]=Terminala
|
||||
GenericName[fi]=Komentoikkuna
|
||||
GenericName[fr]=Terminal
|
||||
GenericName[fy]=Terminal
|
||||
GenericName[ga]=Teirminéal
|
||||
GenericName[gl]=Terminal
|
||||
GenericName[gu]=ટર્મિનલ
|
||||
GenericName[he]=מסוף
|
||||
GenericName[hi]=टर्मिनल
|
||||
GenericName[hne]=टर्मिनल
|
||||
GenericName[hr]=Terminal
|
||||
GenericName[hsb]=Terminal
|
||||
GenericName[hu]=Terminál
|
||||
GenericName[is]=Skjáhermir
|
||||
GenericName[it]=Terminale
|
||||
GenericName[ja]=ターミナル
|
||||
GenericName[kk]=Терминал
|
||||
GenericName[km]=ស្ថានីយ
|
||||
GenericName[kn]=ಆದೇಶತೆರೆ (ಟರ್ಮಿನಲ್)
|
||||
GenericName[ko]=터미널
|
||||
GenericName[ku]=Termînal
|
||||
GenericName[lt]=Terminalas
|
||||
GenericName[lv]=Terminālis
|
||||
GenericName[mai]=टर्मिनल
|
||||
GenericName[mk]=Терминал
|
||||
GenericName[ml]=ടെര്മിനല്
|
||||
GenericName[mr]=टर्मिनल
|
||||
GenericName[nb]=Terminal
|
||||
GenericName[nds]=Konsool
|
||||
GenericName[nl]=Terminal
|
||||
GenericName[nn]=Terminal
|
||||
GenericName[or]=ଟର୍ମିନାଲ
|
||||
GenericName[pa]=ਟਰਮੀਨਲ
|
||||
GenericName[pl]=Terminal
|
||||
GenericName[pt]=Terminal
|
||||
GenericName[pt_BR]=Terminal
|
||||
GenericName[ro]=Terminal
|
||||
GenericName[ru]=Терминал
|
||||
GenericName[se]=Terminal
|
||||
GenericName[si]=Terminal
|
||||
GenericName[sk]=Terminál
|
||||
GenericName[sl]=Terminal
|
||||
GenericName[sr]=Терминал
|
||||
GenericName[sr@latin]=Terminal
|
||||
GenericName[sv]=Terminal
|
||||
GenericName[ta]=முனையம்
|
||||
GenericName[te]=టెర్మినల్
|
||||
GenericName[tg]=Терминал
|
||||
GenericName[th]=เทอร์มินัล
|
||||
GenericName[tr]=Uçbirim
|
||||
GenericName[uk]=Термінал
|
||||
GenericName[uz]=Terminal
|
||||
GenericName[uz@cyrillic]=Терминал
|
||||
GenericName[wa]=Terminå
|
||||
GenericName[x-test]=xxTerminalxx
|
||||
GenericName[zh_CN]=终端
|
||||
GenericName[zh_TW]=終端機
|
||||
X-DBUS-StartupType=Unique
|
||||
X-KDE-AuthorizeAction=shell_access
|
||||
Categories=Qt;KDE;System;TerminalEmulator;
|
@ -0,0 +1,174 @@
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Exec=qvm-run -q --tray -a --user=root %VMNAME% "konsole"
|
||||
Icon=%VMDIR%/icon.png
|
||||
X-DocPath=konsole/index.html
|
||||
Terminal=false
|
||||
X-KDE-StartupNotify=true
|
||||
|
||||
Name=%VMNAME%: Konsole
|
||||
Name[af]=%VMNAME%: Konsole
|
||||
Name[ar]=%VMNAME%: كونسول
|
||||
Name[as]=%VMNAME%: Konsole
|
||||
Name[be]=%VMNAME%: Konsole
|
||||
Name[be@latin]=%VMNAME%: Konsole
|
||||
Name[bg]=%VMNAME%: Konsole
|
||||
Name[bn]=%VMNAME%: কনসোল
|
||||
Name[bn_IN]=%VMNAME%: Konsole
|
||||
Name[br]=%VMNAME%: Konsole
|
||||
Name[ca]=%VMNAME%: Konsole
|
||||
Name[ca@valencia]=%VMNAME%: Konsole
|
||||
Name[cs]=%VMNAME%: Konsole
|
||||
Name[csb]=%VMNAME%: Kònsola
|
||||
Name[cy]=%VMNAME%: Konsole
|
||||
Name[da]=%VMNAME%: Konsole
|
||||
Name[de]=%VMNAME%: Konsole
|
||||
Name[el]=%VMNAME%: Κονσόλα
|
||||
Name[en_GB]=%VMNAME%: Konsole
|
||||
Name[eo]=%VMNAME%: Konsole
|
||||
Name[es]=%VMNAME%: Konsole
|
||||
Name[et]=%VMNAME%: Konsool
|
||||
Name[eu]=%VMNAME%: Kontsola
|
||||
Name[fi]=%VMNAME%: Konsole
|
||||
Name[fr]=%VMNAME%: Konsole
|
||||
Name[fy]=%VMNAME%: Konsole
|
||||
Name[ga]=%VMNAME%: Konsole
|
||||
Name[gl]=%VMNAME%: Konsole
|
||||
Name[gu]=%VMNAME%: કોન્સોલ
|
||||
Name[he]=%VMNAME%: Konsole
|
||||
Name[hi]=%VMNAME%: कंसोल
|
||||
Name[hne]=%VMNAME%: कंसोल
|
||||
Name[hr]=%VMNAME%: Konzola
|
||||
Name[hsb]=%VMNAME%: Konsola
|
||||
Name[hu]=%VMNAME%: Konsole
|
||||
Name[is]=%VMNAME%: Skjáhermir
|
||||
Name[it]=%VMNAME%: Konsole
|
||||
Name[ja]=%VMNAME%: Konsole
|
||||
Name[ka]=%VMNAME%: კონსოლი
|
||||
Name[kk]=%VMNAME%: Konsole
|
||||
Name[km]=%VMNAME%: កុងសូល
|
||||
Name[kn]=%VMNAME%: ಕನ್ಸೋಲ್
|
||||
Name[ko]=%VMNAME%: Konsole
|
||||
Name[ku]=%VMNAME%: Konsol
|
||||
Name[lt]=%VMNAME%: Konsole
|
||||
Name[lv]=%VMNAME%: Konsole
|
||||
Name[mai]=%VMNAME%: कंसोल
|
||||
Name[mk]=%VMNAME%: Конзола
|
||||
Name[ml]=%VMNAME%: കണ്സോള്
|
||||
Name[mr]=%VMNAME%: कंसोल
|
||||
Name[ms]=%VMNAME%: Konsole
|
||||
Name[nb]=%VMNAME%: Konsole
|
||||
Name[nds]=%VMNAME%: Konsole
|
||||
Name[ne]=%VMNAME%: कन्सोल
|
||||
Name[nl]=%VMNAME%: Konsole
|
||||
Name[nn]=%VMNAME%: Konsoll
|
||||
Name[oc]=%VMNAME%: Konsole
|
||||
Name[or]=%VMNAME%: କୋଲସୋଲ
|
||||
Name[pa]=%VMNAME%: ਕਨਸੋਲ
|
||||
Name[pl]=%VMNAME%: Konsola
|
||||
Name[pt]=%VMNAME%: Konsole
|
||||
Name[pt_BR]=%VMNAME%: Konsole
|
||||
Name[ro]=%VMNAME%: Konsolă
|
||||
Name[ru]=%VMNAME%: Konsole
|
||||
Name[se]=%VMNAME%: Konsolla
|
||||
Name[si]=%VMNAME%: Konsole
|
||||
Name[sk]=%VMNAME%: Konzola
|
||||
Name[sl]=%VMNAME%: Konzola
|
||||
Name[sr]=%VMNAME%: Конзола
|
||||
Name[sr@latin]=%VMNAME%: Konsole
|
||||
Name[sv]=%VMNAME%: Konsole
|
||||
Name[ta]=%VMNAME%: கான்சோல்
|
||||
Name[te]=%VMNAME%: కాన్సోల్
|
||||
Name[tg]=%VMNAME%: Консол
|
||||
Name[th]=%VMNAME%: คอนโซล K
|
||||
Name[tr]=%VMNAME%: Konsole
|
||||
Name[uk]=%VMNAME%: Konsole
|
||||
Name[uz]=%VMNAME%: Konsole
|
||||
Name[uz@cyrillic]=%VMNAME%: Konsole
|
||||
Name[vi]=%VMNAME%: Konsole
|
||||
Name[wa]=%VMNAME%: Konsole
|
||||
Name[xh]=%VMNAME%: Konsole
|
||||
Name[x-test]=%VMNAME%: xxKonsolexx
|
||||
Name[zh_CN]=%VMNAME%: Konsole
|
||||
Name[zh_TW]=%VMNAME%: Konsole
|
||||
|
||||
GenericName=%VMNAME%: Terminal
|
||||
GenericName[af]=%VMNAME%: Terminaal
|
||||
GenericName[ar]=%VMNAME%: طرفيّة
|
||||
GenericName[as]=%VMNAME%: টাৰ্মিনেল
|
||||
GenericName[be@latin]=%VMNAME%: Terminał
|
||||
GenericName[bg]=%VMNAME%: Терминал
|
||||
GenericName[bn]=%VMNAME%: টার্মিনাল
|
||||
GenericName[bn_IN]=%VMNAME%: টার্মিন্যাল
|
||||
GenericName[ca]=%VMNAME%: Terminal
|
||||
GenericName[ca@valencia]=%VMNAME%: Terminal
|
||||
GenericName[cs]=%VMNAME%: Terminál
|
||||
GenericName[csb]=%VMNAME%: Terminal
|
||||
GenericName[da]=%VMNAME%: Terminal
|
||||
GenericName[de]=%VMNAME%: Terminal
|
||||
GenericName[el]=%VMNAME%: Τερματικό
|
||||
GenericName[en_GB]=%VMNAME%: Terminal
|
||||
GenericName[eo]=%VMNAME%: Terminalo
|
||||
GenericName[es]=%VMNAME%: Terminal
|
||||
GenericName[et]=%VMNAME%: Terminal
|
||||
GenericName[eu]=%VMNAME%: Terminala
|
||||
GenericName[fi]=%VMNAME%: Komentoikkuna
|
||||
GenericName[fr]=%VMNAME%: Terminal
|
||||
GenericName[fy]=%VMNAME%: Terminal
|
||||
GenericName[ga]=%VMNAME%: Teirminéal
|
||||
GenericName[gl]=%VMNAME%: Terminal
|
||||
GenericName[gu]=%VMNAME%: ટર્મિનલ
|
||||
GenericName[he]=%VMNAME%: מסוף
|
||||
GenericName[hi]=%VMNAME%: टर्मिनल
|
||||
GenericName[hne]=%VMNAME%: टर्मिनल
|
||||
GenericName[hr]=%VMNAME%: Terminal
|
||||
GenericName[hsb]=%VMNAME%: Terminal
|
||||
GenericName[hu]=%VMNAME%: Terminál
|
||||
GenericName[is]=%VMNAME%: Skjáhermir
|
||||
GenericName[it]=%VMNAME%: Terminale
|
||||
GenericName[ja]=%VMNAME%: ターミナル
|
||||
GenericName[kk]=%VMNAME%: Терминал
|
||||
GenericName[km]=%VMNAME%: ស្ថានីយ
|
||||
GenericName[kn]=%VMNAME%: ಆದೇಶತೆರೆ (ಟರ್ಮಿನಲ್)
|
||||
GenericName[ko]=%VMNAME%: 터미널
|
||||
GenericName[ku]=%VMNAME%: Termînal
|
||||
GenericName[lt]=%VMNAME%: Terminalas
|
||||
GenericName[lv]=%VMNAME%: Terminālis
|
||||
GenericName[mai]=%VMNAME%: टर्मिनल
|
||||
GenericName[mk]=%VMNAME%: Терминал
|
||||
GenericName[ml]=%VMNAME%: ടെര്മിനല്
|
||||
GenericName[mr]=%VMNAME%: टर्मिनल
|
||||
GenericName[nb]=%VMNAME%: Terminal
|
||||
GenericName[nds]=%VMNAME%: Konsool
|
||||
GenericName[nl]=%VMNAME%: Terminal
|
||||
GenericName[nn]=%VMNAME%: Terminal
|
||||
GenericName[or]=%VMNAME%: ଟର୍ମିନାଲ
|
||||
GenericName[pa]=%VMNAME%: ਟਰਮੀਨਲ
|
||||
GenericName[pl]=%VMNAME%: Terminal
|
||||
GenericName[pt]=%VMNAME%: Terminal
|
||||
GenericName[pt_BR]=%VMNAME%: Terminal
|
||||
GenericName[ro]=%VMNAME%: Terminal
|
||||
GenericName[ru]=%VMNAME%: Терминал
|
||||
GenericName[se]=%VMNAME%: Terminal
|
||||
GenericName[si]=%VMNAME%: Terminal
|
||||
GenericName[sk]=%VMNAME%: Terminál
|
||||
GenericName[sl]=%VMNAME%: Terminal
|
||||
GenericName[sr]=%VMNAME%: Терминал
|
||||
GenericName[sr@latin]=%VMNAME%: Terminal
|
||||
GenericName[sv]=%VMNAME%: Terminal
|
||||
GenericName[ta]=%VMNAME%: முனையம்
|
||||
GenericName[te]=%VMNAME%: టెర్మినల్
|
||||
GenericName[tg]=%VMNAME%: Терминал
|
||||
GenericName[th]=%VMNAME%: เทอร์มินัล
|
||||
GenericName[tr]=%VMNAME%: Uçbirim
|
||||
GenericName[uk]=%VMNAME%: Термінал
|
||||
GenericName[uz]=%VMNAME%: Terminal
|
||||
GenericName[uz@cyrillic]=%VMNAME%: Терминал
|
||||
GenericName[wa]=%VMNAME%: Terminå
|
||||
GenericName[x-test]=%VMNAME%: xxTerminalxx
|
||||
GenericName[zh_CN]=%VMNAME%: 终端
|
||||
GenericName[zh_TW]=%VMNAME%: 終端機
|
||||
X-DBUS-StartupType=Unique
|
||||
X-KDE-AuthorizeAction=shell_access
|
||||
Categories=Qt;KDE;System;TerminalEmulator;
|
||||
X-Qubes-VmName=%VMNAME%
|
@ -0,0 +1,5 @@
|
||||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Type=Directory
|
||||
Name=%VMNAME% (VM)
|
||||
Icon=%VMDIR%/icon.png
|
@ -0,0 +1,8 @@
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Exec=(qvm-run -q --tray -a --user=root netvm "stalonetray --background white --geometry 100x40" && qvm-run -q netvm --user=root "/usr/bin/nm-applet &")
|
||||
Icon=%VMDIR%/icon.png
|
||||
Name=%VMNAME%: Show Tray
|
||||
Categories=System
|
||||
StartupNotify=false
|
||||
X-Qubes-VmName=%VMNAME%
|
@ -0,0 +1,68 @@
|
||||
#!/bin/sh
|
||||
|
||||
CLEANIMG=$1
|
||||
NAME=$2
|
||||
IS_NETVM=$3
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
echo "usage $0 <clean_image_file> <template_name>"
|
||||
echo "usage $0 <clean_image_file> <template_name> netvm"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ x$CLEANIMG = x ]; then
|
||||
echo "Image file not specified!"
|
||||
fi
|
||||
|
||||
if [ x$NAME = x ]; then
|
||||
echo "Name not given!"
|
||||
fi
|
||||
|
||||
ID=$(id -ur)
|
||||
|
||||
if [ $ID != 0 ] ; then
|
||||
echo "This script should be run as root user."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
IMG=qubeized_images/$NAME-root.img
|
||||
echo "--> Copying $CLEANIMG to $IMG..."
|
||||
cp $CLEANIMG $IMG || exit 1
|
||||
|
||||
echo "--> Mouting $IMG"
|
||||
|
||||
mkdir -p mnt
|
||||
mount -o loop,offset=$((63*512)) qubeized_images/$NAME-root.img mnt || exit 1
|
||||
|
||||
echo "--> Installing RPMs..."
|
||||
rpm --force --root=$(pwd)/mnt -ihv rpms_to_install/*
|
||||
|
||||
|
||||
echo "--> Copying the Apps Menu shortcuts..."
|
||||
APPSORIG=qubeized_images/$NAME-apps.orig
|
||||
APPSTEMPL=qubeized_images/$NAME-apps.templates
|
||||
mkdir -p $APPSORIG
|
||||
cp -r $(pwd)/mnt/usr/share/applications/* $APPSORIG
|
||||
|
||||
if [ x$IS_NETVM != x ]; then
|
||||
if ! [ -d netvm/apps.templates ] ; then
|
||||
echo "--> ERROR: Missing netvm/apps.templates directory."
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "--> Createing the Apps Menu templates..."
|
||||
./create_apps_templates.sh $APPSORIG $APPSTEMPL
|
||||
fi
|
||||
|
||||
if [ x$IS_NETVM == x ]; then
|
||||
echo "--> Installing 3rd party apps"
|
||||
./add_3rd_party_software.sh
|
||||
fi
|
||||
|
||||
|
||||
echo "--> Unmounting $IMG"
|
||||
umount mnt
|
||||
|
||||
echo "Qubeized image stored at: $IMG"
|
||||
|
@ -0,0 +1 @@
|
||||
*
|
@ -0,0 +1 @@
|
||||
noarch/
|
@ -0,0 +1 @@
|
||||
../../rpms_3rd_party/kernel-2.6.32.9-1.pvops0.qubes.x86_64.rpm
|
@ -0,0 +1 @@
|
||||
../../rpms_3rd_party/kernel-firmware-2.6.32.9-1.pvops0.qubes.noarch.rpm
|
@ -0,0 +1 @@
|
||||
../../core/rpm/x86_64/qubes-core-appvm-1.0.0-1.x86_64.rpm
|
@ -0,0 +1 @@
|
||||
../../gui/rpm/x86_64/qubes-gui-vm-1.0.0-1.x86_64.rpm
|
@ -0,0 +1 @@
|
||||
../../gui/rpm/x86_64/qubes-vchan-vm-{kernel-2.6.32.9-1.pvops0.qubes.x86_64}-1.0.0-1.x86_64.rpm
|
@ -0,0 +1 @@
|
||||
../../rpms_3rd_party/xen-libs-3.4.2-2.qubes.x86_64.rpm
|
@ -0,0 +1 @@
|
||||
../../rpms_3rd_party/xen-qubes-vm-essentials-3.4.2-2.qubes.x86_64.rpm
|
@ -0,0 +1 @@
|
||||
../../rpms_3rd_party/bridge-utils-1.2-8.fc12.x86_64.rpm
|
@ -0,0 +1 @@
|
||||
../../rpms_3rd_party/kernel-2.6.31.9-1.pvops0.qubes.x86_64.rpm
|
@ -0,0 +1 @@
|
||||
../../rpms_3rd_party/kernel-firmware-2.6.31.9-1.pvops0.qubes.noarch.rpm
|