Skip to content

Commit 826d21d

Browse files
committed
Update patchelf workaround
1 parent 56afc9c commit 826d21d

File tree

1 file changed

+25
-14
lines changed

1 file changed

+25
-14
lines changed

Dockerfile.snap

+25-14
Original file line numberDiff line numberDiff line change
@@ -43,20 +43,31 @@ RUN chmod +x /snap/bin/snapcraft
4343
# Workaround for old buggy version of patchelf
4444
ADD https://github.com/NixOS/patchelf/releases/download/0.18.0/patchelf-0.18.0-x86_64.tar.gz /opt/patchelf/patchelf.tar.gz
4545
RUN cd /opt/patchelf && tar -xvf patchelf.tar.gz
46-
ENV ELF_PY=/snap/snapcraft/current/lib/python3.10/site-packages/snapcraft_legacy/internal/elf.py
47-
RUN echo 'def new_patch(self, *, elf_file):' >> ${ELF_PY} && \
48-
echo ' if elf_file.dependencies:' >> ${ELF_PY} && \
49-
echo ' rpath = self._get_rpath(elf_file)' >> ${ELF_PY} && \
50-
echo ' self._run_patchelf(' >> ${ELF_PY} && \
51-
echo ' patchelf_args=["--force-rpath", "--set-rpath", rpath],' >> ${ELF_PY} && \
52-
echo ' elf_file_path=elf_file.path' >> ${ELF_PY} && \
53-
echo ' )' >> ${ELF_PY} && \
54-
echo ' if elf_file.interp:' >> ${ELF_PY} && \
55-
echo ' self._run_patchelf(' >> ${ELF_PY} && \
56-
echo ' patchelf_args=["--set-interpreter", self._dynamic_linker],' >> ${ELF_PY} && \
57-
echo ' elf_file_path=elf_file.path' >> ${ELF_PY} && \
58-
echo ' )' >> ${ELF_PY} && \
59-
echo 'Patcher.patch = new_patch' >> ${ELF_PY}
46+
RUN ln -s /snap/snapcraft/current/lib/python3.*/site-packages/snapcraft/elf/_patcher.py /opt/patchelf/_patcher.py
47+
RUN echo 'Patcher._old_run_patchelf = Patcher._run_patchelf' >> /opt/patchelf/_patcher.py && \
48+
echo 'def new_run_patchelf(self, patchelf_args, elf_file_path):' >> /opt/patchelf/_patcher.py && \
49+
echo ' done = False' >> /opt/patchelf/_patcher.py && \
50+
echo ' try:' >> /opt/patchelf/_patcher.py && \
51+
echo ' i = patchelf_args.index("--set-rpath")' >> /opt/patchelf/_patcher.py && \
52+
echo ' self._old_run_patchelf(' >> /opt/patchelf/_patcher.py && \
53+
echo ' patchelf_args=["--force-rpath", "--set-rpath", patchelf_args[i + 1]],' >> /opt/patchelf/_patcher.py && \
54+
echo ' elf_file_path=elf_file_path' >> /opt/patchelf/_patcher.py && \
55+
echo ' )' >> /opt/patchelf/_patcher.py && \
56+
echo ' done = True' >> /opt/patchelf/_patcher.py && \
57+
echo ' except ValueError:' >> /opt/patchelf/_patcher.py && \
58+
echo ' pass' >> /opt/patchelf/_patcher.py && \
59+
echo ' try:' >> /opt/patchelf/_patcher.py && \
60+
echo ' i = patchelf_args.index("--set-interpreter")' >> /opt/patchelf/_patcher.py && \
61+
echo ' self._old_run_patchelf(' >> /opt/patchelf/_patcher.py && \
62+
echo ' patchelf_args=["--set-interpreter", patchelf_args[i + 1]],' >> /opt/patchelf/_patcher.py && \
63+
echo ' elf_file_path=elf_file_path' >> /opt/patchelf/_patcher.py && \
64+
echo ' )' >> /opt/patchelf/_patcher.py && \
65+
echo ' done = True' >> /opt/patchelf/_patcher.py && \
66+
echo ' except ValueError:' >> /opt/patchelf/_patcher.py && \
67+
echo ' pass' >> /opt/patchelf/_patcher.py && \
68+
echo ' if not done:' >> /opt/patchelf/_patcher.py && \
69+
echo ' self._old_run_patchelf(patchelf_args=patchelf_args, elf_file_path=elf_file_path)' >> /opt/patchelf/_patcher.py && \
70+
echo 'Patcher._run_patchelf = new_run_patchelf' >> /opt/patchelf/_patcher.py
6071

6172
# Multi-stage build, only need the snaps from the builder. Copy them one at a
6273
# time so they can be cached.

0 commit comments

Comments
 (0)