質問
この質問とそれを解決するためのさまざまな方法が含まれた答えがほぼ毎日私たちのコミュニケーションで何度も登場します。検索結果がここにリンクされていれば大歓迎です!あなたの質問にリンクされたコメントを残すと、あなたの質問は同じカテゴリに属するので、以下のリストに追加できると安全に想定できます。
- gccダウングレード後のglibとgccの間の不一致
- Fedora 39で特定のgccバージョンにダウングレードするには?
- Arch Linuxにgccコンパイラをインストールする方法は?
- Debian Bullseye: gcc-11.4.0 と依存関係のインストール
[gcc]
これは、クエリの品質の低下によって引き起こされる多くの問題の4つにすぎません。知識が豊富で、まずコミュニケーションができる読者/ユーザーは、ほとんどいつも私に何をすべきか尋ねるでしょう...」と思います」と言います。この質問と回答では、ハイブリッドコンパイラがすべてのLinuxをクラッシュさせる理由を説明しようとし、答えは問題を解決するために私が知っている最も簡単な方法を提供します。この方法は破損を引き起こしませんが、これによりわずかなオーバーヘッドが発生します。コミュニティでQ&Aを提供し、私のアプローチが気に入った場合は投票してください。
問題の説明
全長DR:ジャンプするコンパイラをダウングレードするとなぜ問題が発生するのですか?
私はさまざまな答えに以下の画像を2〜3回使用しました。サイズが大きいことがわかっているので、読者が望む場合は、別のタブで開き、ズームなどを行うことをお勧めします。
このリストからディストリビューションを見つけて読んでください。ディストリビューションに親ディストリビューションがあることがわかります。 「いいね!」「いいね!」「親ディストリビューション(タイムラインの一番左にあるディストリビューション)」を使用している読者は、次のように質問することを知っています。
私は一番左のものを使っていますが、その親はどこにいますか?
今、私たちは問題の核心に達します。たとえば、$X
私のタイトルを入力してみましょう$Y
(忍耐強い読者の皆さん、$Z
まもなく提供される予定です)。
$X = Fedora 39
$Y = 13.2.1-6.fc39
定義
- 配布(Wikipediaから引用):
Linuxディストリビューション(しばしばdistroと省略)は、Linuxカーネルを含むソフトウェアのコレクションで構成されるオペレーティングシステムであり、通常パッケージ管理システム。
- パッケージ管理システム(再引用):
パッケージマネージャまたはパッケージ管理システムは、コンピュータプログラムを一貫した方法でインストール、アップグレード、構成、および削除するプロセスを自動化するソフトウェアツールバーです。
これら2つの項目を理解すると、親の配布の質問に答えるのに役立ちますが、残念ながら別の質問があります。デプロイメント・マネージャーはどのようにデプロイメントを生成しますか?
A:カーネルを除くすべてのLinuxソフトウェアは、次の場所に保存されます。GNUソフトウェアFTPサイトソースコードアーカイブにあります。すべてのLinuxカーネルはソースコードアーカイブからダウンロードできます。Linuxカーネルのアーカイブ。つまり、すべてのディストリビューションは、親ディストリビューションを含む同じソースコードから始まります。
コンパイラをダウングレードするとなぜ問題が発生するのですか?
前の定義によると、ディストリビューションは関連ソフトウェアのグループまたはグループです。この関係は、デプロイメントリポジトリ(またはデプロイメントによって選択された別の名前)で表示できます。
新しいバージョン(私たちの場合$X
= Fedora 39)が利用可能になると、そのバージョンのリポジトリがロックされます。特にバージョンがロックされています。これは、そのリポジトリのすべてのパッケージがロックされることを意味します。時間凍結。一度凍っても変わりません。バージョンがサポートされている間だけ生き残ることができ、バージョンがアップグレードされると死にます。
GCCを構築するために必要なツールも凍結ストレージにあります。 ユーザーが固定リポジトリに付属のGCCをアップグレードまたはダウングレードしようとすると、成功するとバージョンロックが解除されます。。破損の発生を防ぐために、オペレーティング・システムのパッケージ・マネージャーは、このようなことが発生しないようにします。
私の答えを読んで、どうやって克服したのかをご覧ください。$Z
答え1
あまり重い解決策はコンテナを使用することです。 Docker または Podman をインストールし、次の手順に従います。eyoung100さんの返信必要なディストリビューションを識別または検索します。参会学について。
同じFedora 36の例を使用してコンテナを実行します。
podman run -it fedora:36
-v
コンテナ内でシステムのディレクトリを使用できるようにするオプションを追加できます。
podman run -it -v ~/myproject:/myproject:z fedora:36
:z
(SELinuxを使用している場合にのみ追加されます。)
コンテナ内にgcc
必要な他のツールをインストールしてプロジェクトをビルドすると、共有ディレクトリ内のファイルを/myproject
見つけることができます。
答え2
私のソリューション
まず、パッケージがリポジトリにない場合やサードパーティのリポジトリから追加できない場合は、最初からコンパイルしたり「強制的に」コンパイルしてはいけません。うまくいけば、それはパッケージマネージャが短絡するからです。
仮想化は私たちの友人です
この方法を実装するには、いくつかのツールとハードドライブスペースが必要です。余裕を残しておきます。それ以外は、次の手順に従ってください。
ノート:私はVagrantがHyper-Vとdockerで動作すると信じています(参照Steven Kitの答えDockerヘルプ)。しかし、VirtualBoxを選択した理由は、それが最初に学び、必要に応じて仮想マシンをさらに構成するために仮想マシンにデスクトップをインストールできるためです。
仮想化サポートをインストールした後に続行できます。私は続く:
- 要件の収集 - 私はWebプログラマーなので、顧客の要件を収集してみましょう。私たちの目的のために今書いてみましょう
$Z
。上記の質問タイトルの例の質問2を使用すると、次の値を取得できます。$X = Fedora
$Y = 13.2.1-6.fc39
$Z = 12.x.x
- いつもお気に入りのエンジンで次の文を検索語として使用してください。 $XのどのリリースにGCC $Zが含まれていますか?
たとえば、どのFedoraバージョンにGCC 12が含まれているかを見てみましょう。それでは、Googleを引用してみましょう。
Fedora 36 GNUツールチェーンをgcc 12とglibc 2.35にアップデートしました。 gcc 12 は現在開発中で、リリース時に Fedora 36 に含まれる予定です。 2022年2月16日
- 上記のバージョン36がまだサポートされていることを確認してみましょう。検索エンジン:
$ X公開履歴
これは、私たちの例のFedoraリリース履歴と同じです。Fedora Linuxのリリース履歴。さて、今私たちは何をしますか? Fedora 36はサポートされなくなったようです。これが私たちがVagrantを追加した理由です。私たちが訪れるとさまよう雲、Fedora 36を検索すると、次のようになります。この結果、そして使用迷子になったファイル、ホストシステム上のプロジェクトファイルを維持しながら、VM全体のバージョンをカスタマイズし、VMを使用してアプリケーションまたはWebサイトを開発できます。
私がこの方法を選んだ理由
仮想化を使用すると、開発環境を毎日使用しているシステムと分離し、不可逆的なミスを防ぐことができます。インストールにはもう少し時間がかかることがわかりますが、Vagrantは一度インストールするだけです。プロジェクトの要件が変更されるたびにvagrantfileを作成します。 Vagrantと仮想化の学習曲線は小さく、複数のコンパイラをインストールする方法を理解しようとしている間に間違いを犯した場合は、オペレーティングシステムを再インストールすることをお勧めします。