Skip to content

Commit 985da7c

Browse files
committed
[autoinstrumentation] remove dependency on busybox, use native cp
1 parent f26a319 commit 985da7c

21 files changed

+325
-19
lines changed

.chloggen/native_cp.yaml

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
2+
change_type: enhancement
3+
4+
# The name of the component, or a single word describing the area of concern, (e.g. collector, target allocator, auto-instrumentation, opamp, github action)
5+
component: autoinstrumentation
6+
7+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
8+
note: Implement native cp, remove dependency on busybox for all autoinstrumentation images
9+
10+
# One or more tracking issues related to the change
11+
issues: [1600]
12+
13+
# (Optional) One or more lines of additional information to render under the primary note.
14+
# These lines will be padded with 2 spaces and then inserted directly into the document.
15+
# Use pipe (|) for multiline entries.
16+
subtext:

.github/workflows/publish-autoinstrumentation-apache-httpd.yaml

+6
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,19 @@ on:
1212
- 'autoinstrumentation/apache-httpd/**'
1313
- '.github/workflows/publish-autoinstrumentation-apache-httpd.yaml'
1414
workflow_dispatch:
15+
workflow_run:
16+
workflows: [ "Publish cp Auto-Instrumentation" ]
17+
branches: [ main ]
18+
types:
19+
- completed
1520

1621
concurrency:
1722
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
1823
cancel-in-progress: true
1924

