Fixing Cygwin speed issues

Posted on Sunday, February 7, 2016

Without cygwin windows is all but useless to me.  I need my command line to get important things done quickly.

As my current install of cygwin stands I have three problems with it.

·         Slow boot up time (over 2 minutes)
·         Sloooow tab completion
·         Adding tools is a pain give me an apt-get!

So what can I do about it?

I tweaked on it for a few days and here is a procedure I came up with

Get a list of your current installed packages

Start up cygwin. 

Use cygcheck to get a list of all installed packages.  I found this site [1] that shows a quick way to do this

> cygcheck -c -d | sed -e "1,2d" -e 's/ .*$//' > packagelist

Now looking at the file

> cat packagelist

I am going to filter this list a little and choose only the ones I want.  There are some ones I may no longer need.

Re-install Cygwin

Now kill cygwin program

Rename the C:\cygwin64 folder to cygwin64.BACK

Download setup-x86_64.exe

Now run it






Choose a  mirror and click Next

Let it download

Don't bother with additional packages just click Next.

Click Next

Let it download

Click Finish

Fix the font

You may not have to do this, but I need to fix the font.

Right click on the window and select Options.

Text, Select

Lucida Sans Typewriter, size 22, and click OK.

Click Apply, and Save

Add apt-cyg package manager

I found this neat tool called apt-cyg there is a quick post about how to use it at [2]

Here is how to set it up.

Close all Cygwin windows.

Open up a windows command prompt and run the following command
(assuming the setup-x86_64.exe is in the download folder)

> %HOMEPATH%\Downloads\setup-x86_64.exe -q -P git,wget,bzip2,tar,gawk,xz

This will auto load the git, wget, bzip2, tar, gawk, and xz.  These are needed for the apt-cyg tool to work.

Let it run its course

Cygwin is now updated

Open a Cygwin prompt and run the following commands to download and install apt-cyg.

> wget
> chmod +x apt-cyg
> mv apt-cyg /usr/bin/

Make a symlink cause I know I am going to type apt-get

> touch /usr/bin/apt-get
> ln -fs /usr/bin/apt-cyg /usr/bin/apt-get

Now you can install package from here J

List hexedit pacakges

> apt-cyg show hexedit

Install it

> apt-cyg install hexedit

And it has been added and no need to reboot cygwin!

Before I install the tools I need I want to add cygwinports as a repo.

Add cygwinports as a repo

First a test… try and find httrack

> apt-cyg show httrack

Unable to find….  It is available at cygwinports.  So let's add that repo

From cygwin run this command.

> cygstart -- /cygdrive/c/Users/patman/Downloads/setup-x86_64.exe -K

Click Run

Click Next


Click Next

Click Next

Click Next.

Put this fpt site in (Make sure not to add any spaces at the end) and click Add 

Select the
hold ctrl and select an additional Download Site

I chose

Double check make sure both are highlighted and click Next.

Let it download and set up.

As a test, search for httrack.  If you see it you are good! Do not install it now.   Just click Next.

Let it download.

Click Finish

Restart Cygwin

Test it to see if it sees the new repo

> apt-cyg show httrack

OK that is not right

Edit /etc/setup/setup.rc

> vi /etc/setup/setup.rc

Change last-mirror to

Just to cygwinports…

Will allow httrack to work but not autoconf…. I think apt-cyg is only allowing one mirror to be used at a time.

Yep check this old post out

It always takes the first one…

So I can just swap the last-mirror each time I need cywin.mirror or attempt to fix the apt-cyg code….

… Well for now I will just swap back and forth

Install all my packages

These are the packages I want… your mileage may vary…

First I am going to install the ones that do not need cygwinports

> time apt-cyg install autoconf automake bind curl gcc-core gcc-fortran gcc-g++ git-completion hexedit libusb1.0 libusb1.0-devel make openssh postgresql-client rsync ruby screen sed tree tmux whois unzip vim

Then reset /etc/setup/setup.rc to cywginports

> vi /etc/setup/setup.rc

> time apt-cyg install httrack jq

Now let me test how fast it boots up!

Starts up in under 10 seconds and tab completion is fine

Copy .ssh etc

Of course change the username to your own

Copy the .ssh folder

  > cp -r /cygdrive/c/cygwin64.BACK/home/patman/.ssh .

Copy the .gitconfig file

  > cp /cygdrive/c/cygwin64.BACK/home/patman/.gitconfig .

Copy the .screenrc file

  > cp /cygdrive/c/cygwin64.BACK/home/patman/.screenrc .

Copy the .tmux.conf file

  > cp /cygdrive/c/cygwin64.BACK/home/patman/.tmux.conf .

Copy the .vimrc file

  > cp /cygdrive/c/cygwin64.BACK/home/patman/.vimrc .

Copy .bash_profile

  > cp /cygdrive/c/cygwin64.BACK/home/patman/.bash_profile .

Restart cygwin

It's all working well now!

Sdkman and a fix

I found this cool tool sdkman see [4]
for installing skd tools like scala, sbt, groovy, grails…

To install it run

> curl -s | bash

Now run

> source "$HOME/.sdkman/bin/"


> sdk version

I already have java installed and set up

> java -version
> which java

So I am going to install scala 2.11.7 and sbt using the sdk tool

> sdk install sbt
> sdk install scala 2.11.7

Test it  (of course running sbt will take a while the first time)

> sbt sbtVersion
> scala -version

Fixing sdk

Now if I restart cygwin it takes forever…. 60 seconds to start… Though tab completion is fine.

If you look at the end of .bashrc and .bash_profile you will see this.

… .bash_profile calls .bashrc so this code gets called twice.

Remove this from .bashrc and I cut start up down to 30ish seconds

But this code is still killing me..

I added

set -vx

to .bash_profile and

And figured out that it only took 6 seconds to get to here then the sdk code was killing me.

The way I figured my way around this was to comment this code out when I do not need sdkman.   And to add PATHS to the sdk code it adds.

So in my case I updated it to

#export SDKMAN_DIR="/home/patman/.sdkman"
#[[ -s "/home/patman/.sdkman/bin/" ]] && source "/home/patman/.sdkman/bin/"
#Comment this out when running sdkman
export PATH=$PATH:/home/patman/.sdkman/candidates/scala/current/bin
export PATH=$PATH:/home/patman/.sdkman/candidates/sbt/current/bin

Now restart cygwin

< 10 second start up
And sbt and scala, which I installed via sdkman

Test it

> sbt sbtVersion
> scala -version

OK I think I am good J


[1]        Import & Export Cygwin List of installed Packages
                Accessed 02/2016
[2]        How do I install a Package Manager within Cygwin ?
                Accessed 02/2016
[3]        Install cygwin and cygwinports packages using apt-cyg
[4]        sdkman
Accessed 02/2016

No comments:

Post a Comment