From c1b81d3ab6dd1ae1a0dcd2171023c0ee2b73403d Mon Sep 17 00:00:00 2001 From: Joanna Rutkowska Date: Tue, 11 May 2010 16:51:31 +0200 Subject: [PATCH] Initial public commit. (c) 2010 Invisible Things Lab Author: ========= Joanna Rutkowska --- .gitignore | 1 + Makefile | 13 + icons/appvm.png | Bin 0 -> 11050 bytes icons/createvm.png | Bin 0 -> 1883 bytes icons/dom0.png | Bin 0 -> 22008 bytes icons/home.png | Bin 0 -> 14073 bytes icons/netvm.png | Bin 0 -> 15254 bytes icons/networking.png | Bin 0 -> 3801 bytes icons/pausevm.png | Bin 0 -> 1865 bytes icons/qubes.png | Bin 0 -> 20745 bytes icons/readme.txt | 12 + icons/removevm.png | Bin 0 -> 2033 bytes icons/resumevm.png | Bin 0 -> 1932 bytes icons/root.png | Bin 0 -> 15228 bytes icons/showallvms.png | Bin 0 -> 1789 bytes icons/showcpuload.png | Bin 0 -> 1638 bytes icons/shutdownvm.png | Bin 0 -> 1891 bytes icons/storagevm.png | Bin 0 -> 19213 bytes icons/templatevm.png | Bin 0 -> 20745 bytes icons/updateable.png | Bin 0 -> 2404 bytes newappvmdlg.ui | 276 ++++++++++++++ qmgr.spec | 65 ++++ qubes-manager | 5 + qubes-manager.desktop | 10 + qubesmanager/.gitignore | 2 + qubesmanager/__init__.py | 0 qubesmanager/main.py | 759 +++++++++++++++++++++++++++++++++++++++ resources.qrc | 21 ++ version | 1 + 29 files changed, 1165 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 icons/appvm.png create mode 100644 icons/createvm.png create mode 100644 icons/dom0.png create mode 100644 icons/home.png create mode 100644 icons/netvm.png create mode 100644 icons/networking.png create mode 100644 icons/pausevm.png create mode 100644 icons/qubes.png create mode 100644 icons/readme.txt create mode 100644 icons/removevm.png create mode 100644 icons/resumevm.png create mode 100644 icons/root.png create mode 100644 icons/showallvms.png create mode 100644 icons/showcpuload.png create mode 100644 icons/shutdownvm.png create mode 100644 icons/storagevm.png create mode 100644 icons/templatevm.png create mode 100644 icons/updateable.png create mode 100644 newappvmdlg.ui create mode 100644 qmgr.spec create mode 100755 qubes-manager create mode 100644 qubes-manager.desktop create mode 100644 qubesmanager/.gitignore create mode 100644 qubesmanager/__init__.py create mode 100755 qubesmanager/main.py create mode 100644 resources.qrc create mode 100644 version diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0d20b64 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.pyc diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f389efe --- /dev/null +++ b/Makefile @@ -0,0 +1,13 @@ +RPMS_DIR=rpm/ +help: + @echo "make rpms -- generate binary rpm packages" + @echo "make res -- compile resources" + +rpms: + rpmbuild --define "_rpmdir $(RPMS_DIR)" -bb qmgr.spec + rpm --addsign $(RPMS_DIR)/x86_64/*.rpm + + +res: + pyrcc4 -o qubesmanager/qrc_resources.py resources.qrc + pyuic4 -o qubesmanager/ui_newappvmdlg.py newappvmdlg.ui diff --git a/icons/appvm.png b/icons/appvm.png new file mode 100644 index 0000000000000000000000000000000000000000..e9fc4a5d7c42135d794836c183ac877465c485d7 GIT binary patch literal 11050 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%0DTC{ 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 literal 0 HcmV?d00001 diff --git a/icons/netvm.png b/icons/netvm.png new file mode 100644 index 0000000000000000000000000000000000000000..bafb6c68520ccbe6bca0f6774b2411ecc2f2bfd0 GIT binary patch literal 15254 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 literal 0 HcmV?d00001 diff --git a/icons/networking.png b/icons/networking.png new file mode 100644 index 0000000000000000000000000000000000000000..406bbbc2bf34442c385ebd48c0dc774d9629e764 GIT binary patch literal 3801 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 DtW;^g literal 0 HcmV?d00001 diff --git a/icons/qubes.png b/icons/qubes.png new file mode 100644 index 0000000000000000000000000000000000000000..996640c5de057ec46666035d11f0663a6e2f3570 GIT binary patch literal 20745 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 P00000NkvXXu0mjfhC$+5 literal 0 HcmV?d00001 diff --git a/icons/resumevm.png b/icons/resumevm.png new file mode 100644 index 0000000000000000000000000000000000000000..dbeee2bb77defbd63f82333d6859fc25610fa662 GIT binary patch literal 1932 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 literal 0 HcmV?d00001 diff --git a/icons/showcpuload.png b/icons/showcpuload.png new file mode 100644 index 0000000000000000000000000000000000000000..344cda5e1312cc96a75df780ac343aa0848989ee GIT binary patch literal 1638 zcmV-s2ATPZP)of`1@lQn zK~#9!?N&`}6Gs?*v%B7aT}UEG;_&032&fWhx%GsQNDo}w3n!?=g$sw$dk;k%TZwSt zkV`AI2QEmFD)mwX2S6!^G!PUBhobyQO@PE9CboC&`RRDWw!MJwuz-@T1``({6fn;_XDHD2i2#!{LFB132GzerYB@^Ryb1!udC$^nHIZ=jC z0#Zr{DfF12@(S0p*D;x$%vfl%+VD2;H1`xHKECiP@Pr3XdO=^{1!Rj^h_Zl#b}J4D zE-GZDlHihuE|3G{h7dp*Z784&aL(aNpNQ6zr`Lo8c)JP^H3F!Q5>RSO0TdyVeW4l) zP*Sz21DqW2lvm?`RI=WIa=SVpL=d4yE=bwF0>}aB)vY?=Jw-? zv8F#GnnlQ0el=k_QWX#4q=ag%1ApB+cRJa9^y>2LX!?(z5n0b}j$q%Xm)3JH?|cK` z$EL@q3L+GR)<@{=t4H7W41Sf~H~cLMYtul*k?CEcvFX+pBj^yso0P{~YAO&bFf&4O7mL`zT&SzrwKoB9*Bq%;r&#m7B z+>f5tDB{)77H-ExgqHXtBnAm5Xsf%9DpB?Cm~@=SP68n4uH2zn#5i*U5n(X&)>ql9YaeL+Vdx;P^fNJtG92*D~8zH8f$2>?W0}(c}F}QsY zletMutxsW>ZY>qSD*_Bjp9n*bNeBT1sVs26xdRp~iV&k8t-ag!!eI_>tlU7hlm%?S zWp3*uq=X@B2J#)^VT_ovV0Kzm^3+_}>`jvl?bI69iXiRk)sWCVkkF0HTKX?%y_6$co=e2Pk~ zi11nMh}{E4RRp(r9cik-0TQtKNZ(=3oJsGxZ~pnYW4tQwCc=G!boN1c)%0ft0X9 zAr(r+m{SNyz;d<&%mSVNWk75|l@?IS{SGJ&QTQbG6ml(c0B9^CVgDN;LrU2;5;dzH z_9jwNqv$xz1^9qw3Q>FrCDt|afGi;>3t-UDVfg0**tlZ37Zg zE<<-9g2Tg29pIiJ z=YrX2R3wDC;G2$6V-c?Hh7qz72_)YkEQ2xi`9vZ%Ld;5l(Jy5rd2%Mk0S*#C^E41Z zE(HQ?*F_3|Y68o3;|2WZfNFGjkV~72kk#A)21XGoX<}|~FH$ozO$FF`4|tXZNEw|D z>1vU^S^zUob=jv^nC`nEONL$aJg#oLo!wv#gHq8e!4yN1Ct-05PHJFaaj~y&zkmEV z9L@p82$mI$ElvJqcQ;sP=K|K&qOKaa_VMAxzo%0Bx%UO^4i37Ou%L(TnXTt}nm}T^ zo~IZ+&*4*t7uA&7f3|QICASnQU?4N3IG5A07*qoM6N<$f*dB)?*IS* literal 0 HcmV?d00001 diff --git a/icons/shutdownvm.png b/icons/shutdownvm.png new file mode 100644 index 0000000000000000000000000000000000000000..1e415cdf992d8a0da7ee63492375f6bd70539406 GIT binary patch literal 1891 zcmV-p2b}ncP)MzCV_|S* zE^l&Yo9;Xs000K!Nkl=}8J&_`hl*lPCi?L*4cjrF|jMe2ZhD3>%i6vqgWt3^`m7`U(VwcPU8>KmsBX9)tyPUKY#3B1$I3q6H@Bv zxEE*}aR(|W5j{3ePv6!S%al2WpGjX)Us%7G?AWt!Re_z4<1Nw7O*A;}VXQ|LeWcGL zQ2?S6q9QFU(tgJm^reO}3fc}&yzur#1)dw0&!m)vW}Y4I#!c+Bj+PP#D@G;61iZ)s zTOY?1N~mh6=*5;7k6j?}Y+b&Ufeu=vcNpRLuS6d^)N4}yeW!VD;}$bM&V0IBzaE9%adJ5bNHxE(Uo z$zo63OZqx4LqTI2kgj|xbfJhIqKsblxlj8qQ&xuD4nz;0uHuyIZ?p0&w%|6U&l5TI zApBxuiC%ORwx$-jroP4}>|4(I&f>;b=Di1Q)b)3Cx~|2|xXRO~CP9Qb$Xx*XqgGT; zs@R0<$kL*y>vyBxgQqsgZ?2Y2RRfRV8lo7s0UBcTFDPM$YI`4AWH^o2Q9~sgTqC*e z)ww(%4@k}FMBR$@M8U|F{tY-{NeS8-4rk#pY0^0C;xnwPGOlKbPm+T^*RTz5QlPVq zW65kK<}9ATk`5qwfC5jJWyC2>Kk3)|;3Pio z@XK(?qpc8vB`yM$GJzu2VE}XX3mSQ{oO4@UC0n2^Tu=3yCyv`%J4$3*1JP3RUJ;2R zRhYy^v~;n$irboVn}sx)#72^~;&Gy|Et>)KXa#yB*Ra92&6!6OxXtK6=FNFGC`wXA zjp}W7PZ3wW)0oFqvaE8>6Q&_pLBKETb*QpkA^UbPFLmk=HNSQeCG3F})ym< zI&l(0qy|5jyq;%>Wrd*^vf=?eqPtxZOO&uPm`^pH&1!tAbS$xd#(t`@E(4De$Nf^$BPt$psF{kErDx-u= zA&J5%V4wXno)u}JiuB}Zm}m4LFVh+dYMwfNj%6@FIl9=p8wJ()j_%d^ESWDU;B+p2j)9Uv?Bi^w?QNl!$VGrDDETx(?4a zL;aiON07Zsa&S1Mo+62)poJlZP))A$-C3s3{^>4Cd%PR2E^v`PK7+MdY{ak^Kfw@fwU zM@_u%nE)BzHy84vam)fKia1Gqrh?&knLezEDmOcV$b zn!Y=~=WoMZsAv)xB$Dm~-slxge9qu-E2QN#eLv8hzK8O#UO?>n)T9shVSp0Fn59Mm zrMH&TT<$-Fc6tFhc)IKvsU2f@^ULZpY=8kP)^q{E6fE5x*j#ILWQ<47ML!^%58*>XaBFO-x$&>_ZKG z1aOXM&{89|!05^${hHTUli)=>8Iyh!i4X$aiF_cR6<)*-b}r#n!b4RVO-7{#$O_;E zXa@VgA$*l^=n`HfL=nCWN$!^sQ~+Eoe^^K+g)c)6UGmG2ZW;eNC#hpl>g+OuY4NXf d4mGhx`5X6w*m7OqHn0Ey002ovPDHLkV1ghGZo&Wn literal 0 HcmV?d00001 diff --git a/icons/storagevm.png b/icons/storagevm.png new file mode 100644 index 0000000000000000000000000000000000000000..4023876379fc099cb7cc10a586b9617efbeb5082 GIT binary patch literal 19213 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 literal 0 HcmV?d00001 diff --git a/icons/templatevm.png b/icons/templatevm.png new file mode 100644 index 0000000000000000000000000000000000000000..996640c5de057ec46666035d11f0663a6e2f3570 GIT binary patch literal 20745 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 M07*qoM6N<$f)aqX#Yb#qihEXpDal z{6iBL^y9Yow)cF${?2>P=}DU+ zaJy1W_S`=AcTR6l`#iso_q->?hxmVnlrkVE7J5A+Vj*A)5YJ9@kM8Up$Zq@fzH|C` z#s-iVBjX>Md)2Hzy!q}X``$G*zk2vn&D$AcH`c&`6a9Mk`xDdmZ)g&)v=1VkwdaVR zPk0PN*YMzmCR`lO+V|bnR6+(^6aaw&@$Fx}<_pfmP$r8{u5Ca)is$6|>Ui;uUL1L| zPa^{!2shM#@0hSDj*VwvnN>iHYc|q1IELQ-VNmwvjW^($N}cOiuq?ZfDT3$N@acMm z8*RXIOcfnFFi@BX&$Wr>(ire#129dyz$94kouxA1#s=(bY#~XnxfSr2sshsY0S36P z3$xG`@;vySyEFzE*BH|T$cL)H^+3ufGHAkJOJx9>UJPGySn&*8-*U<{@I>(vRe*7( z871(+VP0PaVmnMg7^O>70dfFgl);y>;AIrN7{Vz3;3^$7|Ak}RIOwj?lu6wA^P(g zNHDAa?YFzm8ivufyhex6`23Y;09PGEs1D!AiKMoP=&< zESO6Yr_8WOPbfa0Vn6sih~cs4QzUwxjEx{h(nvt(41e1DB1%e<&j4S%qJb!5`$|_m z^xKOUM!%UfIEqV3XJuUo4g^`2ATof+B!>hCkdF+ZiCLp7)k}#FUXl|fkrAQj`9#-O zMgR$22y9$;JDz%a4>D8cp@~uP1Zlkba#8e=PX~9XH;aM3p(EE8D^ST zm%DIe;F=#Pi<&pxN#R&cT|=_AX{8b@^gw*X*hFk3FhFtcN+e}8xD-7S?^CutC7Lsd z#+nMWG*-e88qyP4w0FIWlkMk_n;67&W+W)o7pzPFdg;1uWM==-_M+yE+ed~6pD3@a zMzXv*KYWsifSjlSEKiw_;gU;aY^I4M1&v~HlB2TBKvh{1MTQm_QTLGZeJSiccm`wX zNjQ!T$F{+w1#4Y*h>XH)RO^HhJ8iJqRp*q??J*SK~a%G(U_@%PE|3CgkmB= z$8?_1HR!53JX}_pYMq?vU?iQz<*^JVGShHf2d<+yBiyzvz_T#c|8HconKJ;}WDT5{ zF35l~(X_E1knPLr>g(!S?j%vVGGK&E=m~I5fTE5M>5X7Tv?K?}t_PyHT>C*c%H zJVgs0naZTPFw}oxS^}T222OV2e?Y@k;7;~uwese(x#_7dS5%bI=CLX-nCk!+023;5 zt}Amq9CTd|hF+1*wRqSAlbq-0gwMHSQv#-Q!k$9#Uis!Q$SP0-k z*XtNb4ZRPr&r|kQ-!ITW3~#dEArnWbm9{36nqIwpr5a>a1zis*LgvkgF#DQ_wj3<1 zK-4zsO?`iKpc6fvXWU@PB=OxKd~gP06T>tQ>G6@_2OC>%MR8dT35^9O^jTGiOhl~{ ziU)D_7RxqMICXeG9Ls*(8an+45Ej8eG!IRueb-$#n(A+DUArDaD?%d5dKe>9YJl@C z6t)jy_2KHoH3!EJJcsni$WbtC^QKbXq8e}~FG^9`aM+rj`if46p8g8tI{dZZLeu8R^237_djWa**6ugOFP-mPwQAF6QOuJ73&cycWp+dH899X) zcJ9FV#lAzDQSq2>j^m~<;O9ocjq+E_iSaGtlc}=SyFLT%$T0gJT-SrmB@XP{iE~E| zr5G2R-OQy)084EkhO{$Tu9tL=_4PiYH`cP{4R^pN;mUyY(fQtSy!yMJ`EP`WE%T_@jc|y=_jR~eG-J5(SQOksyyQ6vJVdr z^wzg*ybq4xIQZO8G1PIUohtMwnRIcpLo2RXqa`b+HtqPi{OFgyA+_Sl3{O_JVG+Qw z2=JyacQP&U{py-3=?`6$654nD+<4cbBnyj#(q%1gc~bTa_w?*>9PK%}U*JQ`gZ~2F Wx`D8V2rwZ40000 + + NewAppVMDlg + + + + 0 + 0 + 507 + 209 + + + + Create New AppVM + + + + :/qubes.png:/qubes.png + + + + + + 0 + + + + Basic + + + + + + myappvm + + + + + + + true + + + + + + + Name & label: + + + + + + + + + + Use this template: + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + false + + + Allow networking + + + true + + + + + + + + Advanced + + + + + + Disk storage + + + + + + false + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 10000 + + + 2 + + + + + + + false + + + Allow to grow + + + + + + + GB + + + + + + + Private storage max. size + + + + + + + false + + + Include in backups + + + true + + + + + + + + + + Memory/CPU + + + + + + false + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 10000 + + + 100 + + + 400 + + + + + + + MB + + + + + + + false + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + + + + + VCPUs + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + NewAppVMDlg + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + NewAppVMDlg + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/qmgr.spec b/qmgr.spec new file mode 100644 index 0000000..d561d11 --- /dev/null +++ b/qmgr.spec @@ -0,0 +1,65 @@ +%{!?python_sitearch: %define python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)")} + +%{!?version: %define version %(cat version)} + +Name: qubes-manager +Version: %{version} +Release: 1 +Summary: The Graphical Qubes VM Manager. + +Group: Qubes +Vendor: Invisible Things Lab +License: GPL +URL: http://fixme +Requires: python, PyQt4, qubes-core-dom0 >= 1.0.3, kdebase +AutoReq: 0 + +%define _builddir %(pwd) + +%description +The Graphical Qubes VM Manager. + +%install + +mkdir -p $RPM_BUILD_ROOT/usr/bin/ +cp qubes-manager $RPM_BUILD_ROOT/usr/bin + +mkdir -p $RPM_BUILD_ROOT%{python_sitearch}/qubesmanager/ +cp qubesmanager/main.py $RPM_BUILD_ROOT%{python_sitearch}/qubesmanager +cp qubesmanager/qrc_resources.py $RPM_BUILD_ROOT%{python_sitearch}/qubesmanager +cp qubesmanager/__init__.py $RPM_BUILD_ROOT%{python_sitearch}/qubesmanager +cp qubesmanager/ui_newappvmdlg.py $RPM_BUILD_ROOT%{python_sitearch}/qubesmanager + +mkdir -p $RPM_BUILD_ROOT/usr/share/applications +cp qubes-manager.desktop $RPM_BUILD_ROOT/usr/share/applications +mkdir -p $RPM_BUILD_ROOT/etc/xdg/autostart/ +cp qubes-manager.desktop $RPM_BUILD_ROOT/etc/xdg/autostart/ + +%post +update-desktop-database &> /dev/null || : + +%postun +update-desktop-database &> /dev/null || : + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root,-) +/usr/bin/qubes-manager +%{python_sitearch}/qubesmanager/__init__.py +%{python_sitearch}/qubesmanager/__init__.pyo +%{python_sitearch}/qubesmanager/__init__.pyc +%{python_sitearch}/qubesmanager/main.py +%{python_sitearch}/qubesmanager/main.pyc +%{python_sitearch}/qubesmanager/main.pyo +%{python_sitearch}/qubesmanager/qrc_resources.py +%{python_sitearch}/qubesmanager/qrc_resources.pyc +%{python_sitearch}/qubesmanager/qrc_resources.pyo +%{python_sitearch}/qubesmanager/ui_newappvmdlg.py +%{python_sitearch}/qubesmanager/ui_newappvmdlg.pyc +%{python_sitearch}/qubesmanager/ui_newappvmdlg.pyo + + +/usr/share/applications/qubes-manager.desktop +/etc/xdg/autostart/qubes-manager.desktop diff --git a/qubes-manager b/qubes-manager new file mode 100755 index 0000000..3ab60e9 --- /dev/null +++ b/qubes-manager @@ -0,0 +1,5 @@ +#!/usr/bin/python2.6 +import qubesmanager.main + +qubesmanager.main.main() + diff --git a/qubes-manager.desktop b/qubes-manager.desktop new file mode 100644 index 0000000..36b3b78 --- /dev/null +++ b/qubes-manager.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Type=Application +Exec=qubes-manager +Path=/var/lib/qubes +Icon=/usr/share/qubes/icons/qubes.png +Terminal=false +Name=Qubes VM Manager +GenericName=Qubes VM Manager +StartupNotify=false +Categories=System; diff --git a/qubesmanager/.gitignore b/qubesmanager/.gitignore new file mode 100644 index 0000000..f580b22 --- /dev/null +++ b/qubesmanager/.gitignore @@ -0,0 +1,2 @@ +qrc_resources.py +ui_newappvmdlg.py diff --git a/qubesmanager/__init__.py b/qubesmanager/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/qubesmanager/main.py b/qubesmanager/main.py new file mode 100755 index 0000000..77e56a3 --- /dev/null +++ b/qubesmanager/main.py @@ -0,0 +1,759 @@ +#!/usr/bin/python2.6 +# +# The Qubes OS Project, http://www.qubes-os.org +# +# Copyright (C) 2010 Joanna Rutkowska +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# + +import sys +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +from qubes.qubes import QubesVmCollection +from qubes.qubes import QubesException +from qubes.qubes import qubes_store_filename +from qubes.qubes import QubesVmLabels +from qubes.qubes import dry_run +from qubes.qubes import qubes_guid_path +from qubes.qubes import QubesDaemonPidfile + +import qubesmanager.qrc_resources +import ui_newappvmdlg + +from pyinotify import WatchManager, Notifier, ThreadedNotifier, EventsCodes, ProcessEvent + +import subprocess +import time +import threading + +class QubesConfigFileWatcher(ProcessEvent): + def __init__ (self, update_func): + self.update_func = update_func + pass + + def process_IN_CLOSE_WRITE (self, event): + self.update_func() + +class VmStatusIcon(QLabel): + def __init__(self, vm, parent=None): + super (VmStatusIcon, self).__init__(parent) + self.vm = vm + (icon_pixmap, icon_sz) = self.set_vm_icon(self.vm) + self.setPixmap (icon_pixmap) + self.setFixedSize (icon_sz) + self.previous_power_state = vm.is_running() + + def update(self): + if self.previous_power_state != self.vm.is_running(): + (icon_pixmap, icon_sz) = self.set_vm_icon(self.vm) + self.setPixmap (icon_pixmap) + self.setFixedSize (icon_sz) + self.previous_power_state = self.vm.is_running() + + def set_vm_icon(self, vm): + if vm.qid == 0: + icon = QIcon (":/dom0.png") + elif vm.is_appvm(): + icon = QIcon (vm.label.icon_path) + elif vm.is_templete(): + icon = QIcon (":/templatevm.png") + elif vm.is_netvm(): + icon = QIcon (":/netvm.png") + else: + icon = QIcon() + + icon_sz = QSize (VmManagerWindow.row_height * 0.8, VmManagerWindow.row_height * 0.8) + if vm.is_running(): + icon_pixmap = icon.pixmap(icon_sz) + else: + icon_pixmap = icon.pixmap(icon_sz, QIcon.Disabled) + + return (icon_pixmap, icon_sz) + + +class VmInfoWidget (QWidget): + + def __init__(self, vm, parent = None): + super (VmInfoWidget, self).__init__(parent) + + layout0 = QHBoxLayout() + + label_name = QLabel (vm.name) + + self.vm_running = vm.is_running() + layout0.addWidget(label_name, alignment=Qt.AlignLeft) + + layout1 = QHBoxLayout() + + if vm.is_appvm(): + label_tmpl = QLabel ("" + vm.template_vm.name + "") + elif vm.is_templete(): + label_tmpl = QLabel ("TemplateVM") + elif vm.qid == 0: + label_tmpl = QLabel ("AdminVM") + elif vm.is_netvm(): + label_tmpl = QLabel ("NetVM") + else: + label_tmpl = QLabel ("") + + label_icon_networked = self.set_icon(":/networking.png", vm.is_networked()) + layout1.addWidget(label_icon_networked, alignment=Qt.AlignLeft) + + if vm.is_updateable(): + label_icon_updtbl = self.set_icon(":/updateable.png", True) + layout1.addWidget(label_icon_updtbl, alignment=Qt.AlignLeft) + + layout1.addWidget(label_tmpl, alignment=Qt.AlignLeft) + + layout1.addStretch() + + layout2 = QVBoxLayout () + layout2.addLayout(layout0) + layout2.addLayout(layout1) + + layout3 = QHBoxLayout () + self.vm_icon = VmStatusIcon(vm) + layout3.addWidget(self.vm_icon) + layout3.addSpacing (10) + layout3.addLayout(layout2) + + self.setLayout(layout3) + + def set_icon(self, icon_path, enabled = True): + label_icon = QLabel() + icon = QIcon (icon_path) + icon_sz = QSize (VmManagerWindow.row_height * 0.3, VmManagerWindow.row_height * 0.3) + icon_pixmap = icon.pixmap(icon_sz, QIcon.Disabled if not enabled else QIcon.Normal) + label_icon.setPixmap (icon_pixmap) + label_icon.setFixedSize (icon_sz) + return label_icon + + def update_vm_state (self, vm): + self.vm_icon.update() + +class LoadChartWidget (QWidget): + + def __init__(self, vm, parent = None): + super (LoadChartWidget, self).__init__(parent) + self.load = vm.get_cpu_total_load() if vm.is_running() else 0 + assert self.load >= 0 and self.load <= 100, "load = {0}".format(self.load) + self.load_history = [self.load] + + def update_load (self, vm): + self.load = vm.get_cpu_total_load() if vm.is_running() else 0 + assert self.load >= 0 and self.load <= 100, "load = {0}".format(self.load) + self.load_history.append (self.load) + self.repaint() + + def paintEvent (self, Event = None): + p = QPainter (self) + dx = 4 + + W = self.width() + H = self.height() - 5 + N = len(self.load_history) + if N > W/dx: + N = W/dx + self.load_history.pop(0) + + for i in range (0, N-1): + val = self.load_history[N- i - 1] + hue = 200 + sat = 70 + val*(255-70)/100 + color = QColor.fromHsv (hue, sat, 255) + pen = QPen (color) + pen.setWidth(dx-1) + p.setPen(pen) + if val > 0: + p.drawLine (W - i*dx - dx, H , W - i*dx - dx, H - (H - 5) * val/100) + +class VmRowInTable(object): + def __init__(self, vm, row_no, table): + self.vm = vm + self.row_no = row_no + + table.setRowHeight (row_no, VmManagerWindow.row_height) + + self.info_widget = VmInfoWidget(vm) + table.setCellWidget(row_no, 0, self.info_widget) + + self.load_widget = LoadChartWidget(vm) + table.setCellWidget(row_no, 1, self.load_widget) + + def update(self, counter): + self.info_widget.update_vm_state(self.vm) + if counter % 3 == 0: + self.load_widget.update_load(self.vm) + +class NewAppVmDlg (QDialog, ui_newappvmdlg.Ui_NewAppVMDlg): + def __init__(self, parent = None): + super (NewAppVmDlg, self).__init__(parent) + self.setupUi(self) + +vm_shutdown_timeout = 15000 # in msec + +class VmShutdownMonitor(QObject): + def __init__(self, vm): + self.vm = vm + + def check_if_vm_has_shutdown(self): + vm = self.vm + if not vm.is_running(): + return + + reply = QMessageBox.question(None, "VM Shutdown", + "The VM '{0}' hasn't shutdown within the last {1} seconds, do you want to kill it?
".format(vm_name, vm_shutdown_timeout/1000), + "Kill it!", "Wait another {0} seconds...".format(vm_shutdown_timeout/1000)) + + if reply == 0: + vm.force_shutdown() + else: + QTimer.singleShot (vm_shutdown_timeout, self.check_if_vm_has_shutdown) + +class ThreadMonitor(QObject): + def __init__(self): + self.success = True + self.error_msg = None + self.event_finished = threading.Event() + + def set_error_msg(self, error_msg): + self.success = False + self.error_msg = error_msg + self.set_finished() + + def is_finished(self): + return self.event_finished.is_set() + + def set_finished(self): + self.event_finished.set() + + +class VmManagerWindow(QMainWindow): + columns_widths = [200, 150] + row_height = 50 + max_visible_rows = 14 + update_interval = 1000 # in msec + show_inactive_vms = True + + def __init__(self, parent=None): + super(VmManagerWindow, self).__init__(parent) + + + self.action_createvm = self.createAction ("Create AppVM", slot=self.create_appvm, + icon="createvm", tip="Create a new AppVM") + + self.action_removevm = self.createAction ("Remove AppVM", slot=self.remove_appvm, + icon="removevm", tip="Remove an existing AppVM (must be stopped first)") + + self.action_resumevm = self.createAction ("Start/Resume VM", slot=self.resume_vm, + icon="resumevm", tip="Start/Resusme a VM") + + self.action_pausevm = self.createAction ("Pause VM", slot=self.pause_vm, + icon="pausevm", tip="Pause a running VM") + + self.action_shutdownvm = self.createAction ("Shutdown VM", slot=self.shutdown_vm, + icon="shutdownvm", tip="Shutdown a running VM") + + self.action_updatevm = self.createAction ("Update VM", slot=None, + icon="updateable", tip="Update VM (only for 'updateable' VMs, e.g. templates)") + + self.action_showallvms = self.createAction ("Show/Hide Inactive VMs", slot=None, checkable=True, + icon="showallvms", tip="Show/Hide Inactive VMs") + + self.action_showcpuload = self.createAction ("Show/Hide CPU Load chart", slot=self.showcpuload, checkable=True, + icon="showcpuload", tip="Show/Hide CPU Load chart") + + + self.action_removevm.setDisabled(True) + self.action_resumevm.setDisabled(True) + self.action_pausevm.setDisabled(True) + self.action_shutdownvm.setDisabled(True) + self.action_updatevm.setDisabled(True) + + self.action_showcpuload.setDisabled(True) + + self.toolbar = self.addToolBar ("Toolbar") + self.toolbar.setFloatable(False) + self.addActions (self.toolbar, (self.action_createvm, self.action_removevm, + None, + self.action_resumevm, self.action_pausevm, self.action_shutdownvm, self.action_updatevm, + None, + self.action_showcpuload, + )) + + self.table = QTableWidget() + self.setCentralWidget(self.table) + self.table.clear() + self.table.setColumnCount(len(VmManagerWindow.columns_widths)) + for (col, width) in enumerate (VmManagerWindow.columns_widths): + self.table.setColumnWidth (col, width) + + self.table.horizontalHeader().setStretchLastSection(True) + self.table.setAlternatingRowColors(True) + self.table.verticalHeader().hide() + self.table.horizontalHeader().hide() + self.table.setGridStyle(Qt.NoPen) + self.table.setSortingEnabled(False) + self.table.setSelectionBehavior(QTableWidget.SelectRows) + self.table.setSelectionMode(QTableWidget.SingleSelection) + + self.qvm_collection = QubesVmCollection() + self.setWindowTitle("Qubes VM Manager") + + self.connect(self.table, SIGNAL("itemSelectionChanged()"), self.table_selection_changed) + + self.fill_table() + + tbl_W = 0 + for (i, w) in enumerate(VmManagerWindow.columns_widths): + tbl_W += w + + # TODO: '6' -- WTF?! + tbl_H = self.toolbar.height() + 6 + \ + self.table.horizontalHeader().height() + 6 + + n = self.table.rowCount(); + if n > VmManagerWindow.max_visible_rows: + n = VmManagerWindow.max_visible_rows + for i in range (0, n): + tbl_H += self.table.rowHeight(i) + + self.setMinimumWidth(tbl_W) + self.setGeometry(self.x(), self.y(), self.x() + tbl_W, self.y() + tbl_H) + + self.counter = 0 + self.shutdown_monitor = {} + QTimer.singleShot (self.update_interval, self.update_table) + + def addActions(self, target, actions): + for action in actions: + if action is None: + target.addSeparator() + else: + target.addAction(action) + + + def createAction(self, text, slot=None, shortcut=None, icon=None, + tip=None, checkable=False, signal="triggered()"): + action = QAction(text, self) + if icon is not None: + action.setIcon(QIcon(":/%s.png" % icon)) + if shortcut is not None: + action.setShortcut(shortcut) + if tip is not None: + action.setToolTip(tip) + action.setStatusTip(tip) + if slot is not None: + self.connect(action, SIGNAL(signal), slot) + if checkable: + action.setCheckable(True) + return action + + + def get_vms_list(self): + self.qvm_collection.lock_db_for_reading() + self.qvm_collection.load() + self.qvm_collection.unlock_db() + + if self.show_inactive_vms: + vms_list = [vm for vm in self.qvm_collection.values()] + else: + vms_list = [vm for vm in self.qvm_collection.values() if vm.is_running()] + + no_vms = len (vms_list) + vms_to_display = [] + + # First, the NetVMs... + for netvm in vms_list: + if netvm.is_netvm(): + vms_to_display.append (netvm) + + # Now, the templates... + for tvm in vms_list: + if tvm.is_templete(): + vms_to_display.append (tvm) + + label_list = QubesVmLabels.values() + label_list.sort(key=lambda l: l.index) + for label in [label.name for label in label_list]: + for appvm in [vm for vm in vms_list if (vm.is_appvm() and vm.label.name == label)]: + vms_to_display.append(appvm) + + assert len(vms_to_display) == no_vms + return vms_to_display + + def fill_table(self): + self.table.clear() + vms_list = self.get_vms_list() + self.table.setRowCount(len(vms_list)) + + vms_in_table = [] + + for (row_no, vm) in enumerate(vms_list): + vm_row = VmRowInTable (vm, row_no, self.table) + vms_in_table.append (vm_row) + + self.vms_list = vms_list + self.vms_in_table = vms_in_table + self.reload_table = False + + + def mark_table_for_update(self): + self.reload_table = True + + # When calling update_table() directly, always use out_of_schedule=True! + def update_table(self, out_of_schedule=False): + if self.reload_table: + self.fill_table() + + for vm_row in self.vms_in_table: + vm_row.update(self.counter) + + self.table_selection_changed() + + if not out_of_schedule: + self.counter += 1 + QTimer.singleShot (self.update_interval, self.update_table) + + + def table_selection_changed (self): + vm = self.get_selected_vm() + + # Update available actions: + + self.action_removevm.setEnabled(not vm.installed_by_rpm and not vm.is_running()) + #self.action_resumevm.setEnabled(not vm.is_running()) + #self.action_pausevm.setEnabled(vm.is_running() and vm.qid != 0) + self.action_shutdownvm.setEnabled(vm.is_running() and vm.qid != 0) + + def closeEvent (self, event): + self.hide() + event.ignore() + + def create_appvm(self): + dialog = NewAppVmDlg() + + + # Theoretically we should be locking for writing here and unlock + # only after the VM creation finished. But the code would be more messy... + # Instead we lock for writing in the actual worker thread + + self.qvm_collection.lock_db_for_reading() + self.qvm_collection.load() + self.qvm_collection.unlock_db() + + label_list = QubesVmLabels.values() + label_list.sort(key=lambda l: l.index) + for (i, label) in enumerate(label_list): + dialog.vmlabel.insertItem(i, label.name) + dialog.vmlabel.setItemIcon (i, QIcon(label.icon_path)) + + template_vm_list = [vm for vm in self.qvm_collection.values() if vm.is_templete()] + + default_index = 0 + for (i, vm) in enumerate(template_vm_list): + if vm is self.qvm_collection.get_default_template_vm(): + default_index = i + dialog.template_name.insertItem(i, vm.name + " (default)") + else: + dialog.template_name.insertItem(i, vm.name) + dialog.template_name.setCurrentIndex(default_index) + + dialog.vmname.selectAll() + dialog.vmname.setFocus() + + if dialog.exec_(): + vmname = str(dialog.vmname.text()) + if self.qvm_collection.get_vm_by_name(vmname) is not None: + QMessageBox.warning (None, "Incorrect AppVM Name!", "A VM with the name {0} already exists in the system!".format(vmname)) + return + + label = label_list[dialog.vmlabel.currentIndex()] + template_vm = template_vm_list[dialog.template_name.currentIndex()] + + thread_monitor = ThreadMonitor() + thread = threading.Thread (target=self.do_create_appvm, args=(vmname, label, template_vm, thread_monitor)) + thread.daemon = True + thread.start() + + progress = QProgressDialog ("Creating new AppVM {0}...".format(vmname), "", 0, 0) + progress.setCancelButton(None) + progress.setModal(True) + progress.show() + + while not thread_monitor.is_finished(): + app.processEvents() + time.sleep (0.1) + + progress.hide() + + if thread_monitor.success: + trayIcon.showMessage ("Qubes Manager", "VM '{0}' has been created.".format(vmname), msecs=3000) + else: + QMessageBox.warning (None, "Error creating AppVM!", "ERROR: {0}".format(thread_monitor.error_msg)) + + + def do_create_appvm (self, vmname, label, template_vm, thread_monitor): + try: + self.qvm_collection.lock_db_for_writing() + self.qvm_collection.load() + + vm = self.qvm_collection.add_new_appvm(vmname, template_vm, label = label) + vm.create_on_disk(verbose=False) + vm.add_to_xen_storage() + self.qvm_collection.save() + except Exception as ex: + thread_monitor.set_error_msg (str(ex)) + vm.remove_from_disk() + finally: + self.qvm_collection.unlock_db() + + thread_monitor.set_finished() + + + def get_selected_vm(self): + row_index = self.table.currentRow() + assert self.vms_in_table[row_index] is not None + vm = self.vms_in_table[row_index].vm + return vm + + def remove_appvm(self): + vm = self.get_selected_vm() + assert not vm.is_running() + assert not vm.installed_by_rpm + + self.qvm_collection.lock_db_for_reading() + self.qvm_collection.load() + self.qvm_collection.unlock_db() + + if vm.is_templete(): + dependent_vms = self.qvm_collection.get_vms_based_on(vm.qid) + if len(dependent_vms) > 0: + QMessageBox.warning (None, "Warning!", + "This Template VM cannot be removed, because there is at least one AppVM that is based on it.
" + "If you want to remove this Template VM and all the AppVMs based on it," + "you should first remove each individual AppVM that uses this template.") + + return + + reply = QMessageBox.question(None, "VM Removal Confirmation", + "Are you sure you want to remove the VM '{0}'?
" + "All data on this VM's private storage will be lost!".format(vm.name), + QMessageBox.Yes | QMessageBox.Cancel) + + + if reply == QMessageBox.Yes: + + thread_monitor = ThreadMonitor() + thread = threading.Thread (target=self.do_remove_vm, args=(vm, thread_monitor)) + thread.daemon = True + thread.start() + + progress = QProgressDialog ("Removing VM: {0}...".format(vm.name), "", 0, 0) + progress.setCancelButton(None) + progress.setModal(True) + progress.show() + + while not thread_monitor.is_finished(): + app.processEvents() + time.sleep (0.1) + + progress.hide() + + if thread_monitor.success: + trayIcon.showMessage ("Qubes Manager", "VM '{0}' has been removed.".format(vm.name), msecs=3000) + else: + QMessageBox.warning (None, "Error removing M!", "ERROR: {0}".format(thread_monitor.error_msg)) + + def do_remove_vm (self, vm, thread_monitor): + try: + self.qvm_collection.lock_db_for_writing() + self.qvm_collection.load() + + #TODO: the following two conditions should really be checked by qvm_collection.pop() overload... + if vm.is_templete() and qvm_collection.default_template_qid == vm.qid: + qvm_collection.default_template_qid = None + if vm.is_netvm() and qvm_collection.default_netvm_qid == vm.qid: + qvm_collection.default_netvm_qid = None + + vm.remove_from_xen_storage() + vm.remove_from_disk() + self.qvm_collection.pop(vm.qid) + self.qvm_collection.save() + except Exception as ex: + thread_monitor.set_error_msg (str(ex)) + finally: + self.qvm_collection.unlock_db() + + thread_monitor.set_finished() + + def resume_vm(self): + pass + + def pause_vm(self): + pass + + def shutdown_vm(self): + vm = self.get_selected_vm() + assert vm.is_running() + + reply = QMessageBox.question(None, "VM Shutdown Confirmation", + "Are you sure you want to power down the VM '{0}'?
" + "This will shutdown all the running applications within this VM.".format(vm.name), + QMessageBox.Yes | QMessageBox.Cancel) + + if reply == QMessageBox.Yes: + try: + subprocess.check_call (["/usr/sbin/xm", "shutdown", vm.name]) + except Exception as ex: + QMessageBox.warning (None, "Error shutting down VM!", "ERROR: {0}".format(ex)) + return + + trayIcon.showMessage ("Qubes Manager", "VM '{0}' is shutting down...".format(vm.name), msecs=3000) + self.shutdown_monitor[vm.qid] = VmShutdownMonitor (vm) + QTimer.singleShot (vm_shutdown_timeout, self.shutdown_monitor[vm.qid].check_if_vm_has_shutdown) + + def showcpuload(self): + pass + + +class QubesTrayIcon(QSystemTrayIcon): + def __init__(self, icon): + QSystemTrayIcon.__init__(self, icon) + self.menu = QMenu() + + action_showmanager = self.createAction ("Open VM Manager", slot=show_manager, icon="qubes") + action_backup = self.createAction ("Make backup") + action_preferences = self.createAction ("Preferences") + action_set_netvm = self.createAction ("Set default NetVM", icon="networking") + action_sys_info = self.createAction ("System Info", icon="dom0") + action_exit = self.createAction ("Exit", slot=exit_app) + + action_backup.setDisabled(True) + action_preferences.setDisabled(True) + action_set_netvm.setDisabled(True) + action_sys_info.setDisabled(True) + + self.addActions (self.menu, (action_showmanager, action_backup, action_sys_info, None, action_preferences, action_set_netvm, None, action_exit)) + + self.setContextMenu(self.menu) + + self.connect (self, SIGNAL("activated (QSystemTrayIcon::ActivationReason)"), self.icon_clicked) + + def icon_clicked(self, reason): + if reason == QSystemTrayIcon.Context: + # Handle the right click normally, i.e. display the context menu + return + else: + show_manager() + + def addActions(self, target, actions): + for action in actions: + if action is None: + target.addSeparator() + else: + target.addAction(action) + + + def createAction(self, text, slot=None, shortcut=None, icon=None, + tip=None, checkable=False, signal="triggered()"): + action = QAction(text, self) + if icon is not None: + action.setIcon(QIcon(":/%s.png" % icon)) + if shortcut is not None: + action.setShortcut(shortcut) + if tip is not None: + action.setToolTip(tip) + action.setStatusTip(tip) + if slot is not None: + self.connect(action, SIGNAL(signal), slot) + if checkable: + action.setCheckable(True) + return action + + +def show_manager(): + manager_window.show() + + +def exit_app(): + notifier.stop() + app.exit() + + +# Bases on the original code by: +# Copyright (c) 2002-2007 Pascal Varet + +def handle_exception( exc_type, exc_value, exc_traceback ): + import sys + import os.path + import traceback + + filename, line, dummy, dummy = traceback.extract_tb( exc_traceback ).pop() + filename = os.path.basename( filename ) + error = "%s: %s" % ( exc_type.__name__, exc_value ) + + QMessageBox.critical(None, "Houston, we have a problem...", + "Whoops. A critical error has occured. This is most likely a bug " + "in Qubes Manager.

" + "%s" % error + + "at line %d of file %s.

" + % ( line, filename )) + + #sys.exit(1) + +def main(): + + + # Avoid starting more than one instance of the app + lock = QubesDaemonPidfile ("qubes-manager") + if lock.pidfile_exists(): + if lock.pidfile_is_stale(): + lock.remove_pidfile() + print "Removed stale pidfile (has the previous daemon instance crashed?)." + else: + exit (0) + + lock.create_pidfile() + + global app + app = QApplication(sys.argv) + app.setOrganizationName("The Qubes Project") + app.setOrganizationDomain("http://qubes-os.org") + app.setApplicationName("Qubes VM Manager") + app.setWindowIcon(QIcon(":/qubes.png")) + + sys.excepthook = handle_exception + + global manager_window + manager_window = VmManagerWindow() + wm = WatchManager() + mask = EventsCodes.OP_FLAGS.get('IN_CLOSE_WRITE') + + global notifier + notifier = ThreadedNotifier(wm, QubesConfigFileWatcher(manager_window.mark_table_for_update)) + notifier.start() + wdd = wm.add_watch(qubes_store_filename, mask) + + global trayIcon + trayIcon = QubesTrayIcon(QIcon(":/qubes.png")) + trayIcon.show() + + app.exec_() + trayIcon = None + diff --git a/resources.qrc b/resources.qrc new file mode 100644 index 0000000..7948aed --- /dev/null +++ b/resources.qrc @@ -0,0 +1,21 @@ + + +icons/qubes.png +icons/appvm.png +icons/netvm.png +icons/networking.png +icons/dom0.png +icons/storagevm.png +icons/templatevm.png +icons/updateable.png +icons/home.png +icons/root.png +icons/createvm.png +icons/removevm.png +icons/shutdownvm.png +icons/resumevm.png +icons/pausevm.png +icons/showallvms.png +icons/showcpuload.png + + diff --git a/version b/version new file mode 100644 index 0000000..17e51c3 --- /dev/null +++ b/version @@ -0,0 +1 @@ +0.1.1