core-dom0.spec 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. #
  2. # This is the SPEC file for creating binary RPMs for the Dom0.
  3. #
  4. #
  5. # The Qubes OS Project, http://www.qubes-os.org
  6. #
  7. # Copyright (C) 2010 Joanna Rutkowska <joanna@invisiblethingslab.com>
  8. # Copyright (C) 2010 Rafal Wojtczuk <rafal@invisiblethingslab.com>
  9. #
  10. # This program is free software; you can redistribute it and/or
  11. # modify it under the terms of the GNU General Public License
  12. # as published by the Free Software Foundation; either version 2
  13. # of the License, or (at your option) any later version.
  14. #
  15. # This program is distributed in the hope that it will be useful,
  16. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  18. # GNU General Public License for more details.
  19. #
  20. # You should have received a copy of the GNU General Public License
  21. # along with this program; if not, write to the Free Software
  22. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  23. #
  24. #
  25. %{!?python_sitearch: %define python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)")}
  26. %{!?version: %define version %(cat version_dom0)}
  27. Name: qubes-core-dom0
  28. Version: %{version}
  29. Release: 1
  30. Summary: The Qubes core files (Dom0-side)
  31. Group: Qubes
  32. Vendor: Invisible Things Lab
  33. License: GPL
  34. URL: http://www.qubes-os.org
  35. Requires: python, xen-runtime, pciutils, python-inotify, python-daemon, kernel-qubes-dom0
  36. Conflicts: qubes-gui-dom0 < 1.1.13
  37. Requires: NetworkManager >= 0.8.1-1
  38. %define _builddir %(pwd)/dom0
  39. %description
  40. The Qubes core files for installation on Dom0.
  41. %build
  42. python -m compileall qvm-core qmemman
  43. python -O -m compileall qvm-core qmemman
  44. make -C restore
  45. make -C ../common
  46. %install
  47. mkdir -p $RPM_BUILD_ROOT/etc/init.d
  48. cp init.d/qubes_core $RPM_BUILD_ROOT/etc/init.d/
  49. cp init.d/qubes_netvm $RPM_BUILD_ROOT/etc/init.d/
  50. cp init.d/qubes_setupdvm $RPM_BUILD_ROOT/etc/init.d/
  51. mkdir -p $RPM_BUILD_ROOT/usr/bin/
  52. cp qvm-tools/qvm-* $RPM_BUILD_ROOT/usr/bin
  53. cp clipboard_notifier/qclipd $RPM_BUILD_ROOT/usr/bin
  54. cp pendrive_swapper/qfilexchgd $RPM_BUILD_ROOT/usr/bin
  55. mkdir -p $RPM_BUILD_ROOT/etc/xen/scripts
  56. cp restore/block.qubes $RPM_BUILD_ROOT/etc/xen/scripts
  57. cp ../common/vif-route-qubes $RPM_BUILD_ROOT/etc/xen/scripts
  58. cp ../common/block-snapshot $RPM_BUILD_ROOT/etc/xen/scripts
  59. ln -s block-snapshot $RPM_BUILD_ROOT/etc/xen/scripts/block-origin
  60. mkdir -p $RPM_BUILD_ROOT%{python_sitearch}/qubes
  61. cp qvm-core/qubes.py $RPM_BUILD_ROOT%{python_sitearch}/qubes
  62. cp qvm-core/qubes.py[co] $RPM_BUILD_ROOT%{python_sitearch}/qubes
  63. cp qvm-core/__init__.py $RPM_BUILD_ROOT%{python_sitearch}/qubes
  64. cp qvm-core/__init__.py[co] $RPM_BUILD_ROOT%{python_sitearch}/qubes
  65. cp qmemman/qmemman*py $RPM_BUILD_ROOT%{python_sitearch}/qubes
  66. cp qmemman/qmemman*py[co] $RPM_BUILD_ROOT%{python_sitearch}/qubes
  67. mkdir -p $RPM_BUILD_ROOT/usr/lib/qubes
  68. cp aux-tools/patch_appvm_initramfs.sh $RPM_BUILD_ROOT/usr/lib/qubes
  69. cp aux-tools/unbind_pci_device.sh $RPM_BUILD_ROOT/usr/lib/qubes
  70. cp aux-tools/unbind_all_network_devices $RPM_BUILD_ROOT/usr/lib/qubes
  71. cp aux-tools/convert_apptemplate2vm.sh $RPM_BUILD_ROOT/usr/lib/qubes
  72. cp aux-tools/convert_dirtemplate2vm.sh $RPM_BUILD_ROOT/usr/lib/qubes
  73. cp aux-tools/create_apps_for_appvm.sh $RPM_BUILD_ROOT/usr/lib/qubes
  74. cp aux-tools/remove_appvm_appmenus.sh $RPM_BUILD_ROOT/usr/lib/qubes
  75. cp aux-tools/reset_vm_configs.py $RPM_BUILD_ROOT/usr/lib/qubes
  76. cp pendrive_swapper/qubes_pencmd $RPM_BUILD_ROOT/usr/lib/qubes
  77. cp qmemman/server.py $RPM_BUILD_ROOT/usr/lib/qubes/qmemman_daemon.py
  78. cp ../common/meminfo-writer $RPM_BUILD_ROOT/usr/lib/qubes/
  79. cp restore/xenstore-watch restore/qvm-create-default-dvm $RPM_BUILD_ROOT/usr/bin
  80. cp restore/qubes_restore restore/xenfreepages $RPM_BUILD_ROOT/usr/lib/qubes
  81. cp restore/qubes_prepare_saved_domain.sh $RPM_BUILD_ROOT/usr/lib/qubes
  82. mkdir -p $RPM_BUILD_ROOT/var/lib/qubes
  83. mkdir -p $RPM_BUILD_ROOT/var/lib/qubes/vm-templates
  84. mkdir -p $RPM_BUILD_ROOT/var/lib/qubes/appvms
  85. mkdir -p $RPM_BUILD_ROOT/var/lib/qubes/backup
  86. mkdir -p $RPM_BUILD_ROOT/var/lib/qubes/dvmdata
  87. mkdir -p $RPM_BUILD_ROOT/usr/share/qubes/icons
  88. cp icons/*.png $RPM_BUILD_ROOT/usr/share/qubes/icons
  89. mkdir -p $RPM_BUILD_ROOT/etc/yum.repos.d
  90. cp ../dom0/qubes.repo $RPM_BUILD_ROOT/etc/yum.repos.d
  91. mkdir -p $RPM_BUILD_ROOT/usr/bin
  92. cp ../common/qubes_setup_dnat_to_ns $RPM_BUILD_ROOT/usr/lib/qubes
  93. cp ../common/qubes_fix_nm_conf.sh $RPM_BUILD_ROOT/usr/lib/qubes
  94. mkdir -p $RPM_BUILD_ROOT/etc/dhclient.d
  95. ln -s /usr/lib/qubes/qubes_setup_dnat_to_ns $RPM_BUILD_ROOT/etc/dhclient.d/qubes_setup_dnat_to_ns.sh
  96. mkdir -p $RPM_BUILD_ROOT/etc/NetworkManager/dispatcher.d/
  97. cp ../common/qubes_nmhook $RPM_BUILD_ROOT/etc/NetworkManager/dispatcher.d/
  98. mkdir -p $RPM_BUILD_ROOT/etc/sysconfig
  99. cp ../common/iptables $RPM_BUILD_ROOT/etc/sysconfig
  100. mkdir -p $RPM_BUILD_ROOT/usr/lib64/pm-utils/sleep.d
  101. cp pm-utils/01qubes-sync-vms-clock $RPM_BUILD_ROOT/usr/lib64/pm-utils/sleep.d/
  102. cp pm-utils/01qubes-swap-pci-devs $RPM_BUILD_ROOT/usr/lib64/pm-utils/sleep.d/
  103. cp pm-utils/02qubes-pause-vms $RPM_BUILD_ROOT/usr/lib64/pm-utils/sleep.d/
  104. mkdir -p $RPM_BUILD_ROOT/var/log/qubes
  105. mkdir -p $RPM_BUILD_ROOT/var/run/qubes
  106. %post
  107. /usr/lib/qubes/qubes_fix_nm_conf.sh
  108. if [ -e /etc/yum.repos.d/qubes-r1-dom0.repo ]; then
  109. # we want the user to use the repo that comes with qubes-code-dom0 packages instead
  110. rm -f /etc/yum.repos.d/qubes-r1-dom0.repo
  111. fi
  112. #if [ "$1" != 1 ] ; then
  113. ## do this whole %post thing only when updating for the first time...
  114. #exit 0
  115. #fi
  116. # TODO: This is only temporary, until we will have our own installer
  117. for f in /etc/init.d/*
  118. do
  119. srv=`basename $f`
  120. [ $srv = 'functions' ] && continue
  121. [ $srv = 'killall' ] && continue
  122. [ $srv = 'halt' ] && continue
  123. chkconfig $srv off
  124. done
  125. chkconfig iptables on
  126. chkconfig NetworkManager on
  127. chkconfig rsyslog on
  128. chkconfig haldaemon on
  129. chkconfig messagebus on
  130. chkconfig xenstored on
  131. chkconfig xend on
  132. chkconfig xenconsoled on
  133. sed 's/^net.ipv4.ip_forward.*/net.ipv4.ip_forward = 1/' -i /etc/sysctl.conf
  134. chkconfig --add qubes_core || echo "WARNING: Cannot add service qubes_core!"
  135. chkconfig --add qubes_netvm || echo "WARNING: Cannot add service qubes_netvm!"
  136. chkconfig --add qubes_setupdvm || echo "WARNING: Cannot add service qubes_setupdvm!"
  137. chkconfig qubes_core on || echo "WARNING: Cannot enable service qubes_core!"
  138. chkconfig qubes_netvm on || echo "WARNING: Cannot enable service qubes_netvm!"
  139. chkconfig qubes_setupdvm on || echo "WARNING: Cannot enable service qubes_setupdvm!"
  140. if ! [ -e /var/lib/qubes/qubes.xml ]; then
  141. # echo "Initializing Qubes DB..."
  142. umask 007; sg qubes -c qvm-init-storage
  143. fi
  144. for i in /usr/share/qubes/icons/*.png ; do
  145. xdg-icon-resource install --novendor --size 48 $i
  146. done
  147. /etc/init.d/qubes_core start
  148. NETVM=$(qvm-get-default-netvm)
  149. if [ "X"$NETVM = "X""dom0" ] ; then
  150. /etc/init.d/qubes_netvm start
  151. fi
  152. %clean
  153. rm -rf $RPM_BUILD_ROOT
  154. %pre
  155. if ! grep -q ^qubes: /etc/group ; then
  156. groupadd qubes
  157. fi
  158. if [ "$1" -gt 1 ] ; then
  159. # upgrading already installed package...
  160. NETVM=$(qvm-get-default-netvm)
  161. if [ "X"$NETVM = "X""dom0" ] ; then
  162. /etc/init.d/qubes_netvm stop
  163. fi
  164. /etc/init.d/qubes_core stop
  165. fi
  166. %triggerin -- xen
  167. /etc/init.d/qubes_core stop
  168. /etc/init.d/qubes_core start
  169. %triggerin -- xen-runtime
  170. sed -i 's/\/block /\/block.qubes /' /etc/udev/rules.d/xen-backend.rules
  171. /etc/init.d/qubes_core stop
  172. /etc/init.d/qubes_core start
  173. %preun
  174. if [ "$1" = 0 ] ; then
  175. # no more packages left
  176. /etc/init.d/qubes_netvm stop
  177. /etc/init.d/qubes_core stop
  178. for i in /usr/share/qubes/icons/*.png ; do
  179. xdg-icon-resource uninstall --novendor --size 48 $i
  180. done
  181. fi
  182. %postun
  183. if [ "$1" = 0 ] ; then
  184. # no more packages left
  185. chgrp root /etc/xen
  186. chmod 700 /etc/xen
  187. groupdel qubes
  188. sed -i 's/\/block.qubes /\/block /' /etc/udev/rules.d/xen-backend.rules
  189. fi
  190. %files
  191. %defattr(-,root,root,-)
  192. /etc/init.d/qubes_core
  193. /etc/init.d/qubes_netvm
  194. /etc/init.d/qubes_setupdvm
  195. /usr/bin/qvm-*
  196. /usr/bin/qclipd
  197. /usr/bin/qfilexchgd
  198. %{python_sitearch}/qubes/qubes.py
  199. %{python_sitearch}/qubes/qubes.pyc
  200. %{python_sitearch}/qubes/qubes.pyo
  201. %{python_sitearch}/qubes/__init__.py
  202. %{python_sitearch}/qubes/__init__.pyc
  203. %{python_sitearch}/qubes/__init__.pyo
  204. %{python_sitearch}/qubes/qmemman*.py*
  205. /usr/lib/qubes/patch_appvm_initramfs.sh
  206. /usr/lib/qubes/unbind_pci_device.sh
  207. /usr/lib/qubes/unbind_all_network_devices
  208. /usr/lib/qubes/convert_apptemplate2vm.sh
  209. /usr/lib/qubes/convert_dirtemplate2vm.sh
  210. /usr/lib/qubes/create_apps_for_appvm.sh
  211. /usr/lib/qubes/remove_appvm_appmenus.sh
  212. /usr/lib/qubes/reset_vm_configs.py*
  213. /usr/lib/qubes/qubes_pencmd
  214. /usr/lib/qubes/qmemman_daemon.py*
  215. /usr/lib/qubes/meminfo-writer
  216. %attr(770,root,qubes) %dir /var/lib/qubes
  217. %attr(770,root,qubes) %dir /var/lib/qubes/vm-templates
  218. %attr(770,root,qubes) %dir /var/lib/qubes/appvms
  219. %attr(770,root,qubes) %dir /var/lib/qubes/backup
  220. %attr(770,root,qubes) %dir /var/lib/qubes/dvmdata
  221. %dir /usr/share/qubes/icons/*.png
  222. /etc/yum.repos.d/qubes.repo
  223. /usr/lib/qubes/qubes_setup_dnat_to_ns
  224. /usr/lib/qubes/qubes_fix_nm_conf.sh
  225. /etc/dhclient.d/qubes_setup_dnat_to_ns.sh
  226. /etc/NetworkManager/dispatcher.d/qubes_nmhook
  227. /etc/sysconfig/iptables
  228. /usr/lib64/pm-utils/sleep.d/01qubes-sync-vms-clock
  229. /usr/lib64/pm-utils/sleep.d/01qubes-swap-pci-devs
  230. /usr/lib64/pm-utils/sleep.d/02qubes-pause-vms
  231. /usr/bin/xenstore-watch
  232. /usr/bin/qvm-create-default-dvm
  233. /usr/lib/qubes/qubes_restore
  234. /usr/lib/qubes/qubes_prepare_saved_domain.sh
  235. /etc/xen/scripts/block.qubes
  236. /etc/xen/scripts/block-snapshot
  237. /etc/xen/scripts/block-origin
  238. /etc/xen/scripts/vif-route-qubes
  239. %attr(4750,root,qubes) /usr/lib/qubes/xenfreepages
  240. %attr(2770,root,qubes) %dir /var/log/qubes
  241. %attr(770,root,qubes) %dir /var/run/qubes