質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

IDE

IDE、統合開発環境((Integrated Development Environment)とは、テキストエディタ以上の機能を提供して、ソフトウェア開発を効率をあげるコンピュータプログラムを指す。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

yum

yumコマンドは、UNIX系OSのRPMパッケージのインストールなどを行うためのプログラムのことです。

rpm

rpmコマンドは、UNIX系OSのroot権限でのみ利用可能なコマンドで、 RPMパッケージのインストールなどができます。

Q&A

解決済

2回答

7941閲覧

glibc >= 2.17, libstdc++ >= 3.4.18 を 手動でビルドして入れたい

teityura

総合スコア84

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

IDE

IDE、統合開発環境((Integrated Development Environment)とは、テキストエディタ以上の機能を提供して、ソフトウェア開発を効率をあげるコンピュータプログラムを指す。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

yum

yumコマンドは、UNIX系OSのRPMパッケージのインストールなどを行うためのプログラムのことです。

rpm

rpmコマンドは、UNIX系OSのroot権限でのみ利用可能なコマンドで、 RPMパッケージのインストールなどができます。

0グッド

0クリップ

投稿2020/08/12 16:52

実現したいこと

CentOS6の環境 で VSCode公式 の RemoteDevelopment を 使いたいです。
https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack

CentOS6 で RemoteDevelopment を使うには、
glibc >= 2.17, libstdc++ >= 3.4.18 が必要みたいです。
https://code.visualstudio.com/docs/remote/linux#_updating-glibc-and-libstdc-on-rhel-centos-6

公式では rpm で glibc, libstdc をアップデートする方法を紹介しているみたいで、
しかし、他のアプリケーションが依存するライブラリを更新するから注意してと書いています。
(rpm -Uh --force --nodeps ...)

rpm で 既存のパッケージをアップデートしたり、
競合させたりせずにインストールする方法はあるのでしょうか。
(rpm -ivh --prefix=./work とか --relocate ./work で 上手くいかず一旦断念しました)

手動で glibc, libstdc をビルド, コンパイルする参考サイトも紹介しています。
https://serverkurma.com/linux/how-to-update-glibc-newer-version-on-centos-6-x/

前提

新しくパッケージを入れる許可は得ており、sudo権限等もあるものとします。

しかし、元から入ってるパッケージ等がアップデートをきっかけに動かなくなってはいけません。
例えば、/lib/libc.so.6 のシンボリックを張り替えたりすると、
何か意図しないことが起こりそうで怖いです。

手動してビルドする前の状態

VSCode経由でのSSH接続は成功しているようだが、
「Could not establish connection to <hostname>」と表示され、
glibc, libstdc が足りていないメッセージが ~/.vscode-server/.<id?>.log に出ています

[<username>@<hostname> ~]$ cat ~/.vscode-server/.91899dcef7b8110878ea59626991a18c8a6a1b3e.log /home/<username>/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by /home/<username>/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node) /home/<username>/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by /home/<username>/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node) /home/<username>/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.5' not found (required by /home/<username>/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node) /home/<username>/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /home/<username>/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node) /home/<username>/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node: /lib64/libc.so.6: version `GLIBC_2.17' not found (required by /home/<username>/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node) /home/<username>/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node: /lib64/libc.so.6: version `GLIBC_2.16' not found (required by /home/<username>/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node) /home/<username>/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/<username>/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node)

試してみたこと

glibc 2.17 を 手動でビルドして入れて、
export LD_LIBRARY_PATH=/opt/glibc-2.17/lib
を .bashrc に記述しましたが、VSCodeでSSHした際に、
手動でビルドして入れたサイト同じエラーがでました。

/home/<username>/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node: /lib64/libc.so.6: version 'GLIBC_2.17' not found (required by /home/<username>/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node)`

↑については、~/.bashrcに記述しても、VSCode経由のSSHでは
LD_LIBRARY_PATH を読み込めていないのかもしれません。
/etc/profile とかで export すればよいのかもしれませんが、
個人の設定ファイルで完結させたいです。

あるいは、普段使いでsshするときは LD_LIBRARY_PATH を空のままにして
SSH接続時のみ export させれば最高です。
config とかは 下記のようなイメージです。

# hooost Host hooost Hostname xxx.xxx.xxx.xxx User userrr IdentityFile C:\Users\userrr.ssh\adm_rsa Command??? export LD_LIBRARY_PATH=/opt/glibc-2.17/lib

