Motivating examples
Specifying dependencies
RUN apt-get update && \
apt-get install -y \
libssl1.1 \
libjson-glib-1.0-0 \
libgstreamer1.0-0 \
gstreamer1.0-tools \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav \
libgstrtspserver-1.0-0 \
libjansson4 \
make \
git \
wget \
checkinstall
Dependency hell + destructive updates
https://en.wikipedia.org/wiki/Dependency_hell
tomas.krupka@yersinia:~$ pip install awscli
...
Collecting awscli
Collecting s3transfer<0.11.0,>=0.10.0
Collecting botocore==1.34.23
...
Installing collected packages: botocore, s3transfer, awscli
Attempting uninstall: botocore
Found existing installation: botocore 1.31.30
Uninstalling botocore-1.31.30:
Successfully uninstalled botocore-1.31.30
...
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
WARNING: boto3 1.28.30 requires botocore<1.32.0,>=1.31.30, but you have botocore 1.34.23 which is incompatible.
WARNING: boto3 1.28.30 requires s3transfer<0.7.0,>=0.6.0, but you have s3transfer 0.10.0 which is incompatible.
Successfully installed awscli-1.32.23 botocore-1.34.23 s3transfer-0.10.0
Multiple software versions and variants
pip install conan==1.59
pip install conan==2.0
apt install opencv
apt install opencv-with-cuda
What happens if an update fails?
- The update process itself fails:
apt-get update && apt-get upgrade
...
CTRL+C
- The result of the update is undesired
error: invalid magic number
error: you need to load kernel first