Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add autogenerated license information for rootfs.ext2 #80

Merged
merged 2 commits into from
Oct 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@ libcmt*
.github
.git
*.md
fs
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't we track files in this directory?
Can you confirm you intention by doing this?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we are making a bit of a mess here. We have a Dockerfile outside the fs/ directory and others inside it. The external Dockerfile does not depend on anything that exists inside the fs/ directory. So as far as it's concerned, it's fine to have fs in .dockerignore. The fs/Dockerfile depends only on fs/Dockerfile itself. So it doesn't really care. If there was some file, say fs/foo.txt on which fs/Dockerfile depended, and if fs/Dockerfile was built from the outside using the outside as the build context, then this .dockerignore would be a problem. We do build from outside using the outside as build context to pick the TOOLS_DEB, but there is nothing inside fs/ that we care about when building rootfs.ext2. Did I miss something?

20 changes: 18 additions & 2 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,13 @@ name: Build
on: [push]
jobs:
build:
needs: [test]
runs-on: ubuntu-latest-8-cores
steps:
- name: Install libarchive-tools
run: |
export DEBIAN_FRONTEND=noninteractive
sudo apt-get update
sudo apt-get install -y --no-install-recommends build-essential autoconf automake libarchive-dev libarchive-tools
sudo apt-get install -y --no-install-recommends build-essential autoconf automake libarchive-dev libarchive-tools pandoc

# Building from source cause the provided debian package is for Debian Bookworm
- name: Download, build and install xgenext2fs
Expand Down Expand Up @@ -50,6 +49,9 @@ jobs:
- name: Create version file
run: make package.json

- name: Set up QEMU
uses: docker/setup-qemu-action@v3

- name: Buildx setup
uses: docker/setup-buildx-action@v3

Expand All @@ -76,6 +78,19 @@ jobs:
- name: Build rootfs
run: make fs

- name: Auto-generate rootfs license information
if: startsWith(github.ref, 'refs/tags/v')
run: make fs-license

- name: Upload rootfs license information
if: startsWith(github.ref, 'refs/tags/v')
uses: actions/upload-artifact@v4
with:
name: license
if-no-files-found: error
path: |
${{ env.TOOLS_ROOTFS }}.html