2025
jobs:
2126
publish:
27+
if: ${{ github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success' }}
2228
runs-on: ubuntu-22.04
2329

2430
steps:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
name: "Publish cp Auto-Instrumentation"
2+
3+
on:
4+
push:
5+
paths:
6+
- 'autoinstrumentation/cp/**'
7+
- '.github/workflows/publish-autoinstrumentation-cp.yaml'
8+
branches:
9+
- main
10+
pull_request:
11+
paths:
12+
- 'autoinstrumentation/cp/**'
13+
- '.github/workflows/publish-autoinstrumentation-cp.yaml'
14+
workflow_dispatch:
15+
16+
concurrency:
17+
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
18+
cancel-in-progress: true
19+
20+
jobs:
21+
publish:
22+
runs-on: ubuntu-22.04
23+
services:
24+
# Start a local registry for pushing the multiarch manifest and images
25+
registry:
26+
image: registry:2
27+
ports:
28+
- 5000:5000
29+
30+
steps:
31+
- uses: actions/checkout@v4
32+
33+
- name: Read version
34+
run: echo "VERSION=$(cat autoinstrumentation/cp/version.txt)" >> $GITHUB_ENV
35+
36+
- name: Login to GitHub Package Registry
37+
uses: docker/login-action@v3
38+
with:
39+
registry: ghcr.io
40+
username: ${{ github.repository_owner }}
41+
password: ${{ secrets.GITHUB_TOKEN }}
42+
43+
- name: Create docker image
44+
run: |
45+
cd autoinstrumentation/cp
46+
VERSION=${{ env.VERSION }} REPOSITORY=localhost:5000 make docker
47+
48+
- name: Push
49+
run: |
50+
docker tag localhost:5000/cp:${{ env.VERSION }} ghcr.io/open-telemetry/opentelemetry-operator/cp:${{ env.VERSION }}
51+
docker tag localhost:5000/cp:${{ env.VERSION }}-fips ghcr.io/open-telemetry/opentelemetry-operator/cp:${{ env.VERSION }}-fips
52+
docker push ghcr.io/open-telemetry/opentelemetry-operator/cp:${{ env.VERSION }}
53+
docker push ghcr.io/open-telemetry/opentelemetry-operator/cp:${{ env.VERSION }}-fips

.github/workflows/publish-autoinstrumentation-dotnet.yaml

+6
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,19 @@ on:
1212
- 'autoinstrumentation/dotnet/**'
1313
- '.github/workflows/publish-autoinstrumentation-dotnet.yaml'
1414
workflow_dispatch:
15+
workflow_run:
16+
workflows: [ "Publish cp Auto-Instrumentation" ]
17+
branches: [ main ]
18+
types:
19+
- completed
1520

1621
concurrency:
1722
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
1823
cancel-in-progress: true
1924

2025
jobs:
2126
publish:
27+
if: ${{ github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success' }}
2228
runs-on: ubuntu-22.04
2329

2430
steps:

.github/workflows/publish-autoinstrumentation-java.yaml

+6
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ on:
1212
- 'autoinstrumentation/java/**'
1313
- '.github/workflows/publish-autoinstrumentation-java.yaml'
1414
workflow_dispatch:
15+
workflow_run:
16+
workflows: [ "Publish cp Auto-Instrumentation" ]
17+
branches: [ main ]
18+
types:
19+
- completed
1520

1621
concurrency:
1722
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
@@ -20,6 +25,7 @@ concurrency:
2025

2126
jobs:
2227
publish:
28+
if: ${{ github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success' }}
2329
runs-on: ubuntu-22.04
2430

2531
steps:

.github/workflows/publish-autoinstrumentation-nodejs.yaml

+6
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ on:
1212
- 'autoinstrumentation/nodejs/**'
1313
- '.github/workflows/publish-autoinstrumentation-nodejs.yaml'
1414
workflow_dispatch:
15+
workflow_run:
16+
workflows: [ "Publish cp Auto-Instrumentation" ]
17+
branches: [ main ]
18+
types:
19+
- completed
1520

1621
concurrency:
1722
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
@@ -20,6 +25,7 @@ concurrency:
2025

2126
jobs:
2227
publish:
28+
if: ${{ github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success' }}
2329
runs-on: ubuntu-22.04
2430

2531
steps:

.github/workflows/publish-autoinstrumentation-python.yaml

+6
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ on:
1212
- 'autoinstrumentation/python/**'
1313
- '.github/workflows/publish-autoinstrumentation-python.yaml'
1414
workflow_dispatch:
15+
workflow_run:
16+
workflows: [ "Publish cp Auto-Instrumentation" ]
17+
branches: [ main ]
18+
types:
19+
- completed
1520

1621
concurrency:
1722
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
@@ -20,6 +25,7 @@ concurrency:
2025

2126
jobs:
2227
publish:
28+
if: ${{ github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success' }}
2329
runs-on: ubuntu-22.04
2430

2531
steps:

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,4 @@ config/rbac/certmanager-permissions/
4444
build
4545
node_modules
4646
package-lock.json
47+
autoinstrumentation/cp/bin/
+7-12
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
2-
############################
3-
# STEP 1 download the webserver agent
4-
############################
51
FROM alpine:latest as agent
62

73
ARG version
@@ -13,14 +9,13 @@ RUN mkdir agent
139
RUN wget -c https://github.com/open-telemetry/opentelemetry-cpp-contrib/releases/download/webserver%2Fv$version/opentelemetry-webserver-sdk-x64-linux.tgz
1410
RUN unzip -p opentelemetry-webserver-sdk-x64-linux.tgz | tar -zx -C agent
1511

16-
############################
17-
# STEP 2 download the webserver agent
18-
############################
19-
FROM alpine:latest
20-
21-
COPY --from=agent /opt/opentelemetry/agent/opentelemetry-webserver-sdk /opt/opentelemetry
22-
2312
RUN chmod 775 -R /opt/opentelemetry/
2413
RUN chmod a+w /opt/opentelemetry/logs
2514

26-
CMD ["cat", "Just delivering the Opentelemetry Apache/Nginx agent"]
15+
FROM ghcr.io/open-telemetry/opentelemetry-operator/cp:1.0.0 AS cp
16+
17+
FROM scratch
18+
19+
COPY --from=cp /cp /usr/bin/cp
20+
21+
COPY --from=agent /opt/opentelemetry/agent/opentelemetry-webserver-sdk /opt/opentelemetry

autoinstrumentation/cp/Dockerfile

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
FROM scratch
2+
3+
ARG cp
4+
5+
ADD $cp /cp
6+
7+
ENTRYPOINT ["/cp"]
+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
FROM scratch
2+
3+
LABEL fips=true
4+
5+
ARG cp
6+
7+
ADD $cp /cp
8+
9+
ENTRYPOINT ["/cp"]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
FROM scratch
2+
3+
ARG cp
4+
5+
ADD $cp /cp.exe
6+
7+
ENTRYPOINT ["/cp.exe"]

autoinstrumentation/cp/Makefile

+97
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
VERSION?=latest
2+
REPOSITORY?=ghcr.io/open-telemetry/opentelemetry-operator
3+
GO_BUILD_LDFLAGS ?= '-w -s -extldflags "-static"'
4+
5+
.PHONY := build
6+
build:
7+
mkdir -p bin
8+
CGO_ENABLED=0 go build -trimpath -o ./bin/cp_$(GOOS)_$(GOARCH)$(EXTRA)$(EXTENSION) -ldflags $(GO_BUILD_LDFLAGS)
9+
10+
bin/cp_linux_amd64: main.go go.mod
11+
GOOS=linux GOARCH=amd64 EXTENSION="" EXTRA="" make build
12+
13+
bin/cp_linux_arm64: main.go go.mod
14+
GOOS=linux GOARCH=arm64 EXTENSION="" EXTRA="" make build
15+
16+
bin/cp_linux_ppc64le: main.go go.mod
17+
GOOS=linux GOARCH=ppc64le EXTENSION="" EXTRA="" make build
18+
19+
bin/cp_linux_s390x: main.go go.mod
20+
GOOS=linux GOARCH=s390x EXTENSION="" EXTRA="" make build
21+
22+
bin/cp_windows_arm64.exe: main.go go.mod
23+
GOOS=windows GOARCH=arm64 EXTENSION=".exe" EXTRA="" make build
24+
25+
bin/cp_windows_amd64.exe: main.go go.mod
26+
GOOS=windows GOARCH=amd64 EXTENSION=".exe" EXTRA="" make build
27+
28+
bin/cp_linux_amd64_fips: main.go go.mod
29+
GOEXPERIMENT=boringcrypto GOOS=linux GOARCH=amd64 EXTENSION="" EXTRA="_fips" make build
30+
31+
bin/cp_linux_arm64_fips: main.go go.mod
32+
GOEXPERIMENT=boringcrypto GOOS=linux GOARCH=arm64 EXTENSION="" EXTRA="_fips" make build
33+
34+
bin/cp_windows_arm64_fips.exe: main.go go.mod
35+
GOEXPERIMENT=boringcrypto GOOS=windows GOARCH=arm64 EXTENSION=".exe" EXTRA="_fips" make build
36+
37+
bin/cp_windows_amd64_fips.exe: main.go go.mod
38+
GOEXPERIMENT=boringcrypto GOOS=windows GOARCH=amd64 EXTENSION=".exe" EXTRA="_fips" make build
39+
40+
## Docker build
41+
42+
.PHONY := docker_linux_amd64
43+
docker_linux_amd64: bin/cp_linux_amd64
44+
docker buildx build --platform="linux/amd64" --push -t $(REPOSITORY)/cp_linux_amd64:$(VERSION) --build-arg cp=bin/cp_linux_amd64 .
45+
46+
.PHONY := docker_linux_arm64
47+
docker_linux_arm64: bin/cp_linux_arm64
48+
docker buildx build --platform="linux/arm64" --push -t $(REPOSITORY)/cp_linux_arm64:$(VERSION) --build-arg cp=bin/cp_linux_arm64 .
49+
50+
.PHONY := docker_linux_ppc64le
51+
docker_linux_ppc64le: bin/cp_linux_ppc64le
52+
docker buildx build --platform="linux/ppc64le" --push -t $(REPOSITORY)/cp_linux_ppc64le:$(VERSION) --build-arg cp=bin/cp_linux_ppc64le .
53+
54+
.PHONY := docker_linux_s390x
55+
docker_linux_s390x: bin/cp_linux_s390x
56+
docker buildx build --platform="linux/s390x" --push -t $(REPOSITORY)/cp_linux_s390x:$(VERSION) --build-arg cp=bin/cp_linux_s390x .
57+
58+
.PHONY := docker_windows_arm64
59+
docker_windows_arm64: bin/cp_windows_arm64.exe
60+
docker buildx build --platform="windows/arm64" --push -f Dockerfile.windows -t $(REPOSITORY)/cp_windows_arm64:$(VERSION) --build-arg cp=bin/cp_windows_arm64.exe .
61+
62+
.PHONY := docker_windows_amd64
63+
docker_windows_amd64: bin/cp_windows_amd64.exe
64+
docker buildx build --platform="windows/amd64" --push -f Dockerfile.windows -t $(REPOSITORY)/cp_windows_amd64:$(VERSION) --build-arg cp=bin/cp_windows_amd64.exe .
65+
66+
.PHONY := docker_linux_amd64_fips
67+
docker_linux_amd64_fips: bin/cp_linux_amd64_fips
68+
docker buildx build --platform="linux/amd64" --push -t $(REPOSITORY)/cp_linux_amd64_fips:$(VERSION) --build-arg cp=bin/cp_linux_amd64_fips .
69+
70+
.PHONY := docker_linux_arm64_fips
71+
docker_linux_arm64_fips: bin/cp_linux_arm64_fips
72+
docker buildx build --platform="linux/arm64" --push -t $(REPOSITORY)/cp_linux_arm64_fips:$(VERSION) --build-arg cp=bin/cp_linux_arm64_fips .
73+
74+
.PHONY := docker_windows_amd64_fips
75+
docker_windows_amd64_fips: bin/cp_windows_amd64_fips.exe
76+
docker buildx build --platform="windows/amd64" --push -f Dockerfile.windows -t $(REPOSITORY)/cp_windows_amd64_fips:$(VERSION) --build-arg cp=bin/cp_windows_amd64_fips.exe .
77+
78+
.PHONY := docker_windows_arm64_fips
79+
docker_windows_arm64_fips: bin/cp_windows_arm64_fips.exe
80+
docker buildx build --platform="windows/arm64" --push -f Dockerfile.windows -t $(REPOSITORY)/cp_windows_arm64_fips:$(VERSION) --build-arg cp=bin/cp_windows_arm64_fips.exe .
81+
82+
.PHONY := docker
83+
docker: docker_linux_amd64 docker_linux_arm64 docker_linux_ppc64le docker_linux_s390x docker_windows_amd64 docker_windows_arm64 docker_linux_amd64_fips docker_linux_arm64_fips docker_windows_amd64_fips docker_windows_arm64_fips
84+
docker buildx imagetools create -t $(REPOSITORY)/cp:$(VERSION) \
85+
$(REPOSITORY)/cp_linux_amd64:$(VERSION) \
86+
$(REPOSITORY)/cp_linux_arm64:$(VERSION) \
87+
$(REPOSITORY)/cp_linux_ppc64le:$(VERSION) \
88+
$(REPOSITORY)/cp_linux_s390x:$(VERSION) \
89+
$(REPOSITORY)/cp_windows_amd64:$(VERSION) \
90+
$(REPOSITORY)/cp_windows_arm64:$(VERSION)
91+
92+
docker buildx imagetools create \
93+
-t $(REPOSITORY)/cp:$(VERSION)-fips \
94+
$(REPOSITORY)/cp_linux_amd64_fips:$(VERSION) \
95+
$(REPOSITORY)/cp_linux_arm64_fips:$(VERSION) \
96+
$(REPOSITORY)/cp_windows_amd64_fips:$(VERSION) \
97+
$(REPOSITORY)/cp_windows_arm64_fips:$(VERSION)

autoinstrumentation/cp/README.md

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# cp
2+
3+
This project allows you to take a file and copy to a new location on disk with the 0400 permission mask (read-only).
4+
5+
# Install
6+
7+
## As binary
8+
9+
```bash
10+
go install github.com/otel-warez/cp@latest
11+
```
12+
13+
## As a docker image
14+
15+
```
16+
docker pull ghcr.io/otel-warez/cp:latest
17+
```
18+
19+
This image is built from scratch and will not be useful on its own, but you can use it as a layer. Here is an example:
20+
21+
```
22+
FROM ghcr.io/otel-warez/cp:latest AS cp
23+
24+
FROM scratch AS final
25+
COPY --from=cp /cp /usr/bin/cp
26+
...
27+
```

autoinstrumentation/cp/go.mod

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module github.com/otel-warez/cp
2+
3+
go 1.23.0

0 commit comments

Comments
 (0)