mirror of https://github.com/oxen-io/lokinet
redo ci pipeline:
* make cached docker containers for ci * remove old docker files from root of repo * use cached docker containers for cipull/1550/head
parent
f2f0486f13
commit
2655a64da0
@ -0,0 +1,8 @@
|
|||||||
|
FROM debian:testing
|
||||||
|
RUN /bin/bash -c 'echo "man-db man-db/auto-update boolean false" | debconf-set-selections'
|
||||||
|
RUN /bin/bash -c 'sed -i "s/main/main contrib/g" /etc/apt/sources.list'
|
||||||
|
RUN /bin/bash -c 'apt-get -o=Dpkg::Use-Pty=0 -q update && apt-get -o=Dpkg::Use-Pty=0 -q dist-upgrade -y && apt-get -o=Dpkg::Use-Pty=0 -q install -y android-sdk google-android-ndk-installer'
|
||||||
|
RUN /bin/bash -c 'apt-get -o=Dpkg::Use-Pty=0 -q -y install wget git pkg-config'
|
||||||
|
RUN /bin/bash -c 'wget https://services.gradle.org/distributions/gradle-6.3-bin.zip -O /tmp/gradle.zip && unzip -d /opt/ /tmp/gradle.zip && ln -s /opt/gradle*/bin/gradle /usr/local/bin/gradle && rm -f /tmp/gradle.zip'
|
||||||
|
RUN /bin/bash -c 'git clone https://github.com/Shadowstyler/android-sdk-licenses.git /tmp/android-sdk-licenses && cp -a /tmp/android-sdk-licenses/*-license /usr/lib/android-sdk/licenses && rm -rf /tmp/android-sdk-licenses'
|
||||||
|
RUN /bin/bash -c 'apt-get -o=Dpkg::Use-Pty=0 -q -y install automake libtool'
|
@ -0,0 +1,3 @@
|
|||||||
|
FROM debian:sid
|
||||||
|
RUN /bin/bash -c 'echo "man-db man-db/auto-update boolean false" | debconf-set-selections'
|
||||||
|
RUN /bin/bash -c 'apt-get -o=Dpkg::Use-Pty=0 -q update && apt-get -o=Dpkg::Use-Pty=0 -q dist-upgrade -y && apt-get -o=Dpkg::Use-Pty=0 -q install -y eatmydata gdb cmake git ninja-build pkg-config ccache clang-11 libsodium-dev libsystemd-dev python3-dev libuv1-dev libunbound-dev nettle-dev libssl-dev libevent-dev libsqlite3-dev'
|
@ -0,0 +1,3 @@
|
|||||||
|
FROM debian:stable
|
||||||
|
RUN /bin/bash -c 'echo "man-db man-db/auto-update boolean false" | debconf-set-selections'
|
||||||
|
RUN /bin/bash -c 'apt-get -o=Dpkg::Use-Pty=0 -q update && apt-get -o=Dpkg::Use-Pty=0 -q dist-upgrade -y && apt-get -o=Dpkg::Use-Pty=0 -q install -y eatmydata gdb cmake git ninja-build pkg-config ccache g++ libsodium-dev libsystemd-dev python3-dev libuv1-dev libunbound-dev nettle-dev libssl-dev libevent-dev libsqlite3-dev'
|
@ -0,0 +1,4 @@
|
|||||||
|
FROM debian:testing
|
||||||
|
RUN /bin/bash -c 'echo "man-db man-db/auto-update boolean false" | debconf-set-selections'
|
||||||
|
RUN /bin/bash -c 'apt-get -o=Dpkg::Use-Pty=0 -q update && apt-get -o=Dpkg::Use-Pty=0 -q dist-upgrade -y && apt-get -o=Dpkg::Use-Pty=0 -q install -y eatmydata build-essential cmake git ninja-build pkg-config ccache g++-mingw-w64-x86-64-posix nsis zip automake libtool'
|
||||||
|
RUN /bin/bash -c 'update-alternatives --set x86_64-w64-mingw32-gcc /usr/bin/x86_64-w64-mingw32-gcc-posix && update-alternatives --set x86_64-w64-mingw32-gcc /usr/bin/x86_64-w64-mingw32-gcc-posix'
|
@ -0,0 +1,3 @@
|
|||||||
|
FROM debian:sid
|
||||||
|
RUN /bin/bash -c 'echo "man-db man-db/auto-update boolean false" | debconf-set-selections'
|
||||||
|
RUN /bin/bash -c 'apt-get -o=Dpkg::Use-Pty=0 -q update && apt-get -o=Dpkg::Use-Pty=0 -q install -y eatmydata git clang-format-9'
|
@ -0,0 +1,8 @@
|
|||||||
|
## drone-ci docker jizz
|
||||||
|
|
||||||
|
To rebuild all ci images and push them to a registry server do:
|
||||||
|
|
||||||
|
$ docker login your.registry.here
|
||||||
|
$ ./rebuild-docker-images.sh your.registry.here *.dockerfile
|
||||||
|
|
||||||
|
The docker images will be `your.registry.here/lokinet-ci-*`for each *.dockerfile in this directory
|
@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# the registry server to use
|
||||||
|
registry=$1
|
||||||
|
|
||||||
|
test "x$registry" != "x" || exit 1
|
||||||
|
|
||||||
|
for file in ${@:2} ; do
|
||||||
|
name="$(echo $file | cut -d'.' -f1)"
|
||||||
|
echo "rebuild $name"
|
||||||
|
docker build -f $file -t $registry/lokinet-ci-$name --pull --no-cache --quiet .
|
||||||
|
docker push $registry/lokinet-ci-$name
|
||||||
|
done
|
@ -0,0 +1,3 @@
|
|||||||
|
FROM ubuntu:bionic
|
||||||
|
RUN /bin/bash -c 'echo "man-db man-db/auto-update boolean false" | debconf-set-selections'
|
||||||
|
RUN /bin/bash -c 'apt-get -o=Dpkg::Use-Pty=0 -q update && apt-get -o=Dpkg::Use-Pty=0 -q dist-upgrade -y && apt-get -o=Dpkg::Use-Pty=0 -q install -y eatmydata gdb cmake git ninja-build pkg-config ccache g++-8 python3-dev automake libtool'
|
@ -0,0 +1,3 @@
|
|||||||
|
FROM ubuntu:focal
|
||||||
|
RUN /bin/bash -c 'echo "man-db man-db/auto-update boolean false" | debconf-set-selections'
|
||||||
|
RUN /bin/bash -c 'apt-get -o=Dpkg::Use-Pty=0 -q update && apt-get -o=Dpkg::Use-Pty=0 -q dist-upgrade -y && apt-get -o=Dpkg::Use-Pty=0 -q install -y eatmydata gdb cmake git ninja-build pkg-config ccache g++ libsodium-dev libsystemd-dev python3-dev libuv1-dev libunbound-dev nettle-dev libssl-dev libevent-dev libsqlite3-dev'
|
@ -1,9 +0,0 @@
|
|||||||
FROM alpine:edge as builder
|
|
||||||
|
|
||||||
RUN apk update && \
|
|
||||||
apk --no-cache add --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing build-base cmake git libcap-dev libcap-static libuv-dev libuv-static curl ninja bash binutils-gold mingw-w64-gcc
|
|
||||||
|
|
||||||
WORKDIR /src/
|
|
||||||
COPY . /src/
|
|
||||||
|
|
||||||
RUN make windows-release NINJA=ninja STATIC_LINK=ON DOWNLOAD_SODIUM=ON
|
|
@ -1,8 +0,0 @@
|
|||||||
FROM compose-base:latest
|
|
||||||
|
|
||||||
ENV LOKINET_NETID=docker
|
|
||||||
|
|
||||||
COPY ./docker/compose/bootstrap.ini /root/.lokinet/lokinet.ini
|
|
||||||
|
|
||||||
CMD ["/lokinet"]
|
|
||||||
EXPOSE 1090/udp 1190/tcp
|
|
@ -1,59 +0,0 @@
|
|||||||
[router]
|
|
||||||
# number of crypto worker threads
|
|
||||||
threads=4
|
|
||||||
# path to store signed RC
|
|
||||||
contact-file=/root/.lokinet/self.signed
|
|
||||||
# path to store transport private key
|
|
||||||
transport-privkey=/root/.lokinet/transport.private
|
|
||||||
# path to store identity signing key
|
|
||||||
ident-privkey=/root/.lokinet/identity.private
|
|
||||||
# encryption key for onion routing
|
|
||||||
encryption-privkey=/root/.lokinet/encryption.private
|
|
||||||
block-bogons=false
|
|
||||||
|
|
||||||
# uncomment following line to set router nickname to 'lokinet'
|
|
||||||
nickname=bootstrap
|
|
||||||
|
|
||||||
[logging]
|
|
||||||
level=info
|
|
||||||
|
|
||||||
[metrics]
|
|
||||||
json-metrics-path=/root/.lokinet/metrics.json
|
|
||||||
|
|
||||||
# admin api (disabled by default)
|
|
||||||
[api]
|
|
||||||
enabled=true
|
|
||||||
bind=127.0.0.1:1190
|
|
||||||
|
|
||||||
# system settings for privileges and such
|
|
||||||
[system]
|
|
||||||
user=lokinet
|
|
||||||
group=lokinet
|
|
||||||
pidfile=/root/.lokinet/lokinet.pid
|
|
||||||
|
|
||||||
# dns provider configuration section
|
|
||||||
[dns]
|
|
||||||
# resolver
|
|
||||||
upstream=1.1.1.1
|
|
||||||
bind=127.3.2.1:53
|
|
||||||
|
|
||||||
# network database settings block
|
|
||||||
[netdb]
|
|
||||||
# directory for network database skiplist storage
|
|
||||||
dir=/netdb
|
|
||||||
|
|
||||||
# lokid settings (disabled by default)
|
|
||||||
[lokid]
|
|
||||||
enabled=false
|
|
||||||
jsonrpc=127.0.0.1:22023
|
|
||||||
|
|
||||||
# network settings
|
|
||||||
[network]
|
|
||||||
profiles=/root/.lokinet/profiles.dat
|
|
||||||
enabled=true
|
|
||||||
exit=false
|
|
||||||
ifname=loki-docker0
|
|
||||||
|
|
||||||
# ROUTERS ONLY: publish network interfaces for handling inbound traffic
|
|
||||||
[bind]
|
|
||||||
eth0=1090
|
|
@ -1,6 +0,0 @@
|
|||||||
FROM compose-base:latest
|
|
||||||
|
|
||||||
COPY ./docker/compose/client.ini /root/.lokinet/lokinet.ini
|
|
||||||
|
|
||||||
CMD ["/lokinet"]
|
|
||||||
EXPOSE 1090/udp 1190/tcp
|
|
@ -1,52 +0,0 @@
|
|||||||
[router]
|
|
||||||
# number of crypto worker threads
|
|
||||||
threads=4
|
|
||||||
# path to store signed RC
|
|
||||||
contact-file=/root/.lokinet/self.signed
|
|
||||||
# path to store transport private key
|
|
||||||
transport-privkey=/root/.lokinet/transport.private
|
|
||||||
# path to store identity signing key
|
|
||||||
ident-privkey=/root/.lokinet/identity.private
|
|
||||||
# encryption key for onion routing
|
|
||||||
encryption-privkey=/root/.lokinet/encryption.private
|
|
||||||
block-bogons=false
|
|
||||||
|
|
||||||
[logging]
|
|
||||||
level=info
|
|
||||||
|
|
||||||
[metrics]
|
|
||||||
json-metrics-path=/root/.lokinet/metrics.json
|
|
||||||
|
|
||||||
# admin api (disabled by default)
|
|
||||||
[api]
|
|
||||||
enabled=true
|
|
||||||
bind=127.0.0.1:1190
|
|
||||||
|
|
||||||
# system settings for privileges and such
|
|
||||||
[system]
|
|
||||||
user=lokinet
|
|
||||||
group=lokinet
|
|
||||||
pidfile=/root/.lokinet/lokinet.pid
|
|
||||||
|
|
||||||
# dns provider configuration section
|
|
||||||
[dns]
|
|
||||||
# resolver
|
|
||||||
upstream=1.1.1.1
|
|
||||||
bind=127.0.0.1:53
|
|
||||||
|
|
||||||
# network database settings block
|
|
||||||
[netdb]
|
|
||||||
# directory for network database skiplist storage
|
|
||||||
dir=/netdb
|
|
||||||
|
|
||||||
# lokid settings (disabled by default)
|
|
||||||
[lokid]
|
|
||||||
enabled=false
|
|
||||||
jsonrpc=127.0.0.1:22023
|
|
||||||
|
|
||||||
# network settings
|
|
||||||
[network]
|
|
||||||
profiles=/root/.lokinet/profiles.dat
|
|
||||||
enabled=true
|
|
||||||
exit=false
|
|
||||||
ifname=loki-docker0
|
|
@ -1,16 +0,0 @@
|
|||||||
ARG LOKINET_NETID=docker
|
|
||||||
|
|
||||||
FROM alpine:edge as builder
|
|
||||||
|
|
||||||
RUN apk update && \
|
|
||||||
apk add build-base cmake git libcap-dev libcap-static libuv-dev libuv-static curl ninja bash binutils-gold
|
|
||||||
|
|
||||||
WORKDIR /src/
|
|
||||||
COPY . /src/
|
|
||||||
|
|
||||||
RUN make NINJA=ninja STATIC_LINK=ON BUILD_TYPE=Release
|
|
||||||
|
|
||||||
FROM alpine:latest
|
|
||||||
|
|
||||||
COPY --from=builder /src/build/daemon/lokinet /
|
|
||||||
COPY --from=builder /src/build/daemon/lokinet-ctl /
|
|
@ -1,87 +0,0 @@
|
|||||||
version: '3.4'
|
|
||||||
services:
|
|
||||||
bootstrap-router:
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
dockerfile: docker/compose/bootstrap.Dockerfile
|
|
||||||
image: bootstrap
|
|
||||||
cap_add:
|
|
||||||
- NET_ADMIN
|
|
||||||
devices:
|
|
||||||
- "/dev/net/tun:/dev/net/tun"
|
|
||||||
ports:
|
|
||||||
- target: 1090
|
|
||||||
protocol: udp
|
|
||||||
- target: 1190
|
|
||||||
protocol: tcp
|
|
||||||
volumes:
|
|
||||||
- bootstrap-dir:/root/.lokinet/
|
|
||||||
environment:
|
|
||||||
- LOKINET_NETID=docker
|
|
||||||
networks:
|
|
||||||
testing_net:
|
|
||||||
|
|
||||||
router:
|
|
||||||
depends_on:
|
|
||||||
- bootstrap-router
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
dockerfile: docker/compose/router.Dockerfile
|
|
||||||
image: router
|
|
||||||
devices:
|
|
||||||
- "/dev/net/tun:/dev/net/tun"
|
|
||||||
ports:
|
|
||||||
- target: 1090
|
|
||||||
protocol: udp
|
|
||||||
mode: host
|
|
||||||
- target: 1190
|
|
||||||
protocol: tcp
|
|
||||||
mode: host
|
|
||||||
cap_add:
|
|
||||||
- NET_ADMIN
|
|
||||||
volumes:
|
|
||||||
- bootstrap-dir:/bootstrap/
|
|
||||||
environment:
|
|
||||||
- LOKINET_NETID=docker
|
|
||||||
networks:
|
|
||||||
testing_net:
|
|
||||||
|
|
||||||
client:
|
|
||||||
depends_on:
|
|
||||||
- bootstrap-router
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
dockerfile: docker/compose/router.Dockerfile
|
|
||||||
image: router
|
|
||||||
devices:
|
|
||||||
- "/dev/net/tun:/dev/net/tun"
|
|
||||||
ports:
|
|
||||||
- target: 1090
|
|
||||||
protocol: udp
|
|
||||||
mode: host
|
|
||||||
- target: 1190
|
|
||||||
protocol: tcp
|
|
||||||
mode: host
|
|
||||||
- target: 53
|
|
||||||
protocol: tcp
|
|
||||||
mode: host
|
|
||||||
cap_add:
|
|
||||||
- NET_ADMIN
|
|
||||||
volumes:
|
|
||||||
- bootstrap-dir:/bootstrap/
|
|
||||||
environment:
|
|
||||||
- LOKINET_NETID=docker
|
|
||||||
networks:
|
|
||||||
testing_net:
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
bootstrap-dir:
|
|
||||||
|
|
||||||
networks:
|
|
||||||
testing_net:
|
|
||||||
driver: bridge
|
|
||||||
internal: true
|
|
||||||
ipam:
|
|
||||||
driver: default
|
|
||||||
config:
|
|
||||||
- subnet: 172.28.0.0/16
|
|
@ -1,6 +0,0 @@
|
|||||||
FROM compose-base:latest
|
|
||||||
|
|
||||||
COPY ./docker/compose/router.ini /root/.lokinet/lokinet.ini
|
|
||||||
|
|
||||||
CMD ["/lokinet"]
|
|
||||||
EXPOSE 1090/udp 1190/tcp
|
|
@ -1,72 +0,0 @@
|
|||||||
[router]
|
|
||||||
# number of crypto worker threads
|
|
||||||
threads=4
|
|
||||||
# path to store signed RC
|
|
||||||
contact-file=/root/.lokinet/self.signed
|
|
||||||
# path to store transport private key
|
|
||||||
transport-privkey=/root/.lokinet/transport.private
|
|
||||||
# path to store identity signing key
|
|
||||||
ident-privkey=/root/.lokinet/identity.private
|
|
||||||
# encryption key for onion routing
|
|
||||||
encryption-privkey=/root/.lokinet/encryption.private
|
|
||||||
block-bogons=false
|
|
||||||
|
|
||||||
# uncomment following line to set router nickname to 'lokinet'
|
|
||||||
#nickname=lokinet
|
|
||||||
|
|
||||||
|
|
||||||
[logging]
|
|
||||||
level=info
|
|
||||||
# uncomment for logging to file
|
|
||||||
#type=file
|
|
||||||
#file=/path/to/logfile
|
|
||||||
# uncomment for syslog logging
|
|
||||||
#type=syslog
|
|
||||||
|
|
||||||
[metrics]
|
|
||||||
json-metrics-path=/root/.lokinet/metrics.json
|
|
||||||
|
|
||||||
# admin api (disabled by default)
|
|
||||||
[api]
|
|
||||||
enabled=true
|
|
||||||
bind=127.0.0.1:1190
|
|
||||||
|
|
||||||
# system settings for privileges and such
|
|
||||||
[system]
|
|
||||||
user=lokinet
|
|
||||||
group=lokinet
|
|
||||||
pidfile=/root/.lokinet/lokinet.pid
|
|
||||||
|
|
||||||
# dns provider configuration section
|
|
||||||
[dns]
|
|
||||||
# resolver
|
|
||||||
upstream=1.1.1.1
|
|
||||||
bind=127.3.2.1:53
|
|
||||||
|
|
||||||
# network database settings block
|
|
||||||
[netdb]
|
|
||||||
# directory for network database skiplist storage
|
|
||||||
dir=/netdb
|
|
||||||
|
|
||||||
# bootstrap settings
|
|
||||||
[bootstrap]
|
|
||||||
# add a bootstrap node's signed identity to the list of nodes we want to bootstrap from
|
|
||||||
# if we don't have any peers we connect to this router
|
|
||||||
add-node=/bootstrap/self.signed
|
|
||||||
|
|
||||||
# lokid settings (disabled by default)
|
|
||||||
[lokid]
|
|
||||||
enabled=false
|
|
||||||
jsonrpc=127.0.0.1:22023
|
|
||||||
|
|
||||||
# network settings
|
|
||||||
[network]
|
|
||||||
profiles=/root/.lokinet/profiles.dat
|
|
||||||
enabled=true
|
|
||||||
exit=false
|
|
||||||
ifaddr=10.200.0.1/8
|
|
||||||
ifname=loki-docker0
|
|
||||||
|
|
||||||
# ROUTERS ONLY: publish network interfaces for handling inbound traffic
|
|
||||||
[bind]
|
|
||||||
eth0=1090
|
|
@ -1,10 +0,0 @@
|
|||||||
FROM debian:stable
|
|
||||||
|
|
||||||
RUN apt update && \
|
|
||||||
apt install -y build-essential cmake git libcap-dev curl ninja-build
|
|
||||||
|
|
||||||
WORKDIR /src/
|
|
||||||
|
|
||||||
COPY . /src/
|
|
||||||
|
|
||||||
RUN make NINJA=ninja JSONRPC=ON && make install NINJA=ninja
|
|
@ -1,11 +0,0 @@
|
|||||||
FROM fedora:latest
|
|
||||||
|
|
||||||
RUN dnf update -y && \
|
|
||||||
dnf upgrade -y && \
|
|
||||||
dnf install -y cmake make git gcc gcc-c++ libcap-devel curl
|
|
||||||
|
|
||||||
WORKDIR /src/
|
|
||||||
|
|
||||||
COPY . /src/
|
|
||||||
|
|
||||||
RUN make -j8 JSONRPC=ON
|
|
@ -1,14 +0,0 @@
|
|||||||
FROM gcc:latest
|
|
||||||
|
|
||||||
RUN apt update && \
|
|
||||||
apt install -y cmake git libcap-dev curl ninja-build libuv1-dev
|
|
||||||
|
|
||||||
WORKDIR /src/
|
|
||||||
|
|
||||||
COPY . /src/
|
|
||||||
|
|
||||||
RUN mkdir build && \
|
|
||||||
cd build && \
|
|
||||||
cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release -DWARNINGS_AS_ERRORS=ON -DDOWNLOAD_SODIUM=ON && \
|
|
||||||
ninja -k0 && \
|
|
||||||
./test/testAll
|
|
@ -1,12 +0,0 @@
|
|||||||
FROM debian:stable
|
|
||||||
|
|
||||||
RUN apt update && \
|
|
||||||
apt install -y build-essential cmake git libcap-dev curl python3-dev python3-setuptools libsodium-dev
|
|
||||||
|
|
||||||
WORKDIR /src/
|
|
||||||
|
|
||||||
COPY . /src/
|
|
||||||
|
|
||||||
RUN make -j 8 SHARED_LIB=ON JSONRPC=ON && make kubernetes-install
|
|
||||||
|
|
||||||
ENTRYPOINT [ "/usr/bin/python3", "-m", "pylokinet"]
|
|
@ -1,20 +0,0 @@
|
|||||||
ARG bootstrap="https://i2p.rocks/i2procks.signed"
|
|
||||||
FROM alpine:edge as builder
|
|
||||||
|
|
||||||
RUN apk update && \
|
|
||||||
apk add build-base cmake git libcap-dev libcap-static libuv-dev libuv-static curl ninja bash binutils-gold curl-dev
|
|
||||||
|
|
||||||
WORKDIR /src/
|
|
||||||
COPY . /src/
|
|
||||||
|
|
||||||
RUN make NINJA=ninja STATIC_LINK=ON BUILD_TYPE=Release DOWNLOAD_SODIUM=ON
|
|
||||||
RUN ./lokinet-bootstrap ${bootstrap}
|
|
||||||
|
|
||||||
FROM alpine:latest
|
|
||||||
|
|
||||||
COPY lokinet-docker.ini /root/.lokinet/lokinet.ini
|
|
||||||
COPY --from=builder /src/build/daemon/lokinet .
|
|
||||||
COPY --from=builder /root/.lokinet/bootstrap.signed /root/.lokinet/
|
|
||||||
|
|
||||||
CMD ["./lokinet"]
|
|
||||||
EXPOSE 1090/udp 1190/tcp
|
|
@ -1,14 +0,0 @@
|
|||||||
FROM ubuntu:xenial
|
|
||||||
|
|
||||||
RUN apt update && \
|
|
||||||
apt-get install -y apt-transport-https ca-certificates gnupg software-properties-common wget && \
|
|
||||||
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc | apt-key add - && \
|
|
||||||
apt-add-repository 'deb https://apt.kitware.com/ubuntu/ xenial main' && \
|
|
||||||
apt-get update && \
|
|
||||||
apt install -y build-essential cmake git libcap-dev curl ninja-build libuv1-dev
|
|
||||||
|
|
||||||
WORKDIR /src/
|
|
||||||
|
|
||||||
COPY . /src/
|
|
||||||
|
|
||||||
RUN make NINJA=ninja JSONRPC=ON STATIC_LINK=ON
|
|
Loading…
Reference in New Issue