- name: Build libcmt
id: docker_build_libcmt
uses: docker/build-push-action@v5
Expand Down Expand Up @@ -118,6 +133,7 @@ jobs:
${{ env.TOOLS_DEB }}
${{ env.TOOLS_DEB }}.sha512
${{ env.TOOLS_ROOTFS }}
${{ env.TOOLS_ROOTFS }}.html
${{ env.TOOLS_ROOTFS }}.sha512
libcmt/deb/*

Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
### Changed
- Bump dependencies versions
- Generate rootfs.ext2.html with licenses of all installed packages

## [0.16.1] - 2024-08-12
### Fixed
Expand Down
23 changes: 18 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,14 @@

MAJOR := 0
MINOR := 16
PATCH := 1
LABEL :=
PATCH := 2
LABEL := -test2
VERSION := $(MAJOR).$(MINOR).$(PATCH)$(LABEL)

TOOLS_DEB := machine-emulator-tools-v$(VERSION).deb
TOOLS_IMAGE := cartesi/machine-emulator-tools:$(VERSION)
TOOLS_ROOTFS := rootfs-tools-v$(VERSION).ext2
TOOLS_ROOTFS_IMAGE := cartesi/rootfs-tools:$(VERSION)

IMAGE_KERNEL_VERSION ?= v0.20.0
LINUX_VERSION ?= 6.5.13-ctsi-1
Expand Down Expand Up @@ -53,15 +54,25 @@ control: Makefile control.in
package.json: Makefile package.json.in
@sed 's|ARG_VERSION|$(VERSION)|g' package.json.in > package.json

$(TOOLS_ROOTFS) fs: $(TOOLS_DEB)
@docker buildx build --platform=linux/riscv64 \
fs: $(TOOLS_ROOTFS)

$(TOOLS_ROOTFS): $(TOOLS_DEB)
@docker buildx build --platform linux/riscv64 \
--build-arg TOOLS_DEB=$(TOOLS_DEB) \
--output type=tar,dest=rootfs.tar \
--file fs/Dockerfile \
. && \
xgenext2fs -fzB 4096 -b 25600 -i 4096 -a rootfs.tar -L rootfs $(TOOLS_ROOTFS) && \
rm -f rootfs.tar

fs-license:
@docker buildx build --load --platform linux/riscv64 \
--build-arg TOOLS_DEB=$(TOOLS_DEB) \
-t $(TOOLS_ROOTFS_IMAGE) \
--file fs/Dockerfile \
.
TMPFILE=$$(mktemp) && (cd fs/third-party/repo-info/; ./scan-local.sh $(TOOLS_ROOTFS_IMAGE) linux/riscv64) | tee $$TMPFILE && pandoc -s -f markdown -t html5 -o $(TOOLS_ROOTFS).html $$TMPFILE && rm -f $$TMPFILE

libcmt:
@mkdir $@

Expand All @@ -84,6 +95,7 @@ env:
@echo TOOLS_DEB=$(TOOLS_DEB)
@echo TOOLS_ROOTFS=$(TOOLS_ROOTFS)
@echo TOOLS_IMAGE=$(TOOLS_IMAGE)
@echo TOOLS_ROOTFS_IMAGE=$(TOOLS_ROOTFS_IMAGE)
@echo IMAGE_KERNEL_VERSION=$(IMAGE_KERNEL_VERSION)
@echo LINUX_VERSION=$(LINUX_VERSION)
@echo LINUX_HEADERS_URLPATH=$(LINUX_HEADERS_URLPATH)
Expand Down Expand Up @@ -142,10 +154,11 @@ help:
@echo 'available commands:'
@echo ' deb - build machine-emulator-tools .deb package'
@echo ' fs - build rootfs.ext2'
@echo ' fs-license - build rootfs.ext2.html with licence information'
@echo ' setup - setup riscv64 buildx'
@echo ' setup-required - check if riscv64 buildx setup is required'
@echo ' help - list makefile commands'
@echo ' env - print useful Makefile variables as a KEY=VALUE list'
@echo ' clean - remove the generated artifacts'

.PHONY: build fs deb build-libcmt env setup setup-required help distclean
.PHONY: build fs fs-license deb build-libcmt env setup setup-required help distclean
1 change: 1 addition & 0 deletions fs/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
third-party
66 changes: 17 additions & 49 deletions fs/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,54 +1,22 @@
FROM --platform=$BUILDPLATFORM ubuntu:22.04 AS cross-builder
ENV BUILD_BASE=/tmp/build-extra

# Install dependencies
RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
apt-get install -y --no-install-recommends \
ca-certificates \
wget \
patch \
libdigest-sha-perl \
libc6-dev-riscv64-cross \
gcc-12-riscv64-linux-gnu \
&& \
adduser developer -u 499 --gecos ",,," --disabled-password && \
mkdir -p ${BUILD_BASE} && chown -R developer:developer ${BUILD_BASE} && \
rm -rf /var/lib/apt/lists/*

USER developer
WORKDIR ${BUILD_BASE}

# Build benchmark binaries
COPY fs/dhrystone.patch ${BUILD_BASE}/
COPY fs/shasumfile ${BUILD_BASE}/
RUN mkdir benchmarks && cd benchmarks && \
wget https://www.netlib.org/benchmark/whetstone.c https://www.netlib.org/benchmark/dhry-c && \
shasum -ca 256 ../shasumfile &&\
bash dhry-c && \
patch -p1 < ../dhrystone.patch && \
riscv64-linux-gnu-gcc-12 -O2 -o whetstone whetstone.c -lm && \
riscv64-linux-gnu-gcc-12 -O2 -o dhrystone dhry_1.c dhry_2.c -lm

# Final image
FROM --platform=linux/riscv64 riscv64/ubuntu:22.04
ARG TOOLS_DEB=machine-emulator-tools-v0.15.0.deb
FROM --platform=linux/riscv64 ubuntu:22.04
ARG TOOLS_DEB=machine-emulator-tools-v0.16.2.deb
ADD ${TOOLS_DEB} /tmp/
RUN apt-get update && \
apt-get install -y --no-install-recommends \
busybox-static=1:1.30.1-7ubuntu3 \
coreutils=8.32-4.1ubuntu1.2 \
bash=5.1-6ubuntu1.1 \
psmisc=23.4-2build3 \
bc=1.07.1-3build1 \
curl=7.81.0-1ubuntu1.18 \
device-tree-compiler=1.6.1-1 \
jq=1.6-2.1ubuntu3 \
lua5.4=5.4.4-1 \
lua-socket=3.0~rc1+git+ac3201d-6 \
xxd=2:8.2.3995-1ubuntu2.18 \
file=1:5.41-3ubuntu0.1 \
/tmp/${TOOLS_DEB} \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
busybox-static=1:1.30.1-7ubuntu3 \
coreutils=8.32-4.1ubuntu1.2 \
bash=5.1-6ubuntu1.1 \
psmisc=23.4-2build3 \
bc=1.07.1-3build1 \
curl=7.81.0-1ubuntu1.18 \
device-tree-compiler=1.6.1-1 \
jq=1.6-2.1ubuntu3 \
lua5.4=5.4.4-1 \
lua-socket=3.0~rc1+git+ac3201d-6 \
xxd=2:8.2.3995-1ubuntu2.19 \
file=1:5.41-3ubuntu0.1 \
stress-ng=0.13.12-2ubuntu1 \
/tmp/${TOOLS_DEB} \
&& \
rm -rf /var/lib/apt/lists/* /tmp/${TOOLS_DEB}
COPY --chown=root:root --from=cross-builder /tmp/build-extra/benchmarks/whetstone /usr/bin/
COPY --chown=root:root --from=cross-builder /tmp/build-extra/benchmarks/dhrystone /usr/bin/
Loading
Loading