diff --git a/ConCygSys-installer.cmd b/ConCygSys-installer.cmd index 9d7489b..f9c67db 100644 --- a/ConCygSys-installer.cmd +++ b/ConCygSys-installer.cmd @@ -5,27 +5,25 @@ :: Licensed under the Apache License 2.0: http://www.apache.org/licenses/LICENSE-2.0 :: Independent fork of cygwin-portable-installer: https://github.com/vegardit/cygwin-portable-installer -set CONCYGSYS_VERSION=190913 +set CONCYGSYS_VERSION=190915 ::======================= begin SCRIPT SETTINGS ======================= -:: If you want to use a Windows %variable% in setting, surround it by % - %%variable%% -:: Not required if you edit settings in update.cmd after Cygwin installation ::+++++++++++++ Cygwin settings -:: Custom home folder path (!) without quotes ' " +:: Custom home folder: https://cygwin.com/cygwin-ug-net/ntsec.html#ntsec-mapping-nsswitch-home +:: Applicable for new installations only. For existing ones home folder can be modified in /etc/nsswitch.conf :: Examples: :: /home/cygwinhome -:: C:\cygwinhome -:: C:\Users\yourusername\Documents\cygwinhome -:: %%USERPROFILE%%\Documents\cygwinhome +:: /cygdrive/c/Users/YOURUSERNAME/cygwinhome +:: /%%H/cygwinhome (% sign should be escaped) :: Leave empty to use default one - /home/concygsys set CYGWIN_HOME= -:: specify default launcher for Cygwin -:: if specified launcher is not available, defaults to next available one in the following order: conemu mintty cmd -set LAUNCHER_CYGWIN=conemu +:: Specify default launcher for Cygwin: conemu mintty cmd +:: If specified launcher is not available, defaults to next available one in the following order: conemu mintty cmd +set LAUNCHER_CYGWIN= :: Comma-separated list of the packages to be installed automatically: https://cygwin.com/packages/package_list.html :: You will be able to install other packages later with apt-cyg if INSTALL_APT_CYG is set to yes below @@ -35,7 +33,7 @@ set CYGWIN_PACKAGES=bind-utils,inetutils,openssh,vim,whois set CYGWIN_MIRROR= :: Set proxy, if required, in the following format: proxyip:port -:: Applies to installation process and to setting of installed cygwin instance +:: Applicable to installation process only set PROXY_HOST= :: Override OS architecture, if required: "32" bit or "64" bit system. Leave empty for autodetect @@ -47,8 +45,8 @@ set CYGWIN_ARCH= :: Why not using https://github.com/kou1okada/apt-cyg : https://github.com/kou1okada/apt-cyg#requirements https://github.com/kou1okada/apt-cyg/issues/24 set INSTALL_APT_CYG=yes -:: Install and configure ssh-pageant: https://github.com/cuviper/ssh-pageant -set INSTALL_SSH_PAGEANT=yes +:: Configure ssh-agent: https://github.com/zhubanRuban/cygwin-extras#ssh-agent-tweak +set INSTALL_SSH_AGENT_TWEAK=yes :: Space-separated list of additional scripts URL to execute after Cygwin installation :: They will be downloaded with wget and passed to bash. Commands available by default to custom scripts: cygwin base + wget + apt-cyg @@ -66,16 +64,16 @@ set INSTALL_CONEMU=yes :: Mintty : will be launched via mintty :: Connector : will be launched via ConEmu connector https://conemu.github.io/en/CygwinMsysConnector.html :: Cmd : will be launched via standard Windown console -set CONEMUTASK_DEFAULT=Mintty +set CONEMUTASK_DEFAULT= ::+++++++++++++ Settings for WSL :: Install WSLbridge allowing to access WSL via Mintty https://github.com/rprichard/wslbridge (WSLtty emulation https://github.com/mintty/wsltty) set INSTALL_WSLBRIDGE=no -:: Specify default launcher for WSL +:: Specify default launcher for WSL: conemu mintty cmd :: If specified launcher is not available, defaults to next available one in the following order: conemu mintty cmd -set LAUNCHER_WSLBRIDGE=conemu +set LAUNCHER_WSLBRIDGE= ::======================= end SCRIPT SETTINGS ======================= @@ -86,11 +84,11 @@ set CONCYGSYS_INFO=ConCygSys v.%CONCYGSYS_VERSION% %CONCYGSYS_LINK% echo %CONCYGSYS_INFO% echo. +set INSTALL_ROOT=%~dp0 set CYGWIN_DIR=cygwin set CYGWIN_ROOT=%~dp0%CYGWIN_DIR% -set Concygsys_settings=update.cmd -set Concygsys_settings_temp=ConCygSys-%Concygsys_settings% -set "PATH=%CYGWIN_ROOT%\bin;PATH=%CYGWIN_ROOT%\usr\local\bin;%PATH%" +set CONCYGSYS_SETTINGS=update.cmd +set "PATH=%CYGWIN_ROOT%\bin;%CYGWIN_ROOT%\usr\local\bin;%PATH%" set BASH=bash --noprofile --norc -c ::========================================================== @@ -100,31 +98,25 @@ setlocal EnableDelayedExpansion if exist %CYGWIN_DIR% ( echo Existing Cygwin folder detected, switching to update mode... set UPDATEMODE=yes - %SystemRoot%\System32\wbem\WMIC.exe process get ExecutablePath | findstr "%CYGWIN_ROOT%" >NUL 2>&1 + %SystemRoot%\System32\wbem\WMIC.exe process get ExecutablePath | findstr "%INSTALL_ROOT%" >NUL 2>&1 :: multiple :: in if loop cause"system cannot find disk" warning, using rem further rem why not using "%ERRORLEVEL%"=="0": https://social.technet.microsoft.com/Forums/en-US/e72cb532-3da0-4c7f-a61e-9ffbf8050b55/batch-errorlevel-always-reports-back-level-0?forum=ITCG if not ErrorLevel 1 ( echo. echo ^^!^^!^^! Active Cygwin processes detected ^^!^^!^^! echo ========================================== - %SystemRoot%\System32\wbem\WMIC.exe process where "ExecutablePath like '%%%CYGWIN_ROOT:\=\\%%%'" get ExecutablePath, ProcessId + %SystemRoot%\System32\wbem\WMIC.exe process where "ExecutablePath like '%%%INSTALL_ROOT:\=\\%%%'" get ExecutablePath, ProcessId echo. echo They will be terminated during update, please make sure you saved everything before proceeding pause - for /f "usebackq" %%p in (`%SystemRoot%\System32\wbem\WMIC.exe process where "ExecutablePath like '%%%CYGWIN_ROOT:\=\\%%%'" get ProcessId`) do taskkill /f /pid %%p >NUL 2>&1 + for /f "usebackq" %%p in (`%SystemRoot%\System32\wbem\WMIC.exe process where "ExecutablePath like '%%%INSTALL_ROOT:\=\\%%%'" get ProcessId`) do taskkill /f /pid %%p >NUL 2>&1 goto :retryupdate ) else ( - if exist "%Concygsys_settings%" ( - copy /y "%Concygsys_settings%" "%Concygsys_settings_temp%" >NUL 2>&1 - :: escaping % in existing config - sed -i '/^^set/ s/%%/%%%%/g' "%Concygsys_settings_temp%" - echo Reading existing settings from %Concygsys_settings_temp% ... - call "%Concygsys_settings_temp%" cygwinsettings - call "%Concygsys_settings_temp%" installoptions - del /f /q "%Concygsys_settings_temp%" >NUL 2>&1 + if exist "%CONCYGSYS_SETTINGS%" ( + call "%CONCYGSYS_SETTINGS%" cygwinsettings + call "%CONCYGSYS_SETTINGS%" installoptions :: making sure settings from previous versions are transferred properly if not "!PROXY_PORT!" == "" (if not "!PROXY_HOST!" == "" (set PROXY_HOST=!PROXY_HOST!:!PROXY_PORT!)) - if not "!HOME_FOLDER!" == "" (set CYGWIN_HOME=!HOME_FOLDER!) ) echo. set /p UPDATECYGWINONLY= [1] then [Enter] : update Cygwin only [Enter] : update everything @@ -136,7 +128,7 @@ if exist %CYGWIN_DIR% ( echo. echo To customize update process: echo - close this window - echo - modify :installoptions section of %Concygsys_settings% file + echo - modify :installoptions section of %CONCYGSYS_SETTINGS% file echo - re-run update echo. echo If you are good with existing setup, just hit [Enter] to start update @@ -198,14 +190,14 @@ set CYGWIN_SETUP_PATH=%CYGWIN_DIR%\%CYGWIN_SETUP% cscript //Nologo %DOWNLOADER% https://cygwin.org/%CYGWIN_SETUP% %CYGWIN_SETUP_PATH% || goto :fail :: https://cygwin.com/faq/faq.html#faq.setup.cli -if "%CYGWIN_MIRROR%" == "" (set CYGWIN_MIRROR=ftp://ftp-stud.hs-esslingen.de/pub/Mirrors/sources.redhat.com/cygwin/) +if "%CYGWIN_MIRROR%" == "" (set CYGWIN_MIRROR=http://mirror.checkdomain.de/cygwin/) if "%PROXY_HOST%" == "" (set CYGWIN_PROXY=) else (set CYGWIN_PROXY=--proxy "%PROXY_HOST%") :: adding required packages for special software if "%INSTALL_CONEMU%" == "yes" (set CYGWIN_PACKAGES=bsdtar,wget,%CYGWIN_PACKAGES%) if "%INSTALL_WSLBRIDGE%" == "yes" (set CYGWIN_PACKAGES=bsdtar,wget,%CYGWIN_PACKAGES%) if "%INSTALL_APT_CYG%" == "yes" (set CYGWIN_PACKAGES=wget,%CYGWIN_PACKAGES%) -if "%INSTALL_SSH_PAGEANT%" == "yes" (set CYGWIN_PACKAGES=ssh-pageant,%CYGWIN_PACKAGES%) +if "%INSTALL_SSH_AGENT_TWEAK%" == "yes" (set CYGWIN_PACKAGES=openssh,wget,%CYGWIN_PACKAGES%) if not "%INSTALL_ADDONS%" == "" (set CYGWIN_PACKAGES=wget,%CYGWIN_PACKAGES%& set INSTALL_APT_CYG=yes) :: https://www.cygwin.com/faq/faq.html#faq.setup.cli @@ -243,6 +235,10 @@ set FSTAB=%FSTAB: =\040% echo # %CONCYGSYS_INFO% ) > %CYGWIN_DIR%\etc\fstab & dos2unix -q %CYGWIN_DIR%\etc\fstab +:: adjusting home folder if not set +if "%CYGWIN_HOME%" == "" (set CYGWIN_HOME=/home/concygsys) +sed -i 's/^^#.*db_home:.*/db_home: %CYGWIN_HOME:/=\/%/' /etc/nsswitch.conf + :: inputrc fix for ctrl+left and ctrl+right to work as expected: https://github.com/zhubanRuban/cygwin-extras#custom-inputrc copy /y %CYGWIN_DIR%\etc\defaults\etc\skel\.inputrc %CYGWIN_DIR%\etc\skel\.inputrc >NUL 2>&1 ( @@ -251,7 +247,7 @@ copy /y %CYGWIN_DIR%\etc\defaults\etc\skel\.inputrc %CYGWIN_DIR%\etc\skel\.input echo "\e[1;5C": forward-word # ctrl + right echo "\e[1;5D": backward-word # ctrl + left echo # %CONCYGSYS_INFO% -) > %CYGWIN_DIR%\etc\skel\.inputrc & dos2unix -q %CYGWIN_DIR%\etc\skel\.inputrc +) >> %CYGWIN_DIR%\etc\skel\.inputrc & dos2unix -q %CYGWIN_DIR%\etc\skel\.inputrc if not "%UPDATECYGWINONLY%" == "" goto :aftercygwinupdate ::========================================================== @@ -262,13 +258,12 @@ if "%INSTALL_APT_CYG%" == "yes" ( chmod +x /usr/local/bin/apt-cyg ) -if "%INSTALL_SSH_PAGEANT%" == "yes" ( - echo. & echo Configuring ssh-pageant... - echo eval $(/usr/bin/ssh-pageant -r -a "/tmp/.ssh-pageant-$USERNAME"^) > %CYGWIN_DIR%\etc\profile.d\ssh-pageant.sh - dos2unix -q %CYGWIN_DIR%\etc\profile.d\ssh-pageant.sh +if "%INSTALL_SSH_AGENT_TWEAK%" == "yes" ( + echo. & echo Configuring ssh-agent... + wget -nv --show-progress -O /etc/profile.d/ssh-agent-tweak.sh https://github.com/zhubanRuban/cygwin-extras/raw/master/ssh-agent-tweak + grep -q AddKeysToAgent %CYGWIN_DIR%\etc\ssh_config >NUL 2>&1 || echo AddKeysToAgent yes >> %CYGWIN_DIR%\etc\ssh_config & dos2unix -q %CYGWIN_DIR%\etc\ssh_config :: removing previous possible ssh-agent implementations - rm -f /opt/ssh-agent-tweak - sed -i '/\/opt\/ssh-agent-tweak/d' ~/.bashrc >NUL 2>&1 + rm -f /opt/ssh-agent-tweak & sed -i '/\/opt\/ssh-agent-tweak/d' ~/.bashrc >NUL 2>&1 ) set ADDONS_DIR=addons @@ -432,11 +427,13 @@ if "%INSTALL_WSLBRIDGE%" == "yes" ( echo. & echo Generating the launchers... :: files left by previous concygsys versions del /f /q Cygwin-*.cmd Launch-*.cmd >NUL 2>&1 +rm -f /etc/passwd /etc/group echo Generating Cygwin launcher... ( echo @echo off echo :: %CONCYGSYS_INFO% - echo call %Concygsys_settings% launcherheader + echo cd /d "%%~dp0" + echo call %CONCYGSYS_SETTINGS% launcherheader echo if not "%%LAUNCHER_CYGWIN%%" == "" (goto :%%LAUNCHER_CYGWIN%%^) echo. echo :conemu @@ -462,7 +459,8 @@ if "%INSTALL_WSLBRIDGE%" == "yes" ( ( echo @echo off echo :: %CONCYGSYS_INFO% - echo call %Concygsys_settings% launcherheader + echo cd /d "%%~dp0" + echo call %CONCYGSYS_SETTINGS% launcherheader echo if not "%%LAUNCHER_WSLBRIDGE%%" == "" (goto :%%LAUNCHER_WSLBRIDGE%%^) echo. echo :conemu @@ -499,18 +497,17 @@ echo Generating one-file settings and updater file... echo. echo :cygwinsettings echo :: these settings will be applied on next launcher run - echo set CYGWIN_HOME=%CYGWIN_HOME% echo set LAUNCHER_CYGWIN=%LAUNCHER_CYGWIN% if "%INSTALL_WSLBRIDGE%" == "yes" (echo set LAUNCHER_WSLBRIDGE=%LAUNCHER_WSLBRIDGE%) if "%INSTALL_CONEMU%" == "yes" (echo set CONEMUTASK_DEFAULT=%CONEMUTASK_DEFAULT%) - echo set PROXY_HOST=%PROXY_HOST% echo exit /b echo. echo :installoptions - echo :: these settings will be applied after you run %Concygsys_settings% + echo :: these settings will be applied after you run %CONCYGSYS_SETTINGS% echo :: specify CYGWIN_PACKAGES only if you need new packages not installed at the moment echo set CYGWIN_PACKAGES= echo set CYGWIN_MIRROR=%CYGWIN_MIRROR% + echo set PROXY_HOST=%PROXY_HOST% echo set CYGWIN_ARCH=%CYGWIN_ARCH% echo set INSTALL_APT_CYG=%INSTALL_APT_CYG% echo set INSTALL_ADDONS= @@ -520,16 +517,10 @@ echo Generating one-file settings and updater file... echo ::==================================================== echo. echo :launcherheader + echo set "PATH=%%~dp0%CYGWIN_DIR%\bin;%%~dp0%CYGWIN_DIR%\usr\local\bin;%%PATH%%" + echo. echo call %%~nx0 cygwinsettings echo. - echo set "PATH=%%~dp0%CYGWIN_DIR%\bin;%%PATH%%" - echo rm -f /etc/passwd - echo if "%%CYGWIN_HOME%%" == "" (set HOME=/home/concygsys^) else (set HOME=%%CYGWIN_HOME%%^) - echo if not "%%PROXY_HOST%%" == "" ( - echo set http_proxy=http://%%PROXY_HOST%% - echo set https_proxy=https://%%PROXY_HOST%% - echo set ftp_proxy=ftp://%%PROXY_HOST%% - echo ^) echo echo. echo setlocal enableextensions echo set TERM= @@ -547,11 +538,12 @@ echo Generating one-file settings and updater file... echo echo # %CONCYGSYS_INFO% echo ^) ^> "%%CYGWIN_ROOT%%\etc\fstab" ^& dos2unix -q "%%CYGWIN_ROOT%%\etc\fstab" echo. - echo sed -i '/^last-cache/!b;n;c\\\t%%TEMP:\=\\\%%\\\cygwin-local-package-dir' /etc/setup/setup.rc + echo sed -i '/^^^^last-cache/!b;n;c\\\t%%TEMP:\=\\\%%\\\cygwin-local-package-dir' /etc/setup/setup.rc echo exit /b echo. echo :update echo echo %CONCYGSYS_INFO% + echo cd /d "%%~dp0" echo set DOWNLOADER=%DOWNLOADER% echo call %%~nx0 cygwinsettings echo if "%%PROXY_HOST%%" == "" (set DOWNLOADER_PROXY=.^) else (set DOWNLOADER_PROXY= req.SetProxy 2, "%%PROXY_HOST%%", ""^) @@ -589,18 +581,21 @@ echo Generating one-file settings and updater file... echo echo. echo pause echo exit /b 1 -) > %Concygsys_settings% || goto :fail +) > %CONCYGSYS_SETTINGS% || goto :fail ::========================================================== echo. & echo Generating README.txt ( echo %CONCYGSYS_INFO% - echo Change settings : right click on %Concygsys_settings% ^> Edit - echo Update : launch %Concygsys_settings% + echo Change settings : right click on %CONCYGSYS_SETTINGS% ^> Edit + echo Update : launch %CONCYGSYS_SETTINGS% echo More info : %CONCYGSYS_LINK%#customization ) > README.md & move /y README.md README.txt >NUL 2>&1 +echo. & echo Cleaning up... +sed -i '/^^last-cache/!b;n;c\\\t' /etc/setup/setup.rc +rm -f /etc/fstab /var/log/setup* :aftercygwinupdate ::========================================================== diff --git a/README.md b/README.md index bd6edaa..907c453 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# ConCygSys +# ConCygSys [![GitHub release (latest by date)](https://img.shields.io/github/v/release/zhubanRuban/cygwin-portable?style=flat-square)](../../releases) ![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/zhubanRuban/cygwin-portable?style=flat-square) @@ -41,9 +41,9 @@ - Download the [latest ConCygSys release](../../releases), extract the archive and go to the extracted folder -> **Optional:** Edit **`ConCygSys-installer`** to [customize](#customization) the installation per your requirements +> **Optional:** Edit **`ConCygSys-installer.cmd`** to [customize](#customization) the installation per your requirements -- Launch **`ConCygSys-installer`** +- Launch **`ConCygSys-installer.cmd`** > If Windows complains with a **Windows protected your PC** popup, you may need to click **Run anyway** to proceed with the installation. @@ -71,13 +71,13 @@ You will be able either to update **Cygwin only** or to perform a **full update* > If you cannot find **`update`** launcher or something goes wrong: > - Download [**`ConCygSys-installer.cmd`**](../../raw/master/ConCygSys-installer.cmd) *(right click > save link as)* to existing ConCygSys directory -> - Launch **`ConCygSys-installer`** +> - Launch **`ConCygSys-installer.cmd`** ## Customization -Open **`ConCygSys-installer`** with text editor on your PC before installation to get a control over the installation process. Available options will be in **SCRIPT SETTINGS** section. All settings are accompanied with description. +Open **`ConCygSys-installer.cmd`** with text editor on your PC before installation to get a control over the installation process. Available options will be in **SCRIPT SETTINGS** section. All settings are accompanied with description. -[List of options](ConCygSys-installer.cmd#L11-L80) +[List of options](ConCygSys-installer.cmd#L11-L78) After the installation, in order to change settings / add components, edit **:cygwinsettings** and **:installoptions** sections of **`update.cmd`** launcher (Right click > Edit). @@ -87,7 +87,7 @@ After the installation, in order to change settings / add components, edit **:cy ### How much disk space does it take after installation? -If installed with default settings: 205M | zip: 70.3M | 7z: 40.3M +If installed with default settings: `205M` zip: `70.3M` 7z: `40.3M` ### What is the path to Windows drives when I'm in Cygwin console? @@ -121,11 +121,13 @@ Pre-built packages: ### Can I use this installation for organisation? +- change `CYGWIN_HOME` to `/%%H/SOMEFOLDER` in **`ConCygSys-installer.cmd`** (% must be escaped) - install with admin rights to shared location, like C:\Program Files\cygwin -- open **`update.cmd`** and edit CYGWIN_HOME to %USERPROFILE%\SOMEFOLDER In this example every user who launched Cygwin will have own home folder in C:\Users\USER\SOMEFOLDER +For existing installation you can change home folder in [/etc/nsswitch.conf](https://cygwin.com/cygwin-ug-net/ntsec.html#ntsec-mapping-nsswitch-home). % sign does not need to be escaped in this case. + ### How to check ConCygSys version? The version can be found at the beginning of: