diff --git a/DOCKER.md b/DOCKER.md new file mode 100644 index 0000000..bc86e15 --- /dev/null +++ b/DOCKER.md @@ -0,0 +1,139 @@ +# DOCKER.md - Introduction + +Sattools, stvid and strf are Unix-native tools, with complex and +specific environment requirements in order for them to operate. + +The Docker environment allows you to gain access to sattools +without knowing how to install dependencies or compile source. + +It has the additional benefit of being able to use the sattools +environment without affecting other environments on your computer. + +The instructions below will get you running sattools in about +15 minutes. + +# Setup your Docker / X-Windows environment + +Mac/PC **Docker Desktop** +- Create an account and download Docker Desktop: + https://www.docker.com/products/docker-desktop + +Windows: + Install **Xming X Server for Windows** - https://sourceforge.net/projects/xming/ +Mac: + Install **XQuartz** - https://www.xquartz.org/ (can also install via brew) + Log out/back in as directed by the installer + +Unix/Linux: + +`sudo apt-get update && sudo apt-get install docker.io` + +From your X11 terminal, find your computer's IP address and authorize it for X11 connections + +`xauth + 192.168.1.2` + +# Download and build the sattools Dockerfile +https://github.com/cbassa/sattools/blob/master/Dockerfile + +## In a Terminal (Mac/Unix) or Powershell (Windows) build the Dockerfile: +`docker build - < Dockerfile` + +After a few minutes, your build should successfully finish. Check for your image with the command: +`$ docker images` + +>REPOSITORY TAG IMAGE ID CREATED SIZE +> 1ad51e488e1f 12 seconds ago 1.47GB + +Take note of the IMAGE ID, in this case `1ad51e488e1f` this code represents the IMAGE you just built. + +To run this image in a new container, run the following command in the terminal. + +```docker run -it -e DISPLAY='host.docker.internal:0 \' +-v /tmp/.X11-unix:/tmp/.X11-unix:ro \ +-v ~/Documents/satobs:/root/satellite/satobs \ +--name mysattools 1ad51e488e1f \ +/bin/bash +``` + +## Check out your new sattols Docker environment +You will be placed into the environment in the commandline of your sattools environment in the Docker container. + +`root@a9031e8397c6:~# cd /root/satellite/sattools/` + +The first thing you will want to do, is to specify your location. To do this, edit the file "stations.in" + +`root@a9031e8397c6:~/satellite/sattools# nano data/sites.txt` + +Scroll to the bottom of the file, to edit the entry for station 9999 with the name Graves. +Following the formatting for the file, enter the latitutde, longitude, elevation and name for your observing site, and save the file: + +`9999 TS 47.6672 -122.0931 101 TruSat` + +Next, you will want to edit the stvid configuration, which will allow you to get updated TLEs + +First, register for a space-track.org account at https://www.space-track.org/auth/createAccount + +Next, edit the information for your observation location, and put in the login information +for your space-track.org account + +```cd /root/satellite/stvid +root@a9031e8397c6:~/satellite/stvid# cp configuration.ini-dist configuration.ini +nano configuration.ini +``` + +Last, update the TLEs with + +`root@a9031e8397c6:~/satellite/stvid# python3 update_tle.py` + +You can see your new TLEs at: + +```root@a9031e8397c6:~/satellite/stvid# cd /root/satellite/tle/ +root@a9031e8397c6:~/satellite/tle# ls -al +``` + +Here a few things that you can do now that your environment is set up for your location with TLEs + +Get sunset / sunrise for your site (in UTC): + +`root@a9031e8397c6:~/satellite/tle# allnight` + +> 2019-11-27T00:56:27 2019-11-27T14:55:44 + +Run passes for your site for 3 hours, above 45 degrees, starting at sunset (from above): +`pass -t 2019-11-27T00:56:27 -l 10800 -A 45` + +Run skymap to interactively view passes for your site: +`skymap S` + +This should open a graphical display in an X-window on your system. +Use > to advance by 1 minute + +Type `exit` to leave the docker environment. + +# Returning to your docker environment. + +You can check to see if your container is still running by typing the following in the terminal: +```(MVP) MBP-140320:~ chris$ docker ps -a +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +a9031e8397c6 d82642132ae1 "/bin/sh -c /bin/bas…" 6 days ago Up 6 days st-b3 +6fe73f3d652e d82642132ae1 "/bin/sh -c /bin/bas…" 6 days ago Exited (0) 6 days ago st-b2 +``` + +You can see multiple containers from the image you built. In this case, the container a9031e8397c6 is still running. + +To reattach to this container, execute: + +`docker attach a9031e8397c6` + +You might need to press `return` to see the prompt. + +If you don't have a container running (like container 6fe73f3d652e), you can restart it with: + +`docker start 6fe73f3d652e` + +If you don't have any active containers, you can start over with the `docker run` command above. + +## Things to watch out for +1. When you build/start/stop/exit containers, its possible for multiple (1.5 gigabyte) containers to pile up. Review the commands for `docker rmi` and `docker rm` for how to remove thiese. +1. Any changes you make inside the docker container are not automatively saved to the image. If you would like to save your changes, use the `docker commit` command to make an updated version of the images with your changes. + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3e7ccf3 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,160 @@ +# Best Practices for Writing Docker Files +# https://docs.docker.com/develop/develop-images/dockerfile_best-practices/ + +# Note that this currently is a larger-than-necessary image due to the the +# intermediate RUN commands to compile the different pages +# Stringing-it-all-together would reduce the size, but would make build +# debugging more challenging + +FROM ubuntu:18.04 + +# To avoid questions from tzdata +ARG DEBIAN_FRONTEND=noninteractive + +# Modify the following with your preferred COSPAR station ID +ENV ST_COSPAR 9999 + +# Update these directories per your preferences +ENV HOME /root +ENV SAT_DIR $HOME/satellite +ENV ST_DATADIR $SAT_DIR/sattools +ENV ST_TLEDIR $SAT_DIR/tle +ENV ST_OBSDIR $SAT_DIR/satobs + +# Note that its convenient to mount your host filesystem to the ST_TLEDIR and ST_OBSDIR with +# -V YOUR_EXTERNAL_TLE_DIR:/root/satellite/tle +# -V YOUR_EXTERNAL_SATOBS_DIR:/root/satellite/satobs + +RUN echo "Step 1.0: Install dependencies from APT" \ +& apt-get update && apt-get install -y --no-install-recommends \ + git \ + make \ + dos2unix \ + sextractor \ + wcslib-dev \ + pgplot5 \ + libgsl-dev \ + gfortran \ + g++ \ + libpng-dev \ + libx11-dev \ + libjpeg-dev \ + libexif-dev \ + unzip \ + vim \ + nano \ + wget \ +# For hough3dlines + libeigen3-dev \ +# For STVID + python3 \ + python3-dev \ + astrometry.net \ + # For scipy + libblas3 \ + liblapack3 \ + liblapack-dev \ + libblas-dev \ +# For STRF + libfftw3-dev \ +# For pip + ca-certificates \ +&& rm -rf /var/lib/apt/lists/* + +# For STVID package requirements.txt +WORKDIR /tmp +RUN ["/bin/bash", "-c", "set -o pipefail && wget -O - https://bootstrap.pypa.io/get-pip.py | python3 -"] + +RUN echo "Step 2.0: Install qfits for SATTOOLS" +WORKDIR /usr/local/src +RUN ["/bin/bash", "-c", "set -o pipefail && wget -O - ftp://ftp.eso.org/pub/qfits/qfits-5.2.0.tar.gz | tar xzvf - \ +&& cd qfits-5.2.0 \ +&& chmod +w src/xmemory.c \ +&& sed -i -e 's/swapfd = open(fname, O_RDWR | O_CREAT);/swapfd = open(fname, O_RDWR | O_CREAT, 0644);/g' src/xmemory.c \ +&& ./configure \ +&& make \ +&& make install \ +&& echo 'Step 2.1: clean up' \ +&& rm -rf /usr/local/src/qfits-5.2.0"] + +WORKDIR ${SAT_DIR} +RUN echo "Step 3.0: Install hough3dlines for STVID" \ +&& git clone https://gitlab.com/pierros/hough3d-code.git \ +&& cd hough3d-code \ +&& make \ +&& rm *.o \ +&& echo "Done installing dependencies" \ +&& mkdir -p $SAT_DIR + +## +## THIS SECTION BUILDS SATTOOLS SUITE +## + +WORKDIR $SAT_DIR +RUN echo "Step 4.0: Build satools/strf/stvid" \ +&& echo "Step 4.1: Build sattools: Satellite Tracking Toolkit" \ +&& git clone https://github.com/interplanetarychris/sattools.git \ +&& cd sattools \ +&& git checkout Docker \ +&& make \ +&& make clean + +RUN echo "Step 4.2. Build stvid: Satellite tracking with video cameras" \ +&& git clone https://github.com/interplanetarychris/stvid.git \ +&& cd $SAT_DIR/stvid \ +&& git checkout Docker \ +&& pip install -r $SAT_DIR/stvid/requirements.txt \ +# Needed twice, because ppgplot installs correctly on the second try +&& pip install -r $SAT_DIR/stvid/requirements.txt +#WORKDIR /usr/local/src +#RUN git clone https://github.com/haavee/ppgplot.git +# WORKDIR /usr/local/src/ppgplot +# RUN python3 setup.py install + +WORKDIR $SAT_DIR +RUN echo "Step 4.3. Build strf: Radio Frequency Satellite Tracking" \ +&& git clone https://github.com/cbassa/strf.git \ +&& cd $SAT_DIR/strf \ +&& make \ +&& make clean + +RUN echo "Step 4.4 Decrease container size after everything is compiled" \ +&& apt-get purge -y \ + wcslib-dev \ + libgsl-dev \ + gfortran \ + libpng-dev \ + libx11-dev \ + libjpeg-dev \ + libexif-dev \ +# For hough3dlines + libeigen3-dev \ +# For STVID + python3-dev \ + # For scipy + liblapack-dev \ + libblas-dev \ +# For STRF + libfftw3-dev \ +&& apt-get autoremove -y + +WORKDIR $HOME +RUN echo "Step 5.0: set environment variables" \ +&& echo "export ST_COSPAR=$ST_COSPAR" >>$HOME/.profile \ +&& echo "export ST_DATADIR=$ST_DATADIR" >>$HOME/.profile \ +&& echo "export ST_TLEDIR=$ST_TLEDIR" >>$HOME/.profile \ +&& echo "export ST_OBSDIR=$ST_OBSDIR" >>$HOME/.profile \ +&& mkdir -p $ST_OBSDIR \ +&& mkdir $ST_OBSDIR/control \ +&& echo "Step 5.1: set path" \ +&& echo "PATH=$ST_DATADIR:$ST_DATADIR/scripts:$SAT_DIR/hough3d-code:$SAT_DIR/strf:\$PATH" >>$HOME/.profile + +RUN echo "Step 5.2: Download initial TLEs" \ +&& mkdir -p $ST_TLEDIR \ +&& $ST_DATADIR/tleupdate \ +&& echo "Final step: run" \ +&& echo "source $HOME/.profile" + +# Run bash by default if everything else compiles +ENTRYPOINT /bin/bash +CMD bash \ No newline at end of file diff --git a/README.md b/README.md index b05f3fa..1dbd137 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,13 @@ Try to download TLEs using `tleupdate`, which should now exist in your `PATH` va Tools ----- +* `skymap`: Vizualize satellites on a map of the sky. + Example usage: + - Compute and plot the path of a satellite (NORAD ID 43145), using a TLE from an input file (`$ST_TLEDIR/classfd.tle`) for a site (COSPAR ID 4171) at a date/time (2019-12-01T17:42:00) while looking at a particular RA/Dec (`01h00m00s`, `+30d00m00s`). + ``` + skymap -s 4171 -t 2019-12-01T17:42:00 -c $ST_TLEDIR/classfd.tle -i 43145 -R 01:00:00 -D 30:00:00 + ``` + * `tleinfo`: Display information about a set of TLEs. Example usage: - List values (SATNO, YEAR DOY, INCL, ASCN, ARGP, MA, ECC, MM) of the TLEs in the file `bulk.tle`: `tleinfo -H -1`