A dockerized version of AltServer-Linux with Wi-Fi sync capability.
NOTE: I still keep track of this project as unfortunately it's the only way to have a reliable AltServer on Linux, however, as of iOS 18, it seems that AltServer is not open source and the upstream repo that AltServer-Linux tracks from is also unmaintained. Therefore, I would strongly recommend to switching to SideStore, which does not require an AltServer to run. Otherwise, your apps will likely become unverified over time.
- Docker
- Avahi running on host system
- usbmuxd NOT running on host system
Option 1 (preferred): Docker Engine
Option 2: Docker Desktop
Install WSL2 then use the Linux install instructions or install using Docker Desktop.
Install using Docker Desktop.
pacman -S avahi
apt install avahi-daemon
dnf install avahi
sudo systemctl enable avahi-daemon
sudo systemctl start avahi-daemon
sudo systemctl stop usbmuxd
sudo systemctl disable usbmuxd
pacman -R usbmuxd
apt remove usbmuxd
dnf remove usbmuxd
To start up the application, you can run:
docker compose up -d
Or optionally if you'd like to build it yourself, modify the docker-compose.yml, uncomment the build config and run the docker-compose stack with the optional build flag:
docker compose up -d --build
Just run run.sh
, or manually in your terminal:
docker build . -t altserver-docker && \
docker stop altserver || true && \
docker rm altserver || true && \
sudo docker run -d \
-v "./lib:/root/.config/Provision/lib" \
-v "./logs:/altserver/logs" \
-v "./bin:/altserver/bin" \
-v "/dev/bus/usb:/dev/bus/usb" \
-v "/var/lib/lockdown:/var/lib/lockdown" \
-v "/var/run:/var/run" \
-v "/sys/fs/cgroup:/sys/fs/cgroup:ro" \
--name altserver \
--network host \
--privileged \
altserver-docker
-
Make sure you have your Device UDID (can be found using this guide).
-
Run this command to install AltStore to your device:
docker exec -it altserver /altserver/bin/AltServer -u "<UDID>" -a "<Apple ID>" -p "<Password>" /altserver/bin/AltStore.ipa
NOTE: Only tested with Docker running on Linux. YMMV when running Docker on other operating systems.
Logs will be stored in the directory where the container is ran inside ./logs
It's possible to override which architecture of altserver, netmuxd, anisette-server and provision libraries (for anisette) are downloaded by setting the following environment variables in the docker compose file:
environment:
- OVERRIDE_ALTSERVER_ARCH=x86_64
- OVERRIDE_NETMUXD_ARCH=x86_64
- OVERRIDE_ANISETTE_ARCH=x86_64
- OVERRIDE_PROVISION_LIBS_ARCH=x86_64
or alternatively adding them in the docker run
command before the image name:
-e OVERRIDE_ALTSERVER_ARCH=x86_64 \
-e OVERRIDE_NETMUXD_ARCH=x86_64 \
-e OVERRIDE_ANISETTE_ARCH=x86_64 \
-e OVERRIDE_PROVISION_LIBS_ARCH=x86_64 \
You can check for which architectures are available by checking the releases of each project:
- AltServer-Linux
- netmuxd
- Provision (this is the anisette-server)
- The libraries are pulled from the apple music android apk, so the only available options are
arm64-v8a
,armeabi-v7a
,x86
,x86_64
It's possible to allow provision to download the libraries it needs from the apple music android apk by setting the following environment variable in the docker compose file:
environment:
- ALLOW_PROVISION_TO_DOWNLOAD_LIBS=true
or alternatively adding it in the docker run
command before the image name:
-e ALLOW_PROVISION_TO_DOWNLOAD_LIBS=true \
When this variable is present, the libraries will be downloaded by provision, if it's not present, the libraries will be decompressed from the repo.
Provision automatically pulls the libraries it requires (libCoreADI.so and libstoreservicescore.so) from the apple music android apk, but this requires a 60+MB download it does automatically, so I decided to include these in the root of the repo already and have the docker-entrypoint.sh
decompress them where Provision normally would. This is optional and can be overridden by setting the ALLOW_PROVISION_TO_DOWNLOAD_LIBS
environment variable to true
.
To update lib.tar.xz just run:
bash scripts/provision-deps-manual-download.sh
from the root of the repo.
I authored this repo but I did NOT author the projects it depends on. In particular:
And some other projects which inspired me to create this repo:
- altserverd which I took inspiration and some code from.
- AltServer-Linux-PyScript which I audited and took inspiration from.
Feel free to open an issue or a PR if you have any suggestions or improvements to this repo. I'm always open to feedback and contributions!