
Ubuntu日本語フォーラム

ログインしていません。
古いバージョンのUbuntuでCのプログラムをテストしたいと思いVmwareにてUbuntu6.10をインストールしました。
isoイメージは
http://old-releases.ubuntu.com/releases/
こちらよりダウンロードしました。
その後、Cのソースでstdio.hをインクルードしてgccでコンパイルしようとすると
error: stdio.h: No such file or directory
と表示されてコンパイル出来ません。
http://web.archiveorange.com/archive/v/F78LpLFCanh95mSvHRty
このあたりを参考に
sources.listに
deb http://old-releases.ubuntu.com/ubuntu/ intrepid main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ intrepid-updates main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ intrepid-security main restricted universe multiverse
を追加して
build-essentialを入れようとしてもうまく入らず結果変わらず結果変わらずです。
Ubuntu6.10でCの環境を新たに作るのは難しいのでしょうか?
オフライン
hirosandesuさん による投稿:
Ubuntu6.10でCの環境を新たに作るのは難しいのでしょうか?
敢えてサポート期限が終了しているバージョンで、それも基本的に最新版の環境でも同等と思われるのに、
なぜ拘れるのか理解できません。
なにか特別な理由があるのですか? こちらの疑問への回答に興味があります。
可能性としては、こちらから検索されるとでてくるかも。。。
http://packages.ubuntu.com/
Search the contents of packages
This search engine allows you to search the contents of Ubuntu distributions for any files (or just parts of file names) that are part of packages. You can also get a full list of files in a given package.
stdio.hを指定し、Ubuntu6.10環境をセットして検索してください。
普通は、~$ sudo apt-get install build-essential でOKなのですが。。。
ダイレクトに指定するなら、~$ sudo apt-get install libc6-dev です。
オフライン
追記
こちらにある通り、古いパッケージはLTS版しか保存されてない様です。
Browse through the lists of packages:
* dapper (6.06LTS)
* dapper-updates
* dapper-backports
* hardy (8.04LTS)
* hardy-updates
* hardy-backports
* jaunty
* jaunty-updates
* jaunty-backports
* karmic (9.10)
* karmic-updates
* karmic-backports
* lucid (10.04LTS)
* lucid-updates
* lucid-backports
* maverick (10.10)
* maverick-updates
* maverick-backports
* natty
There is also a list of packages recently added to natty.
Old releases can be found at http://old-releases.ubuntu.com/.
だから、Ubuntu6.10では導入したくても存在しない可能性があります。後はご自分で探してください。
オフライン
hirosandesuさん、
koisan1949さんの投稿と少し被る箇所がありますが、完全に書かれていないので、フォローする形で書きます。
今回の場合はまず、/etc/apt/sources.list を元の状態、つまり、 http://web.archiveorange.com/archive/v/F78LpLFCanh95mSvHRty を参考にして行追加する前に戻した上で、
sudo apt-get update sudo apt-get install build-essential
でOKです。
少なくとも6.10では、build-essential は libc6-dev に依存しているので、同時に libc6-dev もインストールされます。
そして、stdio.hはlibc6-devで提供されます。
build-essential、 libc6-dev ともに mainリポジトリにあるので、old-releases にさえ向ければインストールは確実に出来ます。(実際に確認済。)
なお、/etc/apt/sources.listに追加した行は Edgy(6.10)用ではなくIntrepid(8.10)用なので、混ぜるのはNGです。
もし、行追加した後に、何らかのパッケージ追加・更新を行ってしまった場合は、面倒でも6.10を再インストールした方が早いと思います。
hirosandesuさん、
hirosandesu による投稿:
古いバージョンのUbuntuでCのプログラムをテストしたいと思いVmwareにてUbuntu6.10をインストールしました。
の書き込みだけで、私は理解できます。
私も、古いバージョンでプログラムを動作させる機会がよくあるので、その動機は容易に想像できますよ。
koisan1949さん による投稿:
なにか特別な理由があるのですか? こちらの疑問への回答に興味があります。
セキュリティの勉強をしようと思い、サンプルコードを実行して実際に動くことを確認したかったのです。
最新のUbuntuだとASLRやstack-protectorを外しても上手く動いてくれず、Ubuntu6.10なら動いたというブログを発見したため試してみたいのです。
STGSAGWANさん による投稿:
build-essential、 libc6-dev ともに mainリポジトリにあるので、old-releases にさえ向ければインストールは確実に出来ます。(実際に確認済。)
6.10を再インストールしてみたのですが、
sourses.listはデフォルトのままでよいのでしょうか?
sudo apt-get update
を実行するとほとんどのリポジトリへは接続出来ず
sudo apt-get install build-essential
でbuild-essentialが見つかりませんと出てしまいます。
オフライン
サポートが終了しているということは、リポジトリの提供も終了しているということで、apt-getによるアップデートやソフトウェアのインストールは基本的にはできません。
オフライン
追記:
古い版を提供しているリポジトリを設定すればインストールはできると思いますが、セキュリティー的に問題がありますし、本当に6.10でなければできないのかどうかを調べてみる必要はあると思います。
サンプルプログラムのことについてもう少し詳しい情報(出典等)を書くと、よりよいアドバイスをもらえるかもしれません。
オフライン
vbkさん による投稿:
古い版を提供しているリポジトリを設定すればインストールはできると思いますが、セキュリティー的に問題がありますし、本当に6.10でなければできないのかどうかを調べてみる必要はあると思います。
サンプルプログラムのことについてもう少し詳しい情報(出典等)を書くと、よりよいアドバイスをもらえるかもしれません。
セキュリティに問題があったほうが都合がいいのです。
出典としては
まずソースコードはHacking: 美しき策謀 ―脆弱性攻撃の理論と実際からの最初にある
#include <stdio.h>
int main(int argc, char *argv[]){
char buffer[500];
strcpy(buffer, argv[1]);
return 0;
}です。
Ubuntu6.10で動作確認しているという出典は
http://www.ada-u.net/?p=197
こちらを参考にさせていただきました。
オフライン
hirosandesu さんの投稿 (#6):
セキュリティの勉強をしようと思い、サンプルコードを実行して実際に動くことを確認したかったのです。
最新のUbuntuだとASLRやstack-protectorを外しても上手く動いてくれず、Ubuntu6.10なら動いたというブログを発見したため試してみたいのです。
#3 で koisan1949 さんが投稿されているように、6.10 のリポジトリは削除されており、インターネット上のどこを探してもまず見つからないでしょう (奇特な人が独自に保存、公開している可能性もゼロではないが、余程の偶然が無い限りは見つけられない)
つまり、ISO イメージで提供されているパッケージ以外の入手は諦めるしかありません
6.06LTS なら凍結されたリポジトリが残っているので、動くかどうかはわかりませんが、これを使ってサンプルコードの動作を確認するのが次善の解ではないでしょうか
オフライン
Kubuntu 10.10で試したところ、
~/prog/clng/test $ cat test.c
#include <stdio.h>
int main(int argc, char *argv[]){
char buffer[500];
strcpy(buffer, argv[1]);
return 0;
}
~/prog/clng/test $ gcc test.c
test.c: In function ‘main’:
test.c:5: warning: incompatible implicit declaration of built-in function ‘strcpy’
~/prog/clng/test $ ls
a.out test.c
~/prog/clng/test $ ./a.out
セグメンテーション違反です
~/prog/clng/test $ ./a.out hoge
~/prog/clng/test $ ./a.out aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
*** stack smashing detected ***: /home/hiroo/prog/clng/test/a.out terminated
セグメンテーション違反ですのようになりましたが、これは期待と異なる動作でしょうか。期待通りでは無い場合は、
https://wiki.ubuntu.com/CompilerFlags
https://wiki.ubuntu.com/Security/Features
あたりを参照して微調整していただくと最新版のUbuntuでも実験できる内容かも知れません。
オフライン
hmatsueさん による投稿:
これは期待と異なる動作でしょうか。期待通りでは無い場合は、
https://wiki.ubuntu.com/CompilerFlags
https://wiki.ubuntu.com/Security/Features
あたりを参照して微調整していただくと最新版のUbuntuでも実験できる内容かも知れません。
私のUbuntu10.10環境でもセグメンテーション違反はするのですが、実際にやりたいことは次のようなことです。
提示しましたソースは脆弱性があるプログラムで、
別のCのプログラムからそのプログラムを起動させてバッファオーバーフローさせ、
スタックにNOPを並べ、その後に機械語のコードを並べて、その機械語のプログラムを実行したいのです。
このためスタックのアドレス空間のランダム化を停止して、スタックの実行可のオプションをgccに指定はしたのですが、
上手く起動しませんでした。
そこで実際に動いたというUbuntu6,10で実行してみたいのです。
オフライン
STGSAGWANさん による投稿:
今回の場合はまず、/etc/apt/sources.list を元の状態、つまり、 http://web.archiveorange.com/archive/v/ … h95mSvHRty を参考にして行追加する前に戻した上で、
sudo apt-get update
sudo apt-get install build-essential
でOKです。
sources.listを元の状態に戻せばパッケージ配布サーバー上にedgy用のディレクトリがないので、apt-get updateは失敗に終わる。
これは、hirosandesuさんが遭遇している問題です。
リンク先を参考にして作業したのはいいのですが、sources.listの理解不足でUbuntuのバージョン指定を間違ってしまったのが原因です。
sources.listを元に戻すのではなく、
deb http://old-releases.ubuntu.com/ubuntu/ edgy main
の1行だけに変更後、
sudo apt-get update
sudo apt-get install build-essential
で当初の目的は達成できる。
その他main以外のパッケージのインストールが必要であれば、restrictedなどを追加する。
ryさん による投稿:
#3 で koisan1949 さんが投稿されているように、6.10 のリポジトリは削除されており、インターネット上のどこを探してもまず見つからないでしょう (奇特な人が独自に保存、公開している可能性もゼロではないが、余程の偶然が無い限りは見つけられない)
つまり、ISO イメージで提供されているパッケージ以外の入手は諦めるしかありません
「#4でSTGSAGWANさんがbuild-essential、 libc6-dev ともに mainリポジトリにあるので、old-releases にさえ向ければインストールは確実に出来ます。(実際に確認済。)」と書かれているのですが、ryさんはこの内容を検証されたのでしょうか?
オフライン
jackalopeさん による投稿:
コード:
deb http://old-releases.ubuntu.com/ubuntu/ edgy mainの1行だけに変更後、
sudo apt-get update
sudo apt-get install build-essential
で当初の目的は達成できる。
ありがとうございます。
この方法でCのプログラムをコンパイルすることができました。
オフライン