
Ubuntu日本語フォーラム

ログインしていません。
たとえばRuby1.8のバージョンのままにしておきたい場合とかに、自動更新しないようにするのにはどうしたらいいのでしょうか?
以前、質問したのですがデータがなくなってしまって思い出せません。申し訳ありませんが、もう一度教えてください。よろしくお願いします。
オフライン
他にも方法があったような気もしますが、例えば
http://www.debian.org/doc/manuals/apt-howto/ch-apt-get.ja.html
の3.7の方法などもあります。
オフライン
システムー>システム管理ー>Synaptic パッケージ・マネージャ
クイック検索窓にてバージョン固定したいパッケージ名を入力する。
パッケージ一覧窓からバージョン固定したいパッケージ名をマウスにて選択する。
Synapticメニュー、パッケージ(P)メニューからバージョン固定(L)を選択する。
GUIでやるならこんな感じですかね。
オフライン
ありがとうございます。CUIでの方法を知りたいんです。よろしくお願いいたします。
オフライン
Ruby1.8の部分は固定したいパッケージ名を正確に入れてください。
$ sudo su
# echo Ruby1.8 hold | dpkg --set-selections
# exit
全体を確認するなら
$ dpkg --set-selections
hold に指定されているパッケージを確認するなら
$ dpkg --set-selections |grep hold
grep hold の部分をパッケージ名に変えるとかくとうするパッケージを表示、(grep コマンドを参照して下さい)
元にもどすのは
$ sudo su
# echo Ruby1.8 install | dpkg --set-selections
オフライン
間違い
誤 --set-
hold に指定されているパッケージを確認するなら
$ dpkg --set-selections |grep hold
正 --get-
hold に指定されているパッケージを確認するなら
$ dpkg --get-selections |grep hold
すみませんでした。
-----------------------------------------------------
元に戻ったかどうかの確認は
$ dpkg --get-selections |grep install
もしくは
$ dpkg --gget-selections |grep パッケージ名
全表示
$ dpkg --get-selections
です。
最後の
# exit
は$に戻る操作ですが必ず実行して下さい。
オフライン
aptitudeでもできます。
sudo aptitude hold package-name
オフライン
既に投稿ありましたね。有難うございました。またよろしくお願いいたします。
本題とずれますが、
hir0 による投稿:
$ sudo su
今回の場合も含め、たいていの状況において sudo su でrootになることは(実質それで用件自体は行えてしまうのですが)良くありません。
※コマンドの使い方的にもrootになってしまう事自体も非推奨
sudoとシェルについての注記
https://wiki.ubuntulinux.jp/UbuntuTips/Others/RootSudo
sudoを使ってのコマンド実行の出力をリダイレクトするためには、特別な取扱いが必要になります。一例としては、sudo ls > /root/somefileはファイル出力をしようとするのがシェルであるため機能しません。代わりにls | sudo tee -a /root/somefile、もしくは、ls | sudo tee /root/somefileを使って下さい。あるいは、root権限を要するファイル出力のために、sudo sh -c "ls > /root/somefile"のようにしてコマンド全体をsudoを使って実行したシェルに渡すこともできます。
など参考に、例えば
sudo sh -c "echo Ruby1.8 hold | dpkg --set-selections"
のような使い方が良いと思います。
またrootシェルの使用が避けられない場面では
sudo -i (現在の環境変数を引き継がない、他)
sudo -s (現在の環境変数を引き継ぐ、他)
のどちらかが良いと思います。
su、su -、sudo -{i,s}の違いについての大まかな説明
http://ubuntuforums.org/showpost.php?p=6188826&postcount=4
等参考になるかと思います。
またさらに余談となりますが管理者権限でGUIアプリを端末等から起動するには
グラフィカルなアプリケーションをroot権限で実行する場合、決して通常のsudoを使ってはいけません。その場合は、gksudo (Kubuntuではkdesudo)を使うべきです。
gksudoは環境変数$HOMEを~rootに設定します。そして、.Xauthorityをtmpディレクトリにコピーします。これにより、あなたのホームディレクトリの所有者がrootに変わってしまうことを防ぎます
の理由により gksudo を使います。
※sudo gedit ・・・ とやってしまいがちですが gksudo gedit ・・・ とすべき
オフライン
気になって過去の他の投稿も検索してみました.
--set-selections との組み合わせでは sudo の使い方は「疑問手」なのが多いですね.
ack さん による投稿:
コード:
sudo sh -c "echo Ruby1.8 hold | dpkg --set-selections"
root 権限が必要なのは dpkg だけなので,
echo Ruby1.8 hold | sudo dpkg --set-selections
で充分です.
オフライン
einundzwanzighundertsechs による投稿:
root 権限が必要なのは dpkg だけなので,
echo Ruby1.8 hold | sudo dpkg --set-selections
で充分です.
仰るとおりです、今回はeinundzwanzighundertsechsさんの形がベストですね。
# やっちまった・・・
普段から少しずつ気をつけて、{正しい|シンプルでわかりやすい|無駄のない|安全な}使い方を共有できればと思います。
オフライン
sudoに関連するオペレーションに関する指摘は正しいのです、が……。
なんとなくそれ以前の(より重要な)問題として、「dpkg --set-selectionsする前には、必ずdpkg --get-selections <パッケージ名>をして現状を確認する」という手順が抜けているような気がします。
dpkg --set-selectionsによるhold操作を行う際は、できるだけ以下のようにしてください。
いきなり --set-selections するのは、パッケージ管理上かなりホラーです。
1) dpkg --get-selections <パッケージ名> を実行し、現状が「install」であることを確認する。
2) echo "<パッケージ名> hold" | sudo dpkg --set-selections を実行して hold する。
3) dpkg --get-selections <パッケージ名> を実行し、現状が「hold」であることを確認する。
この前提が守られていないと、「解除するときは echo "<パッケージ名> install" | sudo dpkg --set-selections」は成立せず、status に不正な情報を入れ込んでしまう結果になります。
# ダブルクォートはTab操作時などの安全確保の意味では、入れておいた方が自爆しないで済むはずです。
3) の操作時は、できれば diff -u /var/lib/dpkg/status-old /var/lib/dpkg/status も実行して、以下のような「install ok installd => hold ok installed」への変化も確認しておきましょう。
Package: zsh -Status: install ok installed +Status: hold ok installed Priority: optional Section: shells Installed-Size: 12696
さらにホラーな話として、以下のような罠があります。たぶんこれで合っている、はず。
・Synaptic・aptitudeによる「バージョン固定」操作は、update managerやaptitudeに対してのみ有効です。apt-get upgrade時には無視されます。
・dpkg --set-selections による hold は、apt-get updateにおいてのみ有効です。aptitude などからは無視されます。
ということで、この種のバージョン固定操作は混ぜるな危険です。常用しているパッケージマネージャごとに、適切な操作を行ってください。/etc/apt/preferencesにpin設定を行うことで共通して有効な設定も可能ですが、これはこれで副作用があるので、「混ぜるな危険」を意識して、自分の使うパッケージマネージャに即したものを選択してください。
オフライン