実現したいこと
現在、Ruby on Railsサーバのdocker imageとして buildpack-deps:jessie
を使っていますが、
古くて、apt-get updateなどができなくなっているため、OSのバージョンアップを行いたいです。
また、そのための適切な方法や注意点などを知りたいです。
- OSのバージョンアップ方法
- (
jessie
からBuster
へのアップデートを一旦は想定していますが、特に明確な根拠はないため不確定)
- (
- 何か注意点や、調べるべき事柄
前提
- 小規模な企業にて数万人が利用しているSaaSサービスを開発しており、開発環境にてDockerを使っています。今回の質問対象のdockerfileはRailsサーバのコンテナとして使っているものです。
- linuxやdockerについて、社内の知見もあまりない状態です。
- 一旦はrubyのバージョンアップは考えていません。(今後検討していきたいとは思っていますが、影響範囲が大きいためすぐには難しい状態です)
- (rubyのバージョンアップを先にした方が良い、とかもあるかもしれませんが、、)
考えていること
- 恐らく、とりあえず
jessie
からbuster
に書き換えてみて、出てくるエラーに1個1個対処していくのが正攻法なのかなと思いつつ、もし行う前に考えるべきことがあればお伺いしたいと考えた次第です。 - 以下のイメージもあるので、これをまずは入れて試してみるのが良いのかなとは考えています。
- ですが、周囲に頼れる人も少ないため、何かもしわかることがあれば、お伺いできればと思っています。
発生している問題・エラーメッセージ
恐らくOSのバージョンが古いことが原因と思いますが、
docker build時のapt-get update時に以下のエラーが出る状態です。
W: GPG error: http://archive.debian.org jessie Release: The following signatures were invalid: KEYEXPIRED 1587841717 W: Failed to fetch http://security.debian.org/dists/jessie/updates/main/source/Sources 404 Not Found [IP: ****] W: Failed to fetch http://security.debian.org/dists/jessie/updates/main/binary-amd64/Packages 404 Not Found [IP: ****] E: Some index files failed to download. They have been ignored, or old ones used instead.
該当のソースコード
FROM --platform=linux/x86_64 buildpack-deps:jessie # m1 macでも動くよう--platformを指定 # skip installing gem documentation RUN set -eux; \ mkdir -p /usr/local/etc; \ { \ echo 'install: --no-document'; \ echo 'update: --no-document'; \ } >> /usr/local/etc/gemrc ENV LANG C.UTF-8 ENV RUBY_MAJOR 2.6 ENV RUBY_VERSION 2.6.6 ENV RUBY_DOWNLOAD_SHA256 5db187************************* # some of ruby's build scripts are written in ruby # we purge system ruby later to make sure our final image uses what we just built RUN set -eux; \ \ savedAptMark="$(apt-mark showmanual)"; \ apt-get update; \ apt-get install -y --no-install-recommends \ bison \ dpkg-dev \ libgdbm-dev \ ruby \ ; \ rm -rf /var/lib/apt/lists/*; \ \ wget -O ruby.tar.xz "https://cache.ruby-lang.org/pub/ruby/${RUBY_MAJOR%-rc}/ruby-$RUBY_VERSION.tar.xz"; \ echo "$RUBY_DOWNLOAD_SHA256 *ruby.tar.xz" | sha256sum --check --strict; \ \ mkdir -p /usr/src/ruby; \ tar -xJf ruby.tar.xz -C /usr/src/ruby --strip-components=1; \ rm ruby.tar.xz; \ \ cd /usr/src/ruby; \ \ # hack in "ENABLE_PATH_CHECK" disabling to suppress: # warning: Insecure world writable dir { \ echo '#define ENABLE_PATH_CHECK 0'; \ echo; \ cat file.c; \ } > file.c.new; \ mv file.c.new file.c; \ \ autoconf; \ gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \ ./configure \ --build="$gnuArch" \ --disable-install-doc \ --enable-shared \ ; \ make -j "$(nproc)"; \ make install; \ \ apt-mark auto '.*' > /dev/null; \ apt-mark manual $savedAptMark > /dev/null; \ find /usr/local -type f -executable -not \( -name '*tkinter*' \) -exec ldd '{}' ';' \ | awk '/=>/ { print $(NF-1) }' \ | sort -u \ | xargs -r dpkg-query --search \ | cut -d: -f1 \ | sort -u \ | xargs -r apt-mark manual \ ; \ apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ \ cd /; \ rm -r /usr/src/ruby; \ # verify we have no "ruby" packages installed ! dpkg -l | grep -i ruby; \ [ "$(command -v ruby)" = '/usr/local/bin/ruby' ]; \ # rough smoke test ruby --version; \ gem --version; \ bundle --version # don't create ".bundle" in all our apps ENV GEM_HOME /usr/local/bundle ENV BUNDLE_SILENCE_ROOT_WARNING=1 \ BUNDLE_APP_CONFIG="$GEM_HOME" ENV PATH $GEM_HOME/bin:$PATH # adjust permissions of a few directories for running "gem install" as an arbitrary user RUN mkdir -p "$GEM_HOME" && chmod 777 "$GEM_HOME" CMD [ "irb" ] ENV DOCKER_DEV true ENV BUNDLE_JOBS=4 ENV BUNDLE_PATH=/bundle ENV BUNDLE_WITHOUT=production ENV DEBIAN_FRONTEND noninteractive RUN printf "deb http://archive.debian.org/debian/ jessie main\ndeb-src http://archive.debian.org/debian/ jessie main\ndeb http://security.debian.org jessie/updates main\ndeb-src http://security.debian.org jessie/updates main" > /etc/apt/sources.list RUN apt-get update -qq && apt-get install -y --force-yes build-essential libpq-dev libpng-dev nodejs jpegoptim pngquant npm vim wget sudo fonts-ipafont-gothic fonts-ipafont-mincho mysql-server zip && \ npm install -g n && \ n stable && \ npm install -g yarn && \ ln -s /usr/bin/nodejs /usr/bin/node && \ wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - && \ sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' && \ apt-get update # macab RUN apt-get install -y --force-yes mecab mecab-ipadic-utf8 libc6-dev build-essential libmecab-dev libxft-dev # penthouse RUN apt-get install -y --force-yes libxss1 lsb-release libappindicator3-1 # 日本語化 RUN apt-get install -y --force-yes locales RUN locale-gen ja_JP.UTF-8 RUN localedef -f UTF-8 -i ja_JP ja_JP ENV LANG ja_JP.UTF-8 ENV LANGUAGE ja_JP:jp ENV LC_ALL ja_JP.UTF-8 RUN mkdir /myapp \ && mkdir -p /myapp/tmp/pids \ && mkdir -p /myapp/tmp/sockets \ && mkdir -p /myapp/tmp/capybara WORKDIR /myapp # bundle install # os毎にbundleのvolumeを分けるため、先にinstall ADD Gemfile /myapp/Gemfile ADD Gemfile.lock /myapp/Gemfile.lock ADD . /myapp
補足情報(FW/ツールのバージョンなど)
ruby 2.6.6
お手数をお掛けしますが、
もし何か少しでもわかることや、調査すべき項目・方法などでもありがたいです。
また、何か不足情報等ありましたらご教示いただけますと幸いです。
どうぞよろしくお願いいたします。
0 コメント