create_dockerfile.sh 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #!/bin/bash
  2. dist=${1:-bookworm}
  3. version=${2:-6.0.0}
  4. DATE=$(date +"%Y-%m-%d")
  5. KAM_ARCHIVE_REPO="https://deb-archive.kamailio.org/repos/kamailio-${version}"
  6. get_kam_repo() {
  7. if ! wget -q -O /tmp/Packages "${KAM_ARCHIVE_REPO}/dists/${dist}/main/binary-amd64/Packages" ; then
  8. echo "https://deb.kamailio.org/kamailio${kam_version}"
  9. else
  10. echo "${KAM_ARCHIVE_REPO}"
  11. fi
  12. }
  13. get_kam_version() {
  14. if [[ ${version} =~ 4\.4\.[0-9] ]] ; then
  15. kam_version="44"
  16. elif [[ ${version} =~ ([5-9])\.([0-9]+)\.[0-9]+ ]] ; then
  17. kam_version="${BASH_REMATCH[1]}${BASH_REMATCH[2]}"
  18. else
  19. echo "unknown kamailio version '${version}'" >&2
  20. fi
  21. }
  22. kam_packages() {
  23. if ! wget -q -O /tmp/Packages "${KAM_ARCHIVE_REPO}/dists/${dist}/main/binary-amd64/Packages" ; then
  24. KAM_REPO="https://deb.kamailio.org/kamailio${kam_version}"
  25. wget -q -O /tmp/Packages "${KAM_REPO}/dists/${dist}/main/binary-amd64/Packages"
  26. fi
  27. repo_version=$(awk '/Version:/ { print $2 }' /tmp/Packages| head -1)
  28. if [[ ${repo_version} =~ ^${version} ]] ; then
  29. awk -vver="${repo_version}" '/Package:/ { print $2"="ver}' /tmp/Packages | xargs
  30. else
  31. echo "packages in repository \"deb ${KAM_REPO} ${dist} main\" doesn't match version: [${version}]" >&2
  32. echo "version in repository: [${repo_version}]" >&2
  33. fi
  34. }
  35. create_dockerfile() {
  36. cat >"${DOCKERFILE}" <<EOF
  37. FROM ${docker_tag}
  38. LABEL org.opencontainers.image.authors="Victor Seva <[email protected]>"
  39. # Important! Update this no-op ENV variable when this Dockerfile
  40. # is updated with the current date. It will force refresh of all
  41. # of the base images and things like 'apt-get update' won't be using
  42. # old cached versions when the Dockerfile is built.
  43. ENV REFRESHED_AT=${DATE}
  44. EOF
  45. if ${archived} ; then
  46. cat >>"${DOCKERFILE}" <<EOF
  47. # fix repositories
  48. ${RULE}
  49. EOF
  50. fi
  51. cat >>"${DOCKERFILE}" <<EOF
  52. RUN rm -rf /var/lib/apt/lists/* && apt-get update && \
  53. DEBIAN_FRONTEND=noninteractive apt-get install -qq --assume-yes gnupg wget apt-transport-https
  54. # kamailio repo
  55. RUN echo "deb ${KAM_REPO} ${dist} main" > \
  56. /etc/apt/sources.list.d/kamailio.list
  57. EOF
  58. if ${apt_key} ; then
  59. echo "RUN wget -O- https://deb.kamailio.org/kamailiodebkey.gpg | apt-key add -" >> ${DOCKERFILE}
  60. else
  61. cat >>"${DOCKERFILE}" <<EOF
  62. RUN wget -O /tmp/kamailiodebkey.gpg https://deb.kamailio.org/kamailiodebkey.gpg && \
  63. gpg --output /etc/apt/trusted.gpg.d/deb-kamailio-org.gpg --dearmor /tmp/kamailiodebkey.gpg
  64. EOF
  65. fi
  66. cat >>"${DOCKERFILE}" <<EOF
  67. RUN apt-get update && \
  68. DEBIAN_FRONTEND=noninteractive apt-get install -qq --assume-yes ${PKGS} \
  69. && apt-get clean && rm -rf /var/lib/apt/lists/*
  70. # set SHM_MEMORY and PKG_MEMORY from ENV
  71. ENV SHM_MEMORY=${SHM_MEMORY:-64}
  72. ENV PKG_MEMORY=${PKG_MEMORY:-8}
  73. VOLUME /etc/kamailio
  74. ENTRYPOINT kamailio -DD -E -m \${SHM_MEMORY} -M \${PKG_MEMORY}
  75. EOF
  76. }
  77. case ${dist} in
  78. noble|jammy|focal|bionic|xenial|trusty|precise) base=ubuntu ;;
  79. squeeze|wheezy|jessie|stretch|buster|bullseye|bookworm) base=debian ;;
  80. *)
  81. echo "ERROR: no ${dist} base supported"
  82. exit 1
  83. ;;
  84. esac
  85. case ${dist} in
  86. squeeze|wheezy|jessie|stretch) docker_tag=${base}/eol:${dist};;
  87. *) docker_tag=${base}:${dist}
  88. esac
  89. case ${dist} in
  90. bookworm) apt_key=false ;;
  91. *) apt_key=true
  92. esac
  93. archived=false
  94. case ${dist} in
  95. precise)
  96. archived=true ; MIRROR=old-release.ubuntu.com
  97. RULE="RUN sed -i -e 's/archive.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list"
  98. ;;
  99. squeeze|wheezy|jessie|stretch)
  100. archived=true ; MIRROR=archive.debian.org
  101. RULE="RUN sed -i -e 's/deb.debian.org/archive.debian.org/g' -e '/security.debian.org/d' -e '/${dist}-updates/d' /etc/apt/sources.list"
  102. ;;
  103. esac
  104. get_kam_version
  105. KAM_REPO=$(get_kam_repo)
  106. PKGS=$(kam_packages)
  107. [ -n "${PKGS}" ] || exit 1
  108. mkdir -p "${dist}"
  109. DOCKERFILE="${dist}/Dockerfile"
  110. create_dockerfile