From e9548ffed3d6bd0ac26dbcc12fa0a4cdac4bcc38 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 00000000..bdf58af1 --- /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 00000000..85b6001b --- /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 00000000..6fdfc8fb --- /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 502f63c4d4ed7797525bf15121d53784c5202d71 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 85b6001b..3770dfd7 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 6fdfc8fb..00000000 --- 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 3027a93a..4784a742 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 67fb184e..481958c0 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 c8f435100013b4f2103bd8415fdffe1010edae82 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 2a7a88ec..69fa0a15 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 481958c0..dce0aa5a 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 a8dbd5f3b24bbbf0636dfda5c85214240b38d503 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 dce0aa5a..59733863 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 a9df869d..525b7417 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 8821938f619745c37348dd732723844b6361c861 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 384f29df..ea98a069 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 095795c5021c2983e1c64afc414b275d01004083 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 69fa0a15..2a7a88ec 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 59733863..aae3f475 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 2f94d814b392749a74878fd57a512baeaf6fb259 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 aae3f475..627f1b50 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 525b7417..5c5803ee 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 2535116f9157c4565bb9a5c4c4a7c2d9074a8e25 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 bdf58af1..dbbafbd3 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 4c017966aa326c09327f011ab4c17f7ed692227c 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 627f1b50..86c6c369 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 5c5803ee..3b76b1b0 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';