Compare commits

..

No commits in common. "d10e3c1b730eb7cc0ea0d14f1b76db000c8ca77d" and "65ffd4fd255b9528b82817ff8fb5c90d6c3a1944" have entirely different histories.

5 changed files with 144 additions and 108 deletions

3
.gitignore vendored
View File

@ -1,2 +1,5 @@
*.tar.gz
*.sif
.docker_build
overlay/
shared/

97
Dockerfile Normal file
View File

@ -0,0 +1,97 @@
FROM ubuntu:22.04
ARG MAX_THREADS=1
ARG WS_VER=3.4.0
ARG MI_BRANCH=ubuntu22-py310
ARG WIRESHARK_URL=http://www.mobileinsight.net/wireshark-${WS_VER}-rbc-dissector.tar.xz
ADD 00-cpp_compat.patch /build/00-cpp_compat.patch
# Run apt update
RUN set -ex; \
export DEBIAN_FRONTEND=noninteractive; \
apt-get update; \
apt-get upgrade -y; \
apt-get install -y \
git \
python3 \
python3-pip \
python3-wxgtk4.0 \
python3-matplotlib \
cmake \
pkg-config \
wget \
libglib2.0-dev \
bison \
flex \
libpcap-dev \
libgcrypt-dev \
qtbase5-dev \
qtchooser \
qt5-qmake \
qtbase5-dev-tools \
qttools5-dev \
qtmultimedia5-dev \
libqt5svg5-dev \
libc-ares-dev \
libsdl2-mixer-2.0-0 \
libsdl2-image-2.0-0 \
libsdl2-2.0-0;
# Download resources
RUN set -ex; \
mkdir -p /build; \
cd /build; \
wget "$WIRESHARK_URL" -nv -O "wireshark-$WS_VER.tar.xz"; \
tar -xf "wireshark-$WS_VER.tar.xz"; \
git clone "https://github.com/mobile-insight/mobileinsight-core.git"; \
git -C mobileinsight-core checkout "$MI_BRANCH";
# Compile and install wireshark
RUN set -ex; \
cd "/build/wireshark-$WS_VER"; \
patch epan/epan.h < /build/00-cpp_compat.patch; \
cmake -DBUILD_wireshark=OFF .; \
make -j "$MAX_THREADS"; \
make install; \
ldconfig;
# Compile and install Wireshark dissector
Run set -ex; \
cd /build/mobileinsight-core/ws_dissector; \
g++ ws_dissector.cpp packet-aww.cpp -o ws_dissector \
$(pkg-config --libs --cflags glib-2.0) \
-I"/build/wireshark-$WS_VER" \
-L"/usr/local/lib" \
-lwireshark \
-lwsutil \
-lwiretap; \
strip ws_dissector; \
install -Dm 755 ws_dissector /usr/local/bin/ws_dissector;
# Compile and install MobileInsight
Run set -ex; \
cd /build/mobileinsight-core; \
pip3 install pyserial; \
python3 setup.py install;
# Install MobileInsight GUI
Run set -ex; \
cd /build/mobileinsight-core; \
mkdir -p /usr/local/share/mobileinsight; \
cp -r gui/* /usr/local/share/mobileinsight;\
ln -s /usr/local/share/mobileinsight/mi-gui /usr/local/bin/mi-gui;
# Install examples
Run set -ex; \
cd /build/mobileinsight-core; \
cp -r examples /opt/mobileinsight-examples;
# Link python3 to python
Run set -ex; \
cd /usr/bin; \
ln -s python3 python;
# Cleanup
Run set -ex; \
apt-get autoclean -y; \
rm -rf /build;

View File

@ -1,21 +1,44 @@
APPTAINER ?= singularity
DOCKER ?= docker
APPTAINER ?= apptainer
OVERLAY_DIR ?= ./overlay
NUM_THREADS ?= $(shell grep -c processor /proc/cpuinfo)
SHARED_DIR ?= ./shared
MAX_THREADS ?= $(shell grep -c processor /proc/cpuinfo)
UID := $(shell id -u)
GID := $(shell id -g)
.DEFAULT_GOAL := mobileinsight.sif
.DEFAULT_GOAL := .docker_build
mobileinsight.sif: mobileinsight.def
"$(APPTAINER)" build --build-arg="NUM_THREADS=$(NUM_THREADS)" "$@" "$<"
.docker_build: Dockerfile
"$(DOCKER)" build --build-arg "MAX_THREADS=$(MAX_THREADS)" -t mobileinsight .
touch "$@"
run: mobileinsight.sif
mobileinsight.tar.gz: .docker_build
"$(DOCKER)" save mobileinsight:latest | gzip > "$@"
mobileinsight.sif: mobileinsight.def .docker_build
"$(APPTAINER)" build "$@" "$<"
run: .docker_build
@mkdir -p "$(SHARED_DIR)"
@test -n "$(shell docker image ls -q mobileinsight)" \
|| (echo Cannot find image mobileinsight:latest, has it been built yet? 1>&2 \
&& false)
@"$(DOCKER)" run --rm -it --privileged -v "$(SHARED_DIR):/mnt" \
-e TERM -u root --entrypoint bash mobileinsight:latest
app-run: mobileinsight.sif
@mkdir -p "$(OVERLAY_DIR)"
@lsmod | grep overlay > /dev/null || sudo modprobe overlay
@$(APPTAINER) run --overlay "$(OVERLAY_DIR)" \
-B "/run/user/$(UID)" mobileinsight.sif
clean:
rm -f mobileinsight.sif $(OVERLAY_DIR)
"$(DOCKER)" container prune
"$(DOCKER)" image prune -a
rm -f .docker_build mobileinsight.tar.gz mobileinsight.sif
.PHONY: run clean
clean-data:
rm -rf $(OVERLAY_DIR) $(SHARED_DIR)
.PHONY: sc-run run clean clean-data

View File

@ -1,20 +1,13 @@
MobileInsight Apptainer
=======================
Single launch binary for [MobileInsight](https://github.com/mobile-insight) in
a Ubuntu 22.04 SIF portable container.
Single launch binary for MobileInsight in a Ubuntu 22.04 portable container.
Dependencies
------------
Either one of the following dependencies is needed to run or build SIF images:
- [Apptainer](https://apptainer.org/)
- [Singularity](https://sylabs.io/singularity/)
To use the `make run` command, the overlay Linux kernel module must also be
available on the system. This allows you to make changes to the SIF file using
an overlay filesystem.
The host side only needs `apptainer` or `singularity` to function. A gui is
needed to launch the log viewer.
Usage
-----
@ -32,7 +25,13 @@ $ ./mobileinsight.sif bash
Examples are stored in /opt/mobileinsight-examples.
Build
-----
Building
--------
To build the apptainer, the following dependencies are needed on the host
machine:
1. Apptainer or Singularity
2. Docker
Run `make mobileinsight.sif` to build the apptainer image.

View File

@ -1,90 +1,5 @@
BootStrap: docker
From: ubuntu:22.04
%arguments
NUM_THREADS=1
WS_VER=3.4.0
MI_COMMIT=4b204e0
%files
00-cpp_compat.patch /build/00-cpp_compat.patch
%post
# Update and install dependencies
mkdir -p /build
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get upgrade -y
apt-get install -y \
git \
python3 \
python3-pip \
python3-wxgtk4.0 \
python3-matplotlib \
cmake \
pkg-config \
wget \
libglib2.0-dev \
bison \
flex \
libpcap-dev \
libgcrypt-dev \
qtbase5-dev \
qtchooser \
qt5-qmake \
qtbase5-dev-tools \
qttools5-dev \
qtmultimedia5-dev \
libqt5svg5-dev \
libc-ares-dev \
libsdl2-mixer-2.0-0 \
libsdl2-image-2.0-0 \
libsdl2-2.0-0
pip3 install pyserial
# Download resources
cd /build
wget "http://www.mobileinsight.net/wireshark-{{ WS_VER }}-rbc-dissector.tar.xz" -nv \
-O "wireshark-{{ WS_VER }}.tar.xz"
tar -xf "wireshark-{{ WS_VER }}.tar.xz"
git clone "https://github.com/mobile-insight/mobileinsight-core.git"
git -C mobileinsight-core checkout "{{ MI_COMMIT }}"
# Compile and install wireshark
cd "/build/wireshark-{{ WS_VER }}"
patch epan/epan.h < /build/00-cpp_compat.patch
cmake -DBUILD_wireshark=OFF .
make -j "{{ NUM_THREADS }}"
make install
ldconfig
# Compile and install Wireshark dissector
cd /build/mobileinsight-core/ws_dissector
g++ ws_dissector.cpp packet-aww.cpp -o ws_dissector \
$(pkg-config --libs --cflags glib-2.0) \
-I"/build/wireshark-{{ WS_VER }}" \
-L"/usr/local/lib" \
-lwireshark \
-lwsutil \
-lwiretap
strip ws_dissector
install -Dm 755 ws_dissector /usr/local/bin/ws_dissector
# Compile and install MobileInsight
cd /build/mobileinsight-core
python3 setup.py install
mkdir -p /usr/local/share/mobileinsight
cp -r gui/* /usr/local/share/mobileinsight
ln -s /usr/local/share/mobileinsight/mi-gui /usr/local/bin/mi-gui
cp -r examples /opt/mobileinsight-examples
# Link python3 to python
cd /usr/bin
ln -s python3 python
# Cleanup
apt-get autoclean -y
rm -rf /build
BootStrap: docker-daemon
From: mobileinsight:latest
%runscript
set -e
@ -94,4 +9,3 @@ From: ubuntu:22.04
else
"$@"
fi