mirror of
https://github.com/sickcodes/Docker-OSX.git
synced 2024-11-26 04:01:29 +08:00
Major serial number runtime generation and override changes.
This commit is contained in:
parent
9f104526e0
commit
23ab20c2fa
@ -1,5 +1,6 @@
|
||||
|Version|Date|Notes|
|
||||
|---|---|---|
|
||||
|3.2|2021-02-25|Add a script to generate unique machine serial numbers. Add a script to generate a bootdisk from given serial numbers. Add Linux for libguestfs which allows the docker container to make QEMU bootdisks with specific serial numbers.|
|
||||
| |2021-02-21|Add NOPICKER environment variable to ALL images.|
|
||||
|3.1|2021-02-21|Remove testing repos. Switch to base-devel. We shouldn't be using testing repos in a Dockerfile for light increase in stability. Add the mandatory glibc patch to every pacman until someone upstream fixes it.|
|
||||
| |2021-02-07|Add NOPICKER environment variable to :naked image for effortless boot toggling.|
|
||||
|
57
Dockerfile
57
Dockerfile
@ -8,7 +8,7 @@
|
||||
# Repo: https://github.com/sickcodes/Docker-OSX/
|
||||
# Title: Mac on Docker (Docker-OSX)
|
||||
# Author: Sick.Codes https://sick.codes/
|
||||
# Version: 3.1
|
||||
# Version: 3.2
|
||||
# License: GPLv3+
|
||||
#
|
||||
# All credits for OSX-KVM and the rest at @Kholia's repo: https://github.com/kholia/osx-kvm
|
||||
@ -216,6 +216,8 @@ RUN touch Launch.sh \
|
||||
&& tee -a Launch.sh <<< '${EXTRA:-}'
|
||||
|
||||
# docker exec containerid mv ./Launch-nopicker.sh ./Launch.sh
|
||||
# This is now a legacy command.
|
||||
# You can use -e BOOTDISK=/bootdisk with -v ./bootdisk.img:/bootdisk
|
||||
RUN grep -v InstallMedia ./Launch.sh > ./Launch-nopicker.sh \
|
||||
&& chmod +x ./Launch-nopicker.sh \
|
||||
&& sed -i -e s/OpenCore\.qcow2/OpenCore\-nopicker\.qcow2/ ./Launch-nopicker.sh
|
||||
@ -233,13 +235,62 @@ ENV NETWORKING=e1000-82545em
|
||||
|
||||
ENV NOPICKER=false
|
||||
|
||||
# Boolean for generating a bootdisk with new serials.
|
||||
ENV UNIQUE=false
|
||||
|
||||
VOLUME ["/tmp/.X11-unix"]
|
||||
|
||||
# check if /image is a disk image or a directory. This allows you to optionally use -v disk.img:/image
|
||||
# NOPICKER is used to skip the disk selection screen
|
||||
# GENERATE_UNIQUE is used to generate serial numbers on boot.
|
||||
# /env is a file that you can generate and save using -v source.sh:/env
|
||||
# the env file is a file that you can carry to the next container which will supply the serials numbers.
|
||||
# GENERATE_SPECIFIC is used to either accept the env serial numbers OR you can supply using:
|
||||
# -e DEVICE_MODEL="iMacPro1,1" \
|
||||
# -e SERIAL="C02TW0WAHX87" \
|
||||
# -e BOARD_SERIAL="C027251024NJG36UE" \
|
||||
# -e UUID="5CCB366D-9118-4C61-A00A-E5BAF3BED451" \
|
||||
# -e MAC_ADDRESS="A8:5C:2C:9A:46:2F" \
|
||||
|
||||
# the output will be /bootdisk.
|
||||
# /bootdisk is a useful persistent place to store the 15Mb serial number bootdisk.
|
||||
|
||||
# if you don't set any of the above:
|
||||
# the default serial numbers are already contained in ./OpenCore-Catalina/OpenCore.qcow2
|
||||
# And the default serial numbers
|
||||
|
||||
CMD case "$(file --brief /image)" in \
|
||||
QEMU*) export IMAGE_PATH=/image && sudo chown "$(id -u)":"$(id -g)" "${IMAGE_PATH}" 2>/dev/null || true;; \
|
||||
directory*) export IMAGE_PATH=/home/arch/OSX-KVM/mac_hdd_ng.img;; \
|
||||
QEMU\ QCOW2\ Image* ) export IMAGE_PATH=/image \
|
||||
; sudo chown "$(id -u)":"$(id -g)" "${IMAGE_PATH}" 2>/dev/null || true \
|
||||
;; \
|
||||
directory* ) export IMAGE_PATH=/home/arch/OSX-KVM/mac_hdd_ng.img \
|
||||
;; \
|
||||
esac \
|
||||
; [[ "${NOPICKER}" == true ]] && mv ./Launch-nopicker.sh ./Launch.sh \
|
||||
; [[ "${GENERATE_UNIQUE}" == true ]] \
|
||||
&& ./Docker-OSX/custom/generate-unique-machine-values.sh \
|
||||
--count 1 \
|
||||
--tsv ./serial.tsv \
|
||||
--bootdisks \
|
||||
--output-bootdisk "${BOOTDISK:-/home/arch/OSX-KVM/OpenCore-Catalina/OpenCore.qcow2}" \
|
||||
--output-env "${ENV:=/env}" \
|
||||
&& source "${ENV}" \
|
||||
; [[ "${GENERATE_SPECIFIC}" == true ]] \
|
||||
&& source /env \
|
||||
|| ./Docker-OSX/custom/generate-specific-bootdisk.sh \
|
||||
--model "${DEVICE_MODEL}" \
|
||||
--serial "${SERIAL}" \
|
||||
--board-serial "${BOARD_SERIAL}" \
|
||||
--uuid "${UUID}" \
|
||||
--mac-address "${MAC_ADDRESS}" \
|
||||
--output-bootdisk "${BOOTDISK:-/home/arch/OSX-KVM/OpenCore-Catalina/OpenCore.qcow2}" \
|
||||
; case "$(file --brief /bootdisk)" in \
|
||||
QEMU\ QCOW2\ Image* ) export BOOTDISK=/bootdisk \
|
||||
; sudo chown "$(id -u)":"$(id -g)" "${BOOTDISK}" 2>/dev/null || true \
|
||||
;; \
|
||||
directory* ) export BOOTDISK=/home/arch/OSX-KVM/OpenCore-Catalina/OpenCore.qcow2 \
|
||||
;; \
|
||||
esac \
|
||||
; ./enable-ssh.sh && envsubst < ./Launch.sh | bash
|
||||
|
||||
# virt-manager mode: eta son
|
||||
|
@ -7,7 +7,7 @@
|
||||
#
|
||||
# Title: Mac on Docker (Docker-OSX) [AUTOINSTALL]
|
||||
# Author: Sick.Codes https://twitter.com/sickcodes
|
||||
# Version: 3.1
|
||||
# Version: 3.2
|
||||
# License: GPLv3+
|
||||
# Repository: https://github.com/sickcodes/Docker-OSX
|
||||
#
|
||||
@ -140,6 +140,30 @@ ENV BOILERPLATE="By using this Dockerfile, you hereby agree that you are a secur
|
||||
CMD echo "${BOILERPLATE}" \
|
||||
&& [[ "${TERMS_OF_USE}" = i_agree ]] || exit 1 \
|
||||
; [[ "${NOPICKER}" == true ]] && mv ./Launch-nopicker.sh ./Launch.sh \
|
||||
; [[ "${GENERATE_UNIQUE}" == true ]] \
|
||||
&& ./Docker-OSX/custom/generate-unique-machine-values.sh \
|
||||
--count 1 \
|
||||
--tsv ./serial.tsv \
|
||||
--bootdisks \
|
||||
--output-bootdisk "${BOOTDISK:-/home/arch/OSX-KVM/OpenCore-Catalina/OpenCore.qcow2}" \
|
||||
--output-env "${ENV:=/env}" \
|
||||
&& source "${ENV}" \
|
||||
; [[ "${GENERATE_SPECIFIC}" == true ]] \
|
||||
&& source /env \
|
||||
|| ./Docker-OSX/custom/generate-specific-bootdisk.sh \
|
||||
--model "${DEVICE_MODEL}" \
|
||||
--serial "${SERIAL}" \
|
||||
--board-serial "${BOARD_SERIAL}" \
|
||||
--uuid "${UUID}" \
|
||||
--mac-address "${MAC_ADDRESS}" \
|
||||
--output-bootdisk "${BOOTDISK:-/home/arch/OSX-KVM/OpenCore-Catalina/OpenCore.qcow2}" \
|
||||
; case "$(file --brief /bootdisk)" in \
|
||||
QEMU\ QCOW2\ Image* ) export BOOTDISK=/bootdisk \
|
||||
; sudo chown "$(id -u)":"$(id -g)" "${BOOTDISK}" 2>/dev/null || true \
|
||||
;; \
|
||||
directory* ) export BOOTDISK=/home/arch/OSX-KVM/OpenCore-Catalina/OpenCore.qcow2 \
|
||||
;; \
|
||||
esac \
|
||||
; [[ "${DISPLAY}" = ':99' ]] && { \
|
||||
nohup Xvfb :99 -screen 0 1920x1080x16 \
|
||||
& until [[ "$(xrandr --query 2>/dev/null)" ]]; do sleep 0.1 ; done \
|
||||
|
@ -7,7 +7,7 @@
|
||||
#
|
||||
# Title: Mac on Docker (Docker-OSX) [AUTOINSTALL]
|
||||
# Author: Sick.Codes https://twitter.com/sickcodes
|
||||
# Version: 3.1
|
||||
# Version: 3.2
|
||||
# License: GPLv3+
|
||||
# Repository: https://github.com/sickcodes/Docker-OSX
|
||||
#
|
||||
@ -29,7 +29,7 @@
|
||||
# docker run -it --device /dev/kvm -p 50922:10022 -v ${PWD}/mac_hdd_ng.img:/image -e "DISPLAY=${DISPLAY:-:0.0}" -v /tmp/.X11-unix:/tmp/.X11-unix docker-osx:naked
|
||||
#
|
||||
|
||||
FROM sickcodes/docker-osx:latest
|
||||
FROM docker-osx:latest
|
||||
|
||||
MAINTAINER 'https://twitter.com/sickcodes' <https://sick.codes>
|
||||
|
||||
@ -112,6 +112,29 @@ CMD [[ "${DISPLAY}" = ':99' ]] && { \
|
||||
& until [[ "$(xrandr --query 2>/dev/null)" ]]; do sleep 1 ; done \
|
||||
; } \
|
||||
; sudo chown "$(id -u)":"$(id -g)" "${IMAGE_PATH}" 2>/dev/null || true \
|
||||
; ./enable-ssh.sh \
|
||||
; [[ "${NOPICKER}" == true ]] && mv ./Launch-nopicker.sh ./Launch.sh \
|
||||
; envsubst < ./Launch.sh | bash
|
||||
; [[ "${GENERATE_UNIQUE}" == true ]] \
|
||||
&& ./Docker-OSX/custom/generate-unique-machine-values.sh \
|
||||
--count 1 \
|
||||
--tsv ./serial.tsv \
|
||||
--bootdisks \
|
||||
--output-bootdisk "${BOOTDISK:-/home/arch/OSX-KVM/OpenCore-Catalina/OpenCore.qcow2}" \
|
||||
--output-env "${ENV:=/env}" \
|
||||
&& source "${ENV}" \
|
||||
; [[ "${GENERATE_SPECIFIC}" == true ]] \
|
||||
&& source /env \
|
||||
|| ./Docker-OSX/custom/generate-specific-bootdisk.sh \
|
||||
--model "${DEVICE_MODEL}" \
|
||||
--serial "${SERIAL}" \
|
||||
--board-serial "${BOARD_SERIAL}" \
|
||||
--uuid "${UUID}" \
|
||||
--mac-address "${MAC_ADDRESS}" \
|
||||
--output-bootdisk "${BOOTDISK:-/home/arch/OSX-KVM/OpenCore-Catalina/OpenCore.qcow2}" \
|
||||
; case "$(file --brief /bootdisk)" in \
|
||||
QEMU\ QCOW2\ Image* ) export BOOTDISK=/bootdisk \
|
||||
; sudo chown "$(id -u)":"$(id -g)" "${BOOTDISK}" 2>/dev/null || true \
|
||||
;; \
|
||||
directory* ) export BOOTDISK=/home/arch/OSX-KVM/OpenCore-Catalina/OpenCore.qcow2 \
|
||||
;; \
|
||||
esac \
|
||||
; ./enable-ssh.sh && envsubst < ./Launch.sh | bash
|
||||
|
97
README.md
97
README.md
@ -3,10 +3,12 @@
|
||||
|
||||
![Running mac osx in a docker container](/running-mac-inside-docker-qemu.png?raw=true "OSX KVM DOCKER")
|
||||
|
||||
Run Mac in a Docker container! Run near native OSX-KVM in Docker! X11 Forwarding!
|
||||
Run Mac in a Docker container! Run near native OSX-KVM in Docker! X11 Forwarding! iMessage security research!
|
||||
|
||||
Author: Sick.Codes https://sick.codes/ & https://twitter.com/sickcodes
|
||||
|
||||
Documentation: everything is on this page!
|
||||
|
||||
### PR & Contributor Credits
|
||||
|
||||
https://github.com/sickcodes/Docker-OSX/blob/master/CREDITS.md
|
||||
@ -21,7 +23,9 @@ Docker Hub: https://hub.docker.com/r/sickcodes/docker-osx
|
||||
|
||||
## Professional Support Available!
|
||||
|
||||
Enquire at https://sick.codes/contact
|
||||
Small questions & issues: open an issue!
|
||||
|
||||
For big projects, DM on Twitter [@sickcodes on Twitter](https://twitter.com/sickcodes) or write to us at https://sick.codes/contact.
|
||||
|
||||
- Enterprise support, Business support, or casual support.
|
||||
- Custom images, custom scripts, consulting (per hour available!)
|
||||
@ -31,11 +35,13 @@ Enquire at https://sick.codes/contact
|
||||
|
||||
Kubernetes Helm Chart & Documentation [available at ./helm](https://github.com/sickcodes/Docker-OSX/tree/master/helm)
|
||||
|
||||
Thank you to @cephasara for this major contribution.
|
||||
|
||||
[![Artifact HUB](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/docker-osx)](https://artifacthub.io/packages/search?repo=docker-osx)
|
||||
|
||||
#### Follow [@sickcodes on Twitter](https://twitter.com/sickcodes) for updates or feature requests!
|
||||
|
||||
# Quick Start Docker-OSX
|
||||
# Basic Quick Start Docker-OSX
|
||||
|
||||
```bash
|
||||
|
||||
@ -52,18 +58,28 @@ docker run -it \
|
||||
|
||||
```
|
||||
|
||||
# Quick Start 17.5GB Pre-Made Image
|
||||
# Quick Start Large Pre-Made Image
|
||||
|
||||
Current large image size: 17.5GB
|
||||
|
||||
You will need around 50GB of space: half for the base image + half for your runtime image.
|
||||
This starts the special auto image @sickcodes prepared earlier.
|
||||
|
||||
If you run out of space, you can nuke your Docker images/history/cache by simply deleting `/var/lib/docker`
|
||||
This image has already been installed with the following settings:
|
||||
|
||||
- SSH enabled
|
||||
- username is user
|
||||
- password is alpine
|
||||
- Autoupdates off
|
||||
|
||||
You will need around 50GB of space to run this image: half for the base image + half for your runtime image.
|
||||
|
||||
If you run out of space, you can delete all your Docker images/history/cache by simply deleting `/var/lib/docker`
|
||||
|
||||
```bash
|
||||
|
||||
docker pull sickcodes/docker-osx:auto
|
||||
|
||||
# boot straight to OSX shell with no display (19GB)
|
||||
# boot directly into a real OSX shell with no display (Xvfb)
|
||||
docker run -it \
|
||||
--device /dev/kvm \
|
||||
-p 50922:10022 \
|
||||
@ -76,7 +92,7 @@ docker run -it \
|
||||
|
||||
docker pull sickcodes/docker-osx:auto
|
||||
|
||||
# boot to OSX shell + display (19GB)
|
||||
# boot directly into a real OSX shell with a visual display
|
||||
docker run -it \
|
||||
--device /dev/kvm \
|
||||
-p 50922:10022 \
|
||||
@ -90,7 +106,7 @@ docker run -it \
|
||||
|
||||
docker pull sickcodes/docker-osx:auto
|
||||
|
||||
# boot to OSX shell + display (19GB) + commands to run inside OSX
|
||||
# boot to OSX shell + display + specify commands to run inside OSX!
|
||||
docker run -it \
|
||||
--device /dev/kvm \
|
||||
-p 50922:10022 \
|
||||
@ -104,6 +120,8 @@ docker run -it \
|
||||
```
|
||||
### Restart an auto container
|
||||
|
||||
Containers that use `sickcodes/docker-osx:auto` can be stopped at started.
|
||||
|
||||
```bash
|
||||
# find last container
|
||||
docker ps -a
|
||||
@ -113,13 +131,14 @@ docker start -i containerid
|
||||
|
||||
```
|
||||
|
||||
# Quick Start Own Image
|
||||
# Quick Start Own Image (naked container image)
|
||||
|
||||
This is my favourite container. You can supply an existing disk image as a docker command line argument.
|
||||
|
||||
Supply your own local image with `-v "${PWD}/mac_hdd_ng.img:/image"` and use `sickcodes/docker-osx:naked`
|
||||
|
||||
- Naked image is for booting any existing .img file.
|
||||
- By default, this image has a variable called `NOPICKER` which is `"true"`. Use `-e NOPICKER=false` or any other string than the word `true` to enter the boot menu. This lets you use other disks instead of skipping the boot menu, e.g. recovery disk.
|
||||
- By default, this image has a variable called `NOPICKER` which is `"true"`. This skips the disk selection menu. Use `-e NOPICKER=false` or any other string than the word `true` to enter the boot menu. This lets you use other disks instead of skipping the boot menu, e.g. recovery disk or disk utility.
|
||||
|
||||
```bash
|
||||
docker pull sickcodes/docker-osx:naked
|
||||
@ -153,24 +172,25 @@ docker run -it \
|
||||
sickcodes/docker-osx:naked
|
||||
```
|
||||
|
||||
# Features In Docker-OSX v3.1
|
||||
- Full auto mode: boot straight to OSX shell.
|
||||
- sickcodes/docker-osx:latest - original base recovery image (safe)
|
||||
- sickcodes/docker-osx:naked - supply your own .img file (safe)
|
||||
- sickcodes/docker-osx:auto - 17.5GB image boot to OSX shell (must trust @sickcodes)
|
||||
- Supply your own image using -v $PWD/disk.img:/image
|
||||
# Features In Docker-OSX v3.2
|
||||
- Serial number generators. [See below or ./custom](https://github.com/sickcodes/Docker-OSX/tree/master/custom)
|
||||
- Full auto mode: boot straight to OSX shell and even run commands as runtime arguments!
|
||||
- `sickcodes/docker-osx:latest` - original base recovery image (safe)
|
||||
- `sickcodes/docker-osx:naked` - supply your own .img file (safe)
|
||||
- `sickcodes/docker-osx:auto` - Large docker image that boots to OSX shell (must trust @sickcodes)
|
||||
- Supply your own image using `-v "${PWD}/disk.img:/image"`
|
||||
- Kubernetes Helm Chart. [See ./helm](https://github.com/sickcodes/Docker-OSX/tree/master/helm)
|
||||
- OSX-KVM
|
||||
- [OSX-KVM](https://github.com/kholia/OSX-KVM) inside a Docker container!
|
||||
- X11 Forwarding
|
||||
- SSH on localhost:50922
|
||||
- QEMU
|
||||
- VNC on localhost:8888 [vnc version is inside a separate directory](https://github.com/sickcodes/Docker-OSX/blob/master/vnc-version/Dockerfile)
|
||||
- Create an ARMY using `docker commit`
|
||||
- XFVB HEADLESS (use vnc)
|
||||
- SSH on `localhost:50922`
|
||||
- QEMU + KVM!
|
||||
- VNC version on `localhost:8888` [vnc version is inside a separate directory, there are security risks involved with using VNC, see insid the Dockerfile](https://github.com/sickcodes/Docker-OSX/blob/master/vnc-version/Dockerfile)
|
||||
- Create an ARMY of the same exact container using `docker commit`
|
||||
- Xfvb headless mode
|
||||
|
||||
### All Pull Requests Welcome!
|
||||
|
||||
Docker-OSX is a GPLv3+ Dockerfile and we need contributors just like you :).
|
||||
Docker-OSX is a GPLv3+ Dockerfile and we need contributors just like you :)
|
||||
|
||||
Upstream: https://github.com/kholia/OSX-KVM && the great guy [@kholia](https://twitter.com/kholia)
|
||||
|
||||
@ -178,6 +198,10 @@ Upstream Credits (OSX-KVM project) among many others: https://github.com/kholia/
|
||||
|
||||
# Download The Image for sickcodes/docker-osx:naked
|
||||
|
||||
This is the current automated image. Username is `user`, passsword is `alpine`, SSH is on, and auto-updates are off.
|
||||
|
||||
If the download is slow, just get the image from `docker pull sickcodes/docker-osx:auto` and find it in `/var/lib/docker`.
|
||||
|
||||
```bash
|
||||
wget https://images2.sick.codes/mac_hdd_ng_auto.img
|
||||
|
||||
@ -191,14 +215,6 @@ docker run -it \
|
||||
|
||||
```
|
||||
|
||||
# Internet Speeds
|
||||
|
||||
### Slow internet but iMessage & iCloud compatability
|
||||
`-e NETWORKING=e1000-82545em`
|
||||
|
||||
### FAST internet but not compatable with iMessage & iCloud
|
||||
`-e NETWORKING=vmxnet3`
|
||||
|
||||
### Other cool Docker-QEMU based projects:
|
||||
|
||||
[Run iOS in a Docker with Docker-eyeOS](https://github.com/sickcodes/Docker-eyeOS) - [https://github.com/sickcodes/Docker-eyeOS](https://github.com/sickcodes/Docker-eyeOS)
|
||||
@ -243,6 +259,8 @@ ssh fullname@localhost -p 50922
|
||||
|
||||
# Autoboot into OSX after you've installed everything
|
||||
|
||||
You can use `-e NOPICKER=true` or for older machines:
|
||||
|
||||
```bash
|
||||
# find you containerID
|
||||
docker ps
|
||||
@ -289,7 +307,9 @@ sudo modprobe kvm
|
||||
|
||||
# Start the same container later (persistent disk)
|
||||
|
||||
This is for when you want to run the SAME container again later.
|
||||
1. You can now pull the `.img` file out of the container, which is stored in `/var/lib/docker`, and supply it as a runtime argument to the `:naked` Docker image. See above.
|
||||
|
||||
2. This is for when you want to run the SAME container again later.
|
||||
|
||||
If you don't run this you will have a new image every time.
|
||||
|
||||
@ -501,6 +521,15 @@ sudo mv somedir/mac_hdd_ng.img .
|
||||
|
||||
[Use the sickcodes/docker-osx:naked image.](https://github.com/sickcodes/Docker-OSX/tree/custom-identity#quick-start-own-image)
|
||||
|
||||
# Internet Speeds
|
||||
|
||||
### Slow internet but iMessage & iCloud compatability
|
||||
`-e NETWORKING=e1000-82545em`
|
||||
|
||||
### FAST internet but not compatable with iMessage & iCloud
|
||||
`-e NETWORKING=vmxnet3`
|
||||
|
||||
|
||||
# DESTROY: Wipe old images to free disk space
|
||||
|
||||
The easiest way to clean out your entire Docker (ALL images, layers, and containers) is to `sudo rm -rf /var/lib/docker`
|
||||
@ -713,7 +742,7 @@ The directory that we are letting the Docker container use is a X server display
|
||||
If we let the Docker container use the same display socket as our own environment, then any applications you run inside the Docker container will show up on your screen too! [https://www.x.org/archive/X11R6.8.0/doc/RELNOTES5.html](https://www.x.org/archive/X11R6.8.0/doc/RELNOTES5.html)
|
||||
|
||||
|
||||
## Todo:
|
||||
## TODO:
|
||||
```
|
||||
- Security Documentation
|
||||
- GPU Acceleration: Coming Soon
|
||||
|
@ -1,5 +1,9 @@
|
||||
# docker-osx
|
||||
|
||||
Docker-OSX Helm Chart for Kubernetes.
|
||||
|
||||
Project page: https://github.com/sickcodes/docker-osx
|
||||
|
||||
Available now on Artifact HUB
|
||||
[![Artifact HUB](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/docker-osx)](https://artifacthub.io/packages/search?repo=docker-osx)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user