From 8e5100ba880c9287502f79d42825ddfcca18d197 Mon Sep 17 00:00:00 2001 From: cedrozor Date: Sun, 26 Jan 2020 03:30:57 +0100 Subject: [PATCH] updated myrtille prerequisites fine tuned installation scripts any uninstall failure is now logged but the uninstall continues, so that it can complete and re-install be possible! --- CHANGELOG | 9 +++++---- DOCUMENTATION.md | 12 +++++------- .../Myrtille.Admin.Services.Install.ps1 | Bin 3104 -> 2076 bytes .../Myrtille.Admin.Services.Uninstall.ps1 | Bin 2984 -> 2156 bytes Myrtille.Admin.Services/ServicesInstaller.cs | 7 ++++--- .../Myrtille.Services.Install.ps1 | Bin 3026 -> 2046 bytes .../Myrtille.Services.Uninstall.ps1 | Bin 2864 -> 2072 bytes Myrtille.Services/ServicesInstaller.cs | 7 ++++--- Myrtille.Web/Myrtille.Web.Install.ps1 | Bin 10598 -> 8176 bytes Myrtille.Web/Myrtille.Web.Uninstall.ps1 | Bin 4368 -> 3606 bytes Myrtille.Web/src/WebInstaller.cs | 7 ++++--- README.md | 2 +- 12 files changed, 23 insertions(+), 21 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index d652b86..9007f0f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,4 +1,8 @@ -2020-01-25 Version 2.8.0 (stable) +2020-01-26 Version 2.8.0 (stable) + pre-requisites change; myrtille now requires Windows 8.1 or Windows Server 2012 R2 or greater + the installer is now shipped without bootstraper (Setup.exe); open the myrtille msi file directly instead + the installer now installs the myrtille pre-requisites automatically (roles and features); the related powershell scripts can also be run manually from outside the installer, if needed + the installer now supports upgrading (thanks to Orca, which allows finer control over msi files), removing the need to uninstall a previous version first myrtille is now available as a docker image (see DOCUMENTATION.MD) resynced FreeRDP (among many things, fixes some issues related to the clipboard and audio) fixed session disconnect occuring under some circumstances on clipboard paste @@ -6,9 +10,6 @@ simplified hosts management (no domain or enterprise mode required); default login: admin/admin (changed upon first login) updated the enterprise mode so that a member of "EnterpriseAdminGroup" can connect an host whatever the allowed groups or users defined on it (thanks dgcom) fixed an issue with the enterprise mode, which prompted to change the password due to expiration whereas the expiration date was just not set (thanks dgcom) - the installer is now shipped without bootstraper (Setup.exe); open Myrtille.msi directly instead - the installer now installs the myrtille pre-requisites automatically (roles and features); the related script (Myrtille.Web\Install.ps1) can also be run manually from outside the installer, if needed - the installer now supports upgrading (thanks to Orca, which allows finer control over msi files), removing the need to uninstall a previous version first security protocol is now configurable for RDP over VM bus user domain is now configurable whatever the protocol and displayed into the toolbar, if defined updated comments to drain disconnected sessions when using a connection broker in HA mode (myrtille services config) diff --git a/DOCUMENTATION.md b/DOCUMENTATION.md index ed2c874..43cd936 100644 --- a/DOCUMENTATION.md +++ b/DOCUMENTATION.md @@ -41,19 +41,17 @@ I hope you will enjoy Myrtille! :) Special thanks to Catalin Trifanescu for its support. ## Installation -You need at least IIS 7 before installing myrtille (the HTTP(S) to RDP/SSH gateway). It installs as a role on Windows Servers and as a feature on others Windows versions. +Starting from version 2.8.0, the Myrtille requirements change: Windows 8.1 or Windows Server 2012 R2 or greater. This is partly because of the automated installation of the roles and features required by myrtille (which requires a modern powershell) and partly to deliver the best user experience possible (fast display and audio support), as HTML5 websockets (supported by all browsers nowadays) are only available in IIS 8.0+ (Windows 8.1 or Windows Server 2012 R2 or greater). -**CAUTION! If you want to use websockets**, you need IIS 8 or greater with the websocket protocol enabled (disabled by default; see https://www.iis.net/configreference/system.webserver/websocket). +That said, Myrtille will continue to fallback to HTML4 (xhr and long-polling) if websockets are not enabled into IIS (it's optional) or if the websocket traffic is blocked by any network equipment. -The .NET 4.5+ framework can be installed automatically by the myrtille installer (Setup.exe), enabled as a feature of IIS (Web Server role > Applications Development > ASP.NET 4.5 on Windows Server 2012) or installed separately (https://www.microsoft.com/en-us/download/details.aspx?id=30653). +The .NET 4.5+ framework can be installed automatically by the myrtille installer, enabled as a feature of IIS (Web Server role > Applications Development > ASP.NET 4.5 on Windows Server 2012) or installed separately (https://www.microsoft.com/en-us/download/details.aspx?id=30653). Into the roles and features management, ensure you have enabled **HTTP Activation** under ".NET Framework 4.5+ Features" > "WCF Services" (required by the Myrtille services and REST API). The installer does install myrtille under the IIS default website and creates a custom application pool ("MyrtilleAppPool"). If you want to use another website or application pool, you can change it manually afterward (with the IIS manager). All releases here: https://github.com/cedrozor/myrtille/releases -- Setup.exe (preferred installation method): setup bootstrapper -- Myrtille.msi: MSI package (x86) ## Docker From version 2.8.0, Myrtille is available as a docker image. @@ -163,7 +161,7 @@ If your browser machine is on the same network as the gateway or the remote serv If your remote server have internet access, you can also use a cloud printer (such a Google Print). ## Security -The installer can create a self-signed certificate for myrtille (so you can use it at https://myserver/myrtille), but you can set your own certificate (if you wish). +The installer can create a self-signed certificate for myrtille (so you can use it at https://myserver/myrtille), but you can set your own certificate (if you wish) to prevent the users from having to add a security exception into their browser. ## Configuration / Performance tweaks / Debug Both the gateway and services have their own .NET config files; the gateway also uses XDT transform files to adapt the settings depending on the current solution configuration. @@ -369,7 +367,7 @@ See the Myrtille.Admin.Web **mockup** to see how to implement Myrtille into your - the clipboard synchronization requires Chrome (or async clipboard API support) and HTTPS connection and is limited to text only and 1MB max ## Troubleshoot -First at all, ensure the Myrtille prerequisites are met (IIS 7 or greater (preferably IIS 8+ with websocket protocol enabled) and .NET 4.5+). Note that IIS must be installed separately, before running the installer (see "Installation"). +First at all, ensure the Myrtille prerequisites are met (see "Installation"). Also please read notes and limitations above. diff --git a/Myrtille.Admin.Services/Myrtille.Admin.Services.Install.ps1 b/Myrtille.Admin.Services/Myrtille.Admin.Services.Install.ps1 index c16e1d5735b2b1ad1c39ca89b827f988fdd02342..6f053f8af8f7921b624c002f66644530a7e8e48d 100644 GIT binary patch delta 205 zcmZ1=F-L&u|G$kcYK)WPn4>0VF`g1EVJKp#WZ-4sVyFg_oRb4N>=`*HSF+6Btj4;F zkv)|mhoP7ub+Rv)?&NRmLEM}SwP1xnEtBmz^(Pl_CQQD>nZXJ&f^%{zw=yRu+^Ame yXmOZ&h^}OYM1~TEWQL5%XW7*!pW)KMrB4B-4{R<&DnkWBCQzpWgCW@VS_S|G`Y6i) delta 881 zcmb7?O-mb56o%i4PR0=erEXjp9h^|j!f5EGAR<946kN4}3n?`w(G29vWTGu10bRO0 zJCR~n-B$Voy6->gru98{J|NPK4EN5x=bn%EJonzcxS!qr_t(dJG;oR`0`$2Wz{3h{ zLv&E#u7Wz+JnL`_5Yng0xyyeJ(`GzmURiQw{T>~gpc;<@I&_%mEk1J{V&BY7Y|&n4 z5f2v}J*LuhZ7iceYvh~w6zNewlM!0Bgb(xxIjd!e7V{+8MK4f7PuKC;is%)@sXdThsqIKz<$BJ+qrXDtM#(S=lou81!8GG0J40wytN|{7Nl#$-BUP9MUW2B6-zHPM2H|O9@+I7n6 M>GReH`IKW3kF$-SGXMYp diff --git a/Myrtille.Admin.Services/Myrtille.Admin.Services.Uninstall.ps1 b/Myrtille.Admin.Services/Myrtille.Admin.Services.Uninstall.ps1 index 680ea14cb9fec943224f9dedfe64f3f2c3ef37ff..ef5b94acc03aea7e6071d0865a55bd2aafda0d1c 100644 GIT binary patch delta 220 zcmZ1>{zic5|G$YY8z#SCikkT4lwb)%5kn;dF9R1tHJId_e3IFok#jOT%hb*5SU4Cb zUtl%Z%)}KRfQau|vkQYZU!>Q0W}3gYEtfXIN% z@9@= delta 918 zcmaJ=&1w@-7(J75I*c?Rh;-AGX(y%4qOn;N3L;W!#cmXt(L{$| zU4&R-td9h1+^wOGn7M>c7d_TgxwiSv=1B928*yH5>CEu|>o4goA^ zh?DHN#jMd%g}BSw<*Xv&E>4L`&mY`HV?&3iN-q%H*r zs8bJIqiWO4h=qCV&dxqywrPabjW_L7y1I6tK2c9a-udNC#R@n`JFLr|S2Fa`e8wlZ z%0G}V-hAO-yy{h(E@hmB|1!!G|E8})>7pUAzaYuPv-R=qh^S&1 2>&1 | Tee-Object -FilePath '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "log", "Myrtille.Admin.Services.Install.log") + "'" + "\""; + " | Tee-Object -FilePath '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "log", "Myrtille.Admin.Services.Install.log") + "'" + "\""; process.Start(); process.WaitForExit(); @@ -162,7 +162,7 @@ private void DoUninstall() process.StartInfo.Arguments = "-ExecutionPolicy Bypass" + " -Command \"& '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "bin", "Myrtille.Admin.Services.Uninstall.ps1") + "'" + " -DebugMode " + (debug ? "1" : "0") + - " 3>&1 2>&1 | Tee-Object -FilePath '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "log", "Myrtille.Admin.Services.Uninstall.log") + "'" + "\""; + " | Tee-Object -FilePath '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "log", "Myrtille.Admin.Services.Uninstall.log") + "'" + "\""; process.Start(); process.WaitForExit(); @@ -177,8 +177,9 @@ private void DoUninstall() } catch (Exception exc) { + // in case of any error, don't rethrow the exception or myrtille won't be uninstalled otherwise (rollback action) + // if myrtille can't be uninstalled, it can't be re-installed either! (at least, with an installer of the same product code) Context.LogMessage(string.Format("Failed to uninstall Myrtille.Admin.Services ({0})", exc)); - throw; } } } diff --git a/Myrtille.Services/Myrtille.Services.Install.ps1 b/Myrtille.Services/Myrtille.Services.Install.ps1 index 71c8015e38315177e219fadc0337ad6360a6c269..dbe13429554d232f52fb808843c09dce5f10a279 100644 GIT binary patch delta 207 zcmca4{*RyO|G$kcYK)WPn4>0VF`g1EVJKp#WZ-4sVyFg_oRjrg>=`*H=d$!~=3_m> z$ezlO!%)nSI+>eGck(hufyoW5LX+7zRJb`AYQY+SS|^Kg>Q8p#44Hg_U1stQP6t+y zah#LIxs^FN;l|o?M^9eH&c~U|kjPNNkj#)Vc{jWIeU`hzp}u z4xTf2JI-)v`C(&+|2FM08|&bT@AIpZVAH7eiT)nFrOynjgsWm|u!VCLgt~~E_$WWp z`L#e~6}FEK9GR!was_W`DdRfpdgOgdtBMmMpD^+`8d5$aU&zno_uPf?*sK`h>vbvh zCt){Cvj)1dOm96ppyin%nuf=~u+TwuBywWok`y02-LYX)@<`TIb*f>TK*wNLY9q8{ znJLK=>x~_2tixHJ>L$OEvkiSID`SROp--mPGr6*koZWuTL})T2X%&Q%MddA!}=q)G)ksd9SrdNl*1B`c+#aV^6^=9%}qG5c7-`_En< J>V0*~xC1TNr5*qP diff --git a/Myrtille.Services/Myrtille.Services.Uninstall.ps1 b/Myrtille.Services/Myrtille.Services.Uninstall.ps1 index a87f469d5c3a9362c0e51c90635488c7582e18da..657bd7cb149764f8de393e5f38e652a514eb7be3 100644 GIT binary patch delta 253 zcmdlWHba2v|G$YY8z#SCikkT4lwb)%5kn;dF9R1tHJId_yqDRYk#q8I=FZ8}SUyZ% zz-qAh5~~#B6f^yDTE9bRG#RDc->QJl(9 P0dzqL&;^EIBWoD|kIplF delta 918 zcma)5%}N_l7(K}_hA9oWu^?0#okYzdK^LV3ttD#3MOQ82!i5==sDWgXm_#d5+*S}l z@1`Jq0uchfg^RvH*L{Mn3a#h6Gk1dGqJ+6~@Aq@gJ?EQz8}7eY`S;huM^w>94>jy_ z*MW;XV?6{Y@>E0x4dwzq9dudab8YgS#xwm~B>U=l;_hTe_mr8fF&_};Jw9{a#fDz@ zu*`Uc94?Oew1^~V4a^|JXjp4%a;(T;j~&8Vz$aF8xk{vmI&lno)P15!$`M5l^8_%U zF22Oq&BTp{%EepO&c+oUPmPG!<$H(cE{Wyhg5TiJr@)FfYn$;pqtk~>i-Qlnlw=hL zY>0fhxY<(Y_IO$h7E=T4!d1TQeYRW7=%-MVq%rqnwC`2t~4Xj;@5#VL?v0Zm?{(n%i##km>#-47o&%h8QdV|SAXpM z*i(GsPLsaGT(AF!DdY)P8A=CLHJX}MQ$uUZgRjG*o?R-`TF6u5tYz-P7>?KH+{5o6 jAVyPrL8nwZ<=NUP^*y!uW`Jn)KmHTQXKQlCn;h-|VgjP~ diff --git a/Myrtille.Services/ServicesInstaller.cs b/Myrtille.Services/ServicesInstaller.cs index 60adc2b..2e100a9 100644 --- a/Myrtille.Services/ServicesInstaller.cs +++ b/Myrtille.Services/ServicesInstaller.cs @@ -73,7 +73,7 @@ public override void Install( " -Command \"& '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "bin", "Myrtille.Services.Install.ps1") + "'" + " -BinaryPath '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "bin", "Myrtille.Services.exe") + "'" + " -DebugMode " + (debug ? "1" : "0") + - " 3>&1 2>&1 | Tee-Object -FilePath '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "log", "Myrtille.Services.Install.log") + "'" + "\""; + " | Tee-Object -FilePath '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "log", "Myrtille.Services.Install.log") + "'" + "\""; process.Start(); process.WaitForExit(); @@ -242,7 +242,7 @@ private void DoUninstall() process.StartInfo.Arguments = "-ExecutionPolicy Bypass" + " -Command \"& '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "bin", "Myrtille.Services.Uninstall.ps1") + "'" + " -DebugMode " + (debug ? "1" : "0") + - " 3>&1 2>&1 | Tee-Object -FilePath '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "log", "Myrtille.Services.Uninstall.log") + "'" + "\""; + " | Tee-Object -FilePath '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "log", "Myrtille.Services.Uninstall.log") + "'" + "\""; process.Start(); process.WaitForExit(); @@ -261,8 +261,9 @@ private void DoUninstall() } catch (Exception exc) { + // in case of any error, don't rethrow the exception or myrtille won't be uninstalled otherwise (rollback action) + // if myrtille can't be uninstalled, it can't be re-installed either! (at least, with an installer of the same product code) Context.LogMessage(string.Format("Failed to uninstall Myrtille.Services ({0})", exc)); - throw; } } } diff --git a/Myrtille.Web/Myrtille.Web.Install.ps1 b/Myrtille.Web/Myrtille.Web.Install.ps1 index 4c85dd5c3c6977168a5a1b7912744412a9bf7603..ceed795792b8c03a6ea2d587b17d20c62f1162f9 100644 GIT binary patch delta 601 zcmaDB^ueC#|G$kc(-<>Z4>!jmPqg*Ja-dBr|?6(`r^P0~V> zAMhG6a!wZHljr1QsAk}0;9}t1Y|6*XIN6L}Nfs`|zzKxP3PARUuQLoV;*1klZP(%#Ug;=VW$~rR-2$ zKofK)iF&}fKux@y47EsxDT|e|f)!8x&m%keidc{)h=)*-%8P*R%ACKUpt6((~jt4v-a#lZ@(aILiX zWItskuyr-c4Jg)WtNa9;uu|4~a-QluxM_aMa+536Tqbi#1pxKRO?J^hHgUCvG9o4? wU)G2Q>Z_f6lSh6s3#ZIv6D1v}%^2zwV1Wn;xKxG;hD=~ID=-*>gR+(Z0Bx^)`Tzg` literal 10598 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 CE2SI& literal 4368 zcmdUzO>Y}V42F4Cf&7PoETGasMssb^gX<)%fz&o^7dp5>Vq21}VzpALbzCFKUr+kH zL(Q%})-qHCO$%XXcexx6$su2I^!d|{o!G$M+O3W3Po8ELtPAbda@*r=&-ymzTh2AJ z0-g)T3HK-VO}x%+ACA6d%r5Mw$lH(OwY9BduOinm^E7u1O*2FMom)lM>;XJ&`xU+% ziD{*K`_WqVg7*v^2Bl1w5$xP9(P+ZgSMWW9;}ZR^kuyQcAgA(U&@bnlEJEg-qNj_svA$D5~& z0UeJR4;jz6@AK_w{^iVmL8nuwJ?@8*v&UN{t65qyjJtFd^^q0<*?&cyWkrFV(oP-- z_MU5sooNqRP@OmNbl_O@%_$rOn#fzXSlch9x8X~(ujVUs><8v2YOs%`maTGLTFJfn zUCFV-%rSDbCxQErQQAvy$shCch){H1LeHSy@vMklj$M5l*gN>OOY(~L+->PbO$Nxk zEx#Valfik#&IY3QK6+_}F3N+`xc)S1a?ENI-jyS>QuiKI`Fa5NQItE4qoT#LNSTup z9bqkccG+Xas^ZYOoTQD)@mo-$1!ED@Z^4p;@=y{ z@So60vGI=kzprzJR7oG%zG=rRZTncTju)Hv$#*%e}EAgcJCLM*N z!mj}ttvs7BDvy$v|B2Q@j@QJj@JAUkMXqPxENuDD&O1h)F2^*a8JlLgR<(EWsWbOxoK^o z%qGlO)#J-&<70mPujb?9djDTD@-fS{%gOp|5^`kJvo6uEzAfinSSaN3?oR!j*% zi%!bFdGC^H=swvcEbWtB>H)?`S$VPNh@KKP`$)|PbddF@^ z8|hMYU_Q4EhD)}0aOy%Q$n_n1C}O-9mL;ywa&=9%t)u+I@z<~h6*k3^$H@uSq?+9= z<4+hV?oD-Yab|s&vTdX+BD2R#s_kF1YuVO{uaB9V_ieRK2O@JDB-HOC$&pbMDdGDx`?ICC7=gdew kt4@Y_)GH@P2XvqMdBv`}GIgZFiq#Xb&amlQI+u3rZ?crN@&Et; diff --git a/Myrtille.Web/src/WebInstaller.cs b/Myrtille.Web/src/WebInstaller.cs index 42594b4..4326c90 100644 --- a/Myrtille.Web/src/WebInstaller.cs +++ b/Myrtille.Web/src/WebInstaller.cs @@ -78,7 +78,7 @@ public override void Install( " -InstallPath '" + Path.GetFullPath(Context.Parameters["targetdir"]) + "'" + " -SslCert " + (!string.IsNullOrEmpty(Context.Parameters["SSLCERT"]) ? "1" : "0") + " -DebugMode " + (debug ? "1" : "0") + - " 3>&1 2>&1 | Tee-Object -FilePath '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "log", "Myrtille.Web.Install.log") + "'" + "\""; + " | Tee-Object -FilePath '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "log", "Myrtille.Web.Install.log") + "'" + "\""; process.Start(); process.WaitForExit(); @@ -243,7 +243,7 @@ private void DoUninstall() process.StartInfo.Arguments = "-ExecutionPolicy Bypass" + " -Command \"& '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "Myrtille.Web.Uninstall.ps1") + "'" + " -DebugMode " + (debug ? "1" : "0") + - " 3>&1 2>&1 | Tee-Object -FilePath '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "log", "Myrtille.Web.Uninstall.log") + "'" + "\""; + " | Tee-Object -FilePath '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "log", "Myrtille.Web.Uninstall.log") + "'" + "\""; process.Start(); process.WaitForExit(); @@ -258,8 +258,9 @@ private void DoUninstall() } catch (Exception exc) { + // in case of any error, don't rethrow the exception or myrtille won't be uninstalled otherwise (rollback action) + // if myrtille can't be uninstalled, it can't be re-installed either! (at least, with an installer of the same product code) Context.LogMessage(string.Format("Failed to uninstall Myrtille.Web ({0})", exc)); - throw; } } } diff --git a/README.md b/README.md index efacb2f..a610bbb 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ More information in the DOCUMENTATION.md file. ## Requirements - Browser: any HTML4 or HTML5 browser (starting from IE6!). No extension or administrative rights required. The clipboard synchronization requires Chrome (or async clipboard API support) and HTTPS connection -- Gateway (myrtille): IIS 7 or greater (preferably IIS 8+ with websocket protocol enabled) and .NET 4.5+ (with WCF Services > HTTP Activation enabled) +- Gateway (myrtille): Windows 8.1 or Windows Server 2012 R2 or greater (IIS 8.0+, .NET 4.5+ and WCF/HTTP activation enabled) - RDP server: any RDP enabled machine (preferably Windows Server but can also be Windows XP, 7, 8, 10 or Linux xRDP server) - SSH server: any SSH server (tests were made using the built-in Windows 10 OpenSSH server)