glibc については、下記のようにインストールしました。

# glibc 2.17 があるがチェック strings /lib64/libc.so.6 | grep GLIBC | grep 2.17 strings /lib64/libc.so.6 | grep GLIBC # GLIBC_2.17 ... なかった # 作業フォルダ作成 mkdir -p ~/src/local/ cd ~/src/ # ダウンロード, 解凍, ビルド用フォルダ作成 wget http://ftp.gnu.org/gnu/glibc/glibc-2.17.tar.gz tar -zxvf glibc-2.17.tar.gz cd glibc-2.17/ mkdir build cd build/ # ビルド, コンパイル (real: 10m57.126s かかった) ls -al /opt/{,glibc-2.17/} ../configure --prefix=/opt/glibc-2.17 touch /opt/test && (rm -f /opt/test ; make install) || sudo make install # シンボリックリンク を 作成するか # ln -sf /opt/glibc-2.17/glibc-2.17.so /lib/libc.so.6. # LD_LIBRARY_PATH変数 を エクスポートしておく echo -e "\nexport LD_LIBRARY_PATH=/opt/glibc-2.17/lib" >> ~/.bashrc exec $SHELL -l echo $LD_LIBRARY_PATH

libstdc++ を手動でビルドする手順はまだ調べているところです。
恐らく、glibc と同じような方法でできると思うのですが、
もし、glibcと同様に、LD_LIBRARY_PATH(同じ変数名)を設定するのであれば、
できないのかなと思ったりしています。

まとめ

・rpm で 既存の環境に影響を与えずにインストールは可能か
・VSCodeでSSHしたときに、glibc 2.17 を見つけさせるには どうすればいいか
・あるいはもっとスマートな方法でVSCodeのRemoteDevelopment(=SSH)を利用する方法はあるか

CentOS6で利用したい人結構いると思うのですが、日本語の情報など見つけられなくて、
何か1つでもご存知の方、助言ください、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Daregada

2020/08/13 02:38

結構いるかどうかはともかく、CentOS6自体が2020-11-30でサポート切れてしまいますが。
dameo

2020/08/13 08:29

とりあえずvscodeの拡張機能のRemote - SSHは動かないんですか? 何をしたいのか分かりませんけど。。。
teityura

2020/08/13 08:41 編集

CentOS6環境でvscodeの拡張機能のRemote - SSHを動かしたいのです 検証環境にて rpm で依存関係を無視して、glibcとlibstdc++をアップデートしたら動きましたが、本番環境でrpmでアップデートしてトラブルがあると怖いので、ソースからビルドして入れて、LD_LIBRARY_PATH で ライブラリの参照先を変える方法などで動かしたいと思っています。
dameo

2020/08/13 08:42

全部動かないんですか?それとも一部が動かないんでしょうか?何が動かないんでしょう? nativeコードのある拡張ばかりではないと思うんですが...
dameo

2020/08/13 09:46

centos6入れて、Remote-SSH試したけど全く動かなかった。以下繋ぎに行ったときのログ。 [18:41:35.392] Log Level: 2 [18:41:35.395] remote-ssh@0.51.0 [18:41:35.395] win32 x64 [18:41:35.397] SSH Resolver called for "ssh-remote+localhost-centos", attempt 1 [18:41:35.397] SSH Resolver called for host: localhost-centos [18:41:35.398] Setting up SSH remote "localhost-centos" [18:41:35.418] Using commit id "91899dcef7b8110878ea59626991a18c8a6a1b3e" and quality "stable" for server [18:41:35.419] Install and start server if needed [18:41:38.589] Checking ssh with "ssh -V" [18:41:38.627] > OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5 [18:41:38.629] Running script with connection command: ssh -T -D 55437 localhost-centos bash [18:41:38.631] Terminal shell path: C:\WINDOWS\System32\cmd.exe [18:41:38.684] > > (省略) > > ]0;C:\WINDOWS\System32\cmd.exe [18:41:38.684] Got some output, clearing connection timeout [18:41:38.692] > > (省略) > [18:41:40.765] > user@localhost's password: [18:41:40.766] Showing password prompt [18:41:45.301] Got password response [18:41:45.301] "install" wrote data to terminal: "********" [18:41:45.313] > > [18:41:45.537] > cde5f79e8d24: running > [18:41:45.559] > Missing GLIBCXX >= 3.4.18! > [18:41:45.567] > Found versions 3.4.1 > 3.4.2 > 3.4.3 > 3.4.4 > 3.4.5 > 3.4.6 > 3.4.7 > 3.4.8 > 3.4.9 > 3.4.10 > 3.4.11 > 3.4.12 > 3.4.13 > Missing GLIBC >= 2.17! > Found version ldd (GNU libc) 2.12 > cde5f79e8d24$$1$$ > Acquiring lock on /home/user/.vscode-server/bin/91899dcef7b8110878ea59626991a18c > 8a6a1b3e/vscode-remote-lock.user.91899dcef7b8110878ea59626991a18c8a6a1b3e > \ln /home/user/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/vscod > e-remote-lock.user.91899dcef7b8110878ea59626991a18c8a6a1b3e.target /home/user/.v > scode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/vscode-remote-lock.use > r.91899dcef7b8110878ea59626991a18c8a6a1b3e > Found existing installation at /home/user/.vscode-server/bin/91899dcef7b8110878e > a59626991a18c8a6a1b3e... [18:41:45.593] > > [18:41:45.634] > SELINUX_ROLE_REQUESTED= > SHELL=/bin/bash > SSH_CLIENT=10.0.2.2 55441 22 > SELINUX_USE_CURRENT_RANGE= > USER=user > VSCODE_AGENT_FOLDER=/home/user/.vscode-server > PATH=/usr/local/bin:/bin:/usr/bin > MAIL=/var/mail/user > PWD=/home/user > LANG=ja_JP.UTF-8 > SELINUX_LEVEL_REQUESTED= > HOME=/home/user > SHLVL=2 > LOGNAME=user > SSH_CONNECTION=10.0.2.2 55441 10.0.2.15 22 > LESSOPEN=||/usr/bin/lesspipe.sh %s > G_BROKEN_FILENAMES=1 > _=/usr/bin/printenv > Starting server with command... /home/user/.vscode-server/bin/91899dcef7b8110878 [18:41:45.641] > > ea59626991a18c8a6a1b3e/server.sh --host=127.0.0.1 --enable-remote-auto-shutdown > --port=0 &> "/home/user/.vscode-server/.91899dcef7b8110878ea59626991a18c8a6a1b3 > e.log" < /dev/null > Waiting for server log... [18:41:45.647] > > [18:41:46.148] > Waiting for server log... > [18:41:46.653] > Waiting for server log... > [18:41:47.158] > Waiting for server log... > [18:41:47.662] > Waiting for server log... > [18:41:48.168] > Waiting for server log... > [18:41:48.673] > Waiting for server log... > [18:41:49.177] > Waiting for server log... > [18:41:49.681] > > * > * Reminder: You may only use this software with Visual Studio family products, > * as described in the license (https://go.microsoft.com/fwlink/?linkid=2077057)  > * > > [18:41:49.691] > Server did not start successfully. Full server log at /home/user/.vscode-server/ > .91899dcef7b8110878ea59626991a18c8a6a1b3e.log >>> > /home/user/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node: /us > r/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by /home/us > er/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node) > /home/user/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node: /us > r/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by /home/us > er/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node) > /home/user/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node: /us > r/lib64/libstdc++.so.6: version `CXXABI_1.3.5' not found (required by /home/user > /.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node) > /home/user/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node: /us > r/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /home/us > er/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node) > /home/user/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node: /li > b64/libc.so.6: version `GLIBC_2.17' not found (required by /home/user/.vscode-se > rver/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node) [18:41:49.705] > > /home/user/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node: /li > b64/libc.so.6: version `GLIBC_2.16' not found (required by /home/user/.vscode-se > rver/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node) > /home/user/.vscode-server/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node: /li > b64/libc.so.6: version `GLIBC_2.14' not found (required by /home/user/.vscode-se > rver/bin/91899dcef7b8110878ea59626991a18c8a6a1b3e/node) > <<< End of server log > cde5f79e8d24##32## [18:41:49.706] Received install output: cde5f79e8d24##32## [18:41:49.706] Resolver error: The VS Code Server failed to start [18:41:49.710] ------ [18:41:49.906] > > [18:41:50.180] "install" terminal command done [18:41:50.182] Install terminal quit with output:
dameo

2020/08/13 09:50

とりあえずglibc置き換えてまで動かそうとは思わないので私はこの辺で。
teityura

2020/08/13 10:27

rpmでglibc, libstdc++ アップデートしたら動いたのですが、 ビルドして置き換えてまですると面倒ですよね。 他のCentOS6環境でも動かないのが分かってよかったです。 ありがとうございました。
guest

回答2

0

自己解決

自己解決しました。

patchelf でリンク先を変更する方法

Using Visual Studio Code for C Programming on an Old Linux Remote Server
https://medium.com/@benh.lieusong/using-visual-studio-code-for-c-programming-on-an-old-linux-remote-server-e2a13149ddaf

上の記事が見つからなければ詰んでました。本当に感謝。

# Download glibc, libstdc++ mkdir -p ~/src/vscode-server cd ~/src/vscode-server/ wget http://mirror.centos.org/centos/7/os/x86_64/Packages/glibc-2.17-307.el7.1.x86_64.rpm wget http://mirror.centos.org/centos/7/os/x86_64/Packages/libstdc++-4.8.5-39.el7.x86_64.rpm # Extract glibc, libstdc++ rpm2cpio glibc-2.17-307.el7.1.x86_64.rpm | cpio -idmv rpm2cpio libstdc++-4.8.5-39.el7.x86_64.rpm | cpio -idmv rm -f glibc-2.17-307.el7.1.x86_64.rpm rm -f libstdc++-4.8.5-39.el7.x86_64.rpm # Check path find . -name "lib*.so.6" # ./glibc-2.17/build/libc.so.6 # ./usr/lib64/libstdc++.so.6 # ./lib64/libm.so.6 # ./lib64/libc.so.6 # Check link strings ./lib64/libc.so.6 | grep GLIBC_2.17 strings ./usr/lib64/libstdc++.so.6 | grep GLIBCXX_3.4.19 # Put vscode-server sudo mv ../vscode-server/ /opt/ sudo chown root:root -R /opt/vscode-server/ ls -ald /opt/vscode-server/ # Download patchelf mkdir -p ~/src/tmp cd ~/src/tmp/ wget https://dl.fedoraproject.org/pub/epel/6/x86_64/Packages/p/patchelf-0.9-10.el6.x86_64.rpm # Extract patchelf rpm2cpio patchelf-0.9-10.el6.x86_64.rpm | cpio -idmv # put patchelf chmod 755 usr/bin/patchelf sudo cp usr/bin/patchelf /usr/local/bin/ which patchelf && cd ../ && rm -rf ./tmp/ # Running it on node ls -al ~/.vscode-server/bin/*/node find ~/.vscode-server/bin/ -type f -name 'node' | xargs patchelf \ --set-interpreter /opt/vscode-server/lib64/ld-linux-x86-64.so.2 \ --set-rpath /opt/vscode-server/usr/lib64:/opt/vscode-server/lib64 ldd ~/.vscode-server/bin/*/node

rpm でパッケージのバージョンを上げる方法

rpm 公式の手順通りに アップデートする
https://code.visualstudio.com/docs/remote/linux#_updating-glibc-and-libstdc-on-rhel-centos-6

この方法は既存の環境に影響が出る可能性があるため、やめました。

投稿2020/08/29 07:24

teityura

総合スコア84

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yumetodo

2020/08/30 04:09

はー、どうにかなるもんなんですね・・・ 自分の敗因は圧倒的なストレージ不足と特権不足だったか・・・
guest

0

こういうナウでヤングなツールを使うときはCentOSの上でVirtualBoxかDockerを動かして、その上でナウでヤングなOS(Arch Linuxとか)を入れて動かすのがいいと思われます。というかなんならCentOS6とかいうカビの生えた環境を窓から投げ捨ててCentOS8とかUbuntu20.04とかをつかうという素晴らしい選択肢があります。そうしましょう。

自分はCentOS6とはもう一生分戦った気がするのでもう嫌です。
東京理科大学のLinux環境に最新のgitを自前ビルドして導入しようとしたが挫折した話 - yumetodoの旅とプログラミングとかの記録

投稿2020/08/17 16:23

yumetodo

総合スコア5850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teityura

2020/08/29 07:18

確かに戦うメリットが少ないですよね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問