From 6ad39f18534c55bde6ef78d15192322632c88fc0 Mon Sep 17 00:00:00 2001 From: Igor Velkov Date: Fri, 25 Oct 2019 02:59:08 +0000 Subject: [PATCH 1/9] add cross-building for arm --- docker/dev/Dockerfile.aarch64 | 78 +++++++++++++++++++++++++++++++++++ docker/dev/Dockerfile.armv7hf | 77 ++++++++++++++++++++++++++++++++++ docker/dev/d | 62 ++++++++++++++++++++++++++++ 3 files changed, 217 insertions(+) create mode 100644 docker/dev/Dockerfile.aarch64 create mode 100644 docker/dev/Dockerfile.armv7hf create mode 100755 docker/dev/d diff --git a/docker/dev/Dockerfile.aarch64 b/docker/dev/Dockerfile.aarch64 new file mode 100644 index 000000000..bdf58af10 --- /dev/null +++ b/docker/dev/Dockerfile.aarch64 @@ -0,0 +1,78 @@ +FROM node:10-jessie as node + +WORKDIR /app/ui + +# Cache deps +COPY ui/package.json ui/yarn.lock ./ +RUN yarn install --pure-lockfile + +# Build +COPY ui /app/ui +RUN yarn build + + +# contains qemu-*-static for cross-compilation +FROM multiarch/qemu-user-static as qemu + + +FROM arm64v8/rust:1.37-buster as rust + +COPY --from=qemu /usr/bin/qemu-aarch64-static /usr/bin +#COPY --from=qemu /usr/bin/qemu-arm-static /usr/bin + + +# Install musl +#RUN apt-get update && apt-get install -y mc +#RUN apt-get install -y musl-tools mc +#libpq-dev mc +#RUN rustup target add ${TARGET} + +# Cache deps +WORKDIR /app +RUN USER=root cargo new server +WORKDIR /app/server +COPY server/Cargo.toml server/Cargo.lock ./ +RUN mkdir -p ./src/bin \ + && echo 'fn main() { println!("Dummy") }' > ./src/bin/main.rs +#RUN cargo build --release +RUN cargo build +COPY server/src ./src/ +COPY server/migrations ./migrations/ +RUN rm -f ./target/release/deps/lemmy_server* ; rm -f ./target/debug/deps/lemmy_server* + + +# build for release +#RUN cargo build --frozen --release +RUN cargo build --frozen + +# Get diesel-cli on there just in case +# RUN cargo install diesel_cli --no-default-features --features postgres + +RUN cp /app/server/target/debug/lemmy_server /app/server/ready +#RUN cp /app/server/target/release/lemmy_server /app/server/ready + +#FROM alpine:3.10 +# debian because build with dynamic linking with debian:buster +FROM arm64v8/debian:buster-slim as lemmy + +#COPY --from=qemu /usr/bin/qemu-arm-static /usr/bin +COPY --from=qemu /usr/bin/qemu-aarch64-static /usr/bin + +# Install libpq for postgres +#RUN apk add libpq +RUN apt-get update && apt-get install -y libpq5 + +RUN addgroup --gid 1000 lemmy +# for alpine +#RUN adduser -D -s /bin/sh -u 1000 -G lemmy lemmy +# for debian +RUN adduser --disabled-password --shell /bin/sh --uid 1000 --ingroup lemmy lemmy + +# Copy resources +COPY --from=rust /app/server/ready /app/lemmy +COPY --from=node /app/ui/dist /app/dist + +RUN chown lemmy:lemmy /app/lemmy +USER lemmy +EXPOSE 8536 +CMD ["/app/lemmy"] diff --git a/docker/dev/Dockerfile.armv7hf b/docker/dev/Dockerfile.armv7hf new file mode 100644 index 000000000..85b6001bb --- /dev/null +++ b/docker/dev/Dockerfile.armv7hf @@ -0,0 +1,77 @@ +FROM node:10-jessie as node + +WORKDIR /app/ui + +# Cache deps +COPY ui/package.json ui/yarn.lock ./ +RUN yarn install --pure-lockfile + +# Build +COPY ui /app/ui +RUN yarn build + + +# contains qemu-*-static for cross-compilation +FROM multiarch/qemu-user-static as qemu + + +FROM arm32v7/rust:1.37-buster as rust + +#COPY --from=qemu /usr/bin/qemu-aarch64-static /usr/bin +COPY --from=qemu /usr/bin/qemu-arm-static /usr/bin + + +# Install musl +#RUN apt-get update && apt-get install -y mc +#RUN apt-get install -y musl-tools mc +#libpq-dev mc +#RUN rustup target add ${TARGET} + +# Cache deps +WORKDIR /app +RUN USER=root cargo new server +WORKDIR /app/server +COPY server/Cargo.toml server/Cargo.lock ./ +RUN mkdir -p ./src/bin \ + && echo 'fn main() { println!("Dummy") }' > ./src/bin/main.rs +#RUN cargo build --release +RUN cargo build +COPY server/src ./src/ +COPY server/migrations ./migrations/ +RUN rm -f ./target/release/deps/lemmy_server* ; rm -f ./target/debug/deps/lemmy_server* + + +# build for release +#RUN cargo build --frozen --release +RUN cargo build --frozen + +# Get diesel-cli on there just in case +# RUN cargo install diesel_cli --no-default-features --features postgres + +RUN cp /app/server/target/debug/lemmy_server /app/server/ready +#RUN cp /app/server/target/release/lemmy_server /app/server/ready + +#FROM alpine:3.10 +# debian because build with dynamic linking with debian:buster +FROM arm32v7/debian:buster-slim as lemmy + +COPY --from=qemu /usr/bin/qemu-arm-static /usr/bin + +# Install libpq for postgres +#RUN apk add libpq +RUN apt-get update && apt-get install -y libpq5 + +RUN addgroup --gid 1000 lemmy +# for alpine +#RUN adduser -D -s /bin/sh -u 1000 -G lemmy lemmy +# for debian +RUN adduser --disabled-password --shell /bin/sh --uid 1000 --ingroup lemmy lemmy + +# Copy resources +COPY --from=rust /app/server/ready /app/lemmy +COPY --from=node /app/ui/dist /app/dist + +RUN chown lemmy:lemmy /app/lemmy +USER lemmy +EXPOSE 8536 +CMD ["/app/lemmy"] diff --git a/docker/dev/d b/docker/dev/d new file mode 100755 index 000000000..6fdfc8fb0 --- /dev/null +++ b/docker/dev/d @@ -0,0 +1,62 @@ +#!/bin/bash -x + +#git checkout master + +# Creating the new tag +new_tag="$1" +#git tag $new_tag + +# Setting the version on the front end +pushd ../../ui/ +node set_version.js +#git add src/version.ts +popd + +# Changing the docker-compose prod +sed -i "s/dessalines\/lemmy:.*/dessalines\/lemmy:$new_tag/" ../prod/docker-compose.yml +#git add ../prod/docker-compose.yml + +# The commit +#git commit -m"Upping version." + +#git push origin $new_tag +#git push + +# Rebuilding docker +docker-compose build +docker tag dev_lemmy:latest shtripok/lemmy:x64-$new_tag +docker push shtripok/lemmy:x64-$new_tag + +# Build for Raspberry Pi armv7hf +docker build -t lemmy:armv7hf -f Dockerfile.armv7hf ../../ +docker tag lemmy:armv7hf shtripok/lemmy:armv7hf-$new_tag +docker push shtripok/lemmy:armv7hf-$new_tag + + +docker build -t lemmy:aarch64 -f Dockerfile.aarch64 ../../ +docker tag lemmy:aarch64 shtripok/lemmy:arm64-$new_tag +docker push shtripok/lemmy:arm-$new_tag + +docker manifest create shtripok/lemmy:latest \ + shtripok/lemmy:armv7hf-$new_tag \ + shtripok/lemmy:x64-$new_tag \ + shtripok/lemmy:arm64-$new_tag + + +#docker manifest create shtripok/pictshare:latest \ +#shtripok/pictshare:armv7 \ +#shtripok/pictshare:x64 \ +#shtripok/pictshare:arm64 + +docker manifest push shtripok/pictshare:latest + +# Rebuilding the docker nocross +# pushd ../nocross +# docker-compose build +# docker tag nocross_lemmy:latest dessalines/lemmy:nocross-$new_tag +# docker push dessalines/lemmy:$new_tag +# popd + +# Pushing to any ansible deploys +#cd ../../ansible +#ansible-playbook lemmy.yml --become From e4666cd95cb912f332462910860a36bc99308b04 Mon Sep 17 00:00:00 2001 From: Dessalines Date: Thu, 31 Oct 2019 20:03:43 -0700 Subject: [PATCH 2/9] Fixing rest of deploy. --- docker/dev/Dockerfile.armv7hf | 3 +- docker/dev/d | 62 ---------------------------------- docker/dev/deploy.sh | 26 ++++++++++++-- docker/prod/docker-compose.yml | 2 +- 4 files changed, 27 insertions(+), 66 deletions(-) delete mode 100755 docker/dev/d diff --git a/docker/dev/Dockerfile.armv7hf b/docker/dev/Dockerfile.armv7hf index 85b6001bb..3770dfd71 100644 --- a/docker/dev/Dockerfile.armv7hf +++ b/docker/dev/Dockerfile.armv7hf @@ -35,7 +35,8 @@ COPY server/Cargo.toml server/Cargo.lock ./ RUN mkdir -p ./src/bin \ && echo 'fn main() { println!("Dummy") }' > ./src/bin/main.rs #RUN cargo build --release -RUN cargo build +# RUN cargo build + RUN RUSTFLAGS='-Ccodegen-units=1' cargo build COPY server/src ./src/ COPY server/migrations ./migrations/ RUN rm -f ./target/release/deps/lemmy_server* ; rm -f ./target/debug/deps/lemmy_server* diff --git a/docker/dev/d b/docker/dev/d deleted file mode 100755 index 6fdfc8fb0..000000000 --- a/docker/dev/d +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/bash -x - -#git checkout master - -# Creating the new tag -new_tag="$1" -#git tag $new_tag - -# Setting the version on the front end -pushd ../../ui/ -node set_version.js -#git add src/version.ts -popd - -# Changing the docker-compose prod -sed -i "s/dessalines\/lemmy:.*/dessalines\/lemmy:$new_tag/" ../prod/docker-compose.yml -#git add ../prod/docker-compose.yml - -# The commit -#git commit -m"Upping version." - -#git push origin $new_tag -#git push - -# Rebuilding docker -docker-compose build -docker tag dev_lemmy:latest shtripok/lemmy:x64-$new_tag -docker push shtripok/lemmy:x64-$new_tag - -# Build for Raspberry Pi armv7hf -docker build -t lemmy:armv7hf -f Dockerfile.armv7hf ../../ -docker tag lemmy:armv7hf shtripok/lemmy:armv7hf-$new_tag -docker push shtripok/lemmy:armv7hf-$new_tag - - -docker build -t lemmy:aarch64 -f Dockerfile.aarch64 ../../ -docker tag lemmy:aarch64 shtripok/lemmy:arm64-$new_tag -docker push shtripok/lemmy:arm-$new_tag - -docker manifest create shtripok/lemmy:latest \ - shtripok/lemmy:armv7hf-$new_tag \ - shtripok/lemmy:x64-$new_tag \ - shtripok/lemmy:arm64-$new_tag - - -#docker manifest create shtripok/pictshare:latest \ -#shtripok/pictshare:armv7 \ -#shtripok/pictshare:x64 \ -#shtripok/pictshare:arm64 - -docker manifest push shtripok/pictshare:latest - -# Rebuilding the docker nocross -# pushd ../nocross -# docker-compose build -# docker tag nocross_lemmy:latest dessalines/lemmy:nocross-$new_tag -# docker push dessalines/lemmy:$new_tag -# popd - -# Pushing to any ansible deploys -#cd ../../ansible -#ansible-playbook lemmy.yml --become diff --git a/docker/dev/deploy.sh b/docker/dev/deploy.sh index 3027a93af..4784a7427 100755 --- a/docker/dev/deploy.sh +++ b/docker/dev/deploy.sh @@ -21,10 +21,32 @@ git commit -m"Version $new_tag" git push origin $new_tag git push +# Registering qemu binaries +docker run --rm --privileged multiarch/qemu-user-static:register --reset + # Rebuilding docker docker-compose build -docker tag dev_lemmy:latest dessalines/lemmy:$new_tag -docker push dessalines/lemmy:$new_tag +docker tag dev_lemmy:latest dessalines/lemmy:x64-$new_tag +docker push dessalines/lemmy:x64-$new_tag + +# Build for Raspberry Pi / other archs + +# Arm currently not working +# docker build -t lemmy:armv7hf -f Dockerfile.armv7hf ../../ +# docker tag lemmy:armv7hf dessalines/lemmy:armv7hf-$new_tag +# docker push dessalines/lemmy:armv7hf-$new_tag + +# aarch64 +docker build -t lemmy:aarch64 -f Dockerfile.aarch64 ../../ +docker tag lemmy:aarch64 dessalines/lemmy:arm64-$new_tag +docker push dessalines/lemmy:arm64-$new_tag + +# Creating the manifest for the multi-arch build +docker manifest create dessalines/lemmy:$new_tag \ + dessalines/lemmy:x64-$new_tag \ + dessalines/lemmy:arm64-$new_tag + +docker manifest push dessalines/lemmy:$new_tag # Pushing to any ansible deploys cd ../../ansible diff --git a/docker/prod/docker-compose.yml b/docker/prod/docker-compose.yml index 67fb184e6..481958c08 100644 --- a/docker/prod/docker-compose.yml +++ b/docker/prod/docker-compose.yml @@ -10,7 +10,7 @@ services: volumes: - lemmy_db:/var/lib/postgresql/data lemmy: - image: dessalines/lemmy:v0.3.0.8 + image: dessalines/lemmy:v0.3.0.9 ports: - "127.0.0.1:8536:8536" environment: From 845f17f7afd1dbd9947cfca72068566c914ef9ec Mon Sep 17 00:00:00 2001 From: Dessalines Date: Thu, 31 Oct 2019 20:07:26 -0700 Subject: [PATCH 3/9] Changing pictshare to use multi-arch from @iav - Fixes #324 --- docker/dev/docker-compose.yml | 2 +- docker/prod/docker-compose.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/dev/docker-compose.yml b/docker/dev/docker-compose.yml index 2a7a88ecd..69fa0a15a 100644 --- a/docker/dev/docker-compose.yml +++ b/docker/dev/docker-compose.yml @@ -30,7 +30,7 @@ services: depends_on: - lemmy_db lemmy_pictshare: - image: hascheksolutions/pictshare:latest + image: shtripok/pictshare:latest ports: - "127.0.0.1:8537:80" volumes: diff --git a/docker/prod/docker-compose.yml b/docker/prod/docker-compose.yml index 481958c08..dce0aa5a5 100644 --- a/docker/prod/docker-compose.yml +++ b/docker/prod/docker-compose.yml @@ -28,7 +28,7 @@ services: depends_on: - lemmy_db lemmy_pictshare: - image: hascheksolutions/pictshare:latest + image: shtripok/pictshare:latest ports: - "127.0.0.1:8537:80" volumes: From 449544b3db09c87ca19aaff726a6097d2427d437 Mon Sep 17 00:00:00 2001 From: Dessalines Date: Thu, 31 Oct 2019 20:09:33 -0700 Subject: [PATCH 4/9] Version v0.3.0.10 --- docker/prod/docker-compose.yml | 2 +- ui/src/version.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/prod/docker-compose.yml b/docker/prod/docker-compose.yml index dce0aa5a5..597338631 100644 --- a/docker/prod/docker-compose.yml +++ b/docker/prod/docker-compose.yml @@ -10,7 +10,7 @@ services: volumes: - lemmy_db:/var/lib/postgresql/data lemmy: - image: dessalines/lemmy:v0.3.0.9 + image: dessalines/lemmy:v0.3.0.10 ports: - "127.0.0.1:8536:8536" environment: diff --git a/ui/src/version.ts b/ui/src/version.ts index a9df869db..525b7417f 100644 --- a/ui/src/version.ts +++ b/ui/src/version.ts @@ -1 +1 @@ -export let version: string = 'v0.3.0.8-0-gbffd657'; +export let version: string = 'v0.3.0.10-0-gc8f4351'; From 6dca5b6f1e075813aaf6f8df2a355efb5a55c407 Mon Sep 17 00:00:00 2001 From: Dessalines Date: Thu, 31 Oct 2019 20:33:29 -0700 Subject: [PATCH 5/9] Adding raspberry pi line to readme. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 384f29df8..ea98a0699 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,7 @@ Front Page|Post - High performance. - Server is written in rust. - Front end is `~80kB` gzipped. + - Supports arm64 / Raspberry Pi. ## About From a47b9c3ab8800fa2919fc8633ff35cc48d5818fe Mon Sep 17 00:00:00 2001 From: Dessalines Date: Thu, 31 Oct 2019 21:06:13 -0700 Subject: [PATCH 6/9] Changing back pictshare. --- docker/dev/docker-compose.yml | 2 +- docker/prod/docker-compose.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/dev/docker-compose.yml b/docker/dev/docker-compose.yml index 69fa0a15a..2a7a88ecd 100644 --- a/docker/dev/docker-compose.yml +++ b/docker/dev/docker-compose.yml @@ -30,7 +30,7 @@ services: depends_on: - lemmy_db lemmy_pictshare: - image: shtripok/pictshare:latest + image: hascheksolutions/pictshare:latest ports: - "127.0.0.1:8537:80" volumes: diff --git a/docker/prod/docker-compose.yml b/docker/prod/docker-compose.yml index 597338631..aae3f4752 100644 --- a/docker/prod/docker-compose.yml +++ b/docker/prod/docker-compose.yml @@ -28,7 +28,7 @@ services: depends_on: - lemmy_db lemmy_pictshare: - image: shtripok/pictshare:latest + image: hascheksolutions/pictshare:latest ports: - "127.0.0.1:8537:80" volumes: From 2c2a24d77eea3c30093437e992146ecb246bd774 Mon Sep 17 00:00:00 2001 From: Dessalines Date: Thu, 31 Oct 2019 21:06:26 -0700 Subject: [PATCH 7/9] Version v0.3.0.11 --- docker/prod/docker-compose.yml | 2 +- ui/src/version.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/prod/docker-compose.yml b/docker/prod/docker-compose.yml index aae3f4752..627f1b505 100644 --- a/docker/prod/docker-compose.yml +++ b/docker/prod/docker-compose.yml @@ -10,7 +10,7 @@ services: volumes: - lemmy_db:/var/lib/postgresql/data lemmy: - image: dessalines/lemmy:v0.3.0.10 + image: dessalines/lemmy:v0.3.0.11 ports: - "127.0.0.1:8536:8536" environment: diff --git a/ui/src/version.ts b/ui/src/version.ts index 525b7417f..5c5803eed 100644 --- a/ui/src/version.ts +++ b/ui/src/version.ts @@ -1 +1 @@ -export let version: string = 'v0.3.0.10-0-gc8f4351'; +export let version: string = 'v0.3.0.11-0-g095795c'; From 9e21902a5f8ada9cf4baccb300e3ad3daf2f829f Mon Sep 17 00:00:00 2001 From: Dessalines Date: Fri, 1 Nov 2019 11:19:59 -0700 Subject: [PATCH 8/9] Changing aarch64 to use cargo --release --- docker/dev/Dockerfile.aarch64 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docker/dev/Dockerfile.aarch64 b/docker/dev/Dockerfile.aarch64 index bdf58af10..dbbafbd38 100644 --- a/docker/dev/Dockerfile.aarch64 +++ b/docker/dev/Dockerfile.aarch64 @@ -34,22 +34,22 @@ WORKDIR /app/server COPY server/Cargo.toml server/Cargo.lock ./ RUN mkdir -p ./src/bin \ && echo 'fn main() { println!("Dummy") }' > ./src/bin/main.rs -#RUN cargo build --release -RUN cargo build +RUN cargo build --release +# RUN cargo build COPY server/src ./src/ COPY server/migrations ./migrations/ RUN rm -f ./target/release/deps/lemmy_server* ; rm -f ./target/debug/deps/lemmy_server* # build for release -#RUN cargo build --frozen --release -RUN cargo build --frozen +RUN cargo build --frozen --release +# RUN cargo build --frozen # Get diesel-cli on there just in case # RUN cargo install diesel_cli --no-default-features --features postgres -RUN cp /app/server/target/debug/lemmy_server /app/server/ready -#RUN cp /app/server/target/release/lemmy_server /app/server/ready +# RUN cp /app/server/target/debug/lemmy_server /app/server/ready +RUN cp /app/server/target/release/lemmy_server /app/server/ready #FROM alpine:3.10 # debian because build with dynamic linking with debian:buster From 0e197cfdfc525980538c4483f724d31a1a2e56af Mon Sep 17 00:00:00 2001 From: Dessalines Date: Fri, 1 Nov 2019 11:20:12 -0700 Subject: [PATCH 9/9] Version v0.3.0.12 --- docker/prod/docker-compose.yml | 2 +- ui/src/version.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/prod/docker-compose.yml b/docker/prod/docker-compose.yml index 627f1b505..86c6c3695 100644 --- a/docker/prod/docker-compose.yml +++ b/docker/prod/docker-compose.yml @@ -10,7 +10,7 @@ services: volumes: - lemmy_db:/var/lib/postgresql/data lemmy: - image: dessalines/lemmy:v0.3.0.11 + image: dessalines/lemmy:v0.3.0.12 ports: - "127.0.0.1:8536:8536" environment: diff --git a/ui/src/version.ts b/ui/src/version.ts index 5c5803eed..3b76b1b0b 100644 --- a/ui/src/version.ts +++ b/ui/src/version.ts @@ -1 +1 @@ -export let version: string = 'v0.3.0.11-0-g095795c'; +export let version: string = 'v0.3.0.12-0-g2535116';