
Ubuntu日本語フォーラム

ログインしていません。
Catalinaさん による投稿:
ほぼ解決、といえるのかな・・・。 って感じです。
00_headerを差し替えれば「ほぼ」が取れるかもしれません。
パッケージに含まれるファイルを検索するには、apt-fileが便利です。
sudo apt-get install apt-file
apt-file search /etc/grub.d/00_header
結果は、grub-common: /etc/grub.d/00_headerが出力されますのでgrub-commonパッケージに00_headerがあるはずです。
オフライン
Catalina による投稿:
どこにどう記述するとそうなるのかがいまいちわかりませんでした。
なので、良くないこととはしりながら、/boot/gtub/grub.cfgを直接編集し、
insmod part_msdos
insmod ext2
set root='(hd0,msdos6)'
search --no-floppy --fs-uuid --set bf2140ed-801d-4386-99dd-b61d6698e1ed
if loadfont /usr/share/grub/unicode.pf2 ; then
insmod vbe #この行を追加
set gfxmode=1600x900
insmod gfxterm
としました。
これでvbeがロードされ、gfxermも正常に起動でき、背景も表示できました、
残る問題としては、update-grubを回すたびにこの追記処理が必要になることです。
確かに、sudo update-grub2を実行する度にファイルが書き換えられてしまうので良くないと思います。
ひょっとしたら画像の解像度の設定がおかしいかもしれないですね。
set gfxmode=1600x900
を書きこんで表示されるようになったあたりが怪しいと思います。
一度、/etc/grub.d/00_header と /etc/grub.d/05_debian_theme の中身を公表されてはいかがでしょうか?
ちょっとソースを見てみないと分からないと思います。
壁紙の設定のみであれば、/etc/grub.d/05_debian_theme の10行目の後方に表示させたい画像ファイル名を書き込み/etc/grub.d/00_headerの39行目の後方の数字を画面の解像度に設定する。
以上で大丈夫だと思います。
これらのファイルを弄りたくなければ、/etc/defaullt/grub を書き換えれば解像度の変更は出来るようです。
尚、表示画像の変更についてはどなたか書かれておられたように新たにテキストを書き込まないといけないようです。
その辺りは、私も此処の投稿にて知りました。
あと、/etc/grub.d/40_customへの書き込みについては知りませんでした。
私の場合は、チェインロードの設定のみでこういう使い方は初めて知りました。
他にも原因ややり方はあるかも知れませんが私の方で分かる範囲の事を纏めてみました。
オフライン
すみませんちょっと補足して起きます。
/etc/grub.d/00_header の39行目の数値は、GRUB2のカーネルの選択画面の解像度の設定で
/etc/defaullt/grub の23行目の数値はGRUBの壁紙の解像度のです。
オフライン
こんにちは。
検索してヒットした
http://grub.enbug.org/gfxterm
を読んでいると、gfxtermの動作にはvideo,vbeの二つのモジュールがロードされていることが条件のように読み取れました。
ちょっとだけ違います。gfxtermが要求するのは、video.modと、graphics-adapterとなるmodの2つです。graphics-adapterとして、vbe.mod(VESA汎用)を使用する場合が例として書かれています。
gfxtermを使うことを明示したい場合、/etc/default/grubに、
GRUB_TERMINAL=gfxterm
と定義(追記)すればよさそうなのですが、これはGRUB_TERMINALのデフォルト(省略したときの値)のため、解決しない可能性が高いです。明示した場合の利点は、有効にできなかった場合にメッセージが表示される可能性があることです。
内部的には、(どこかで)GRUB_VIDEO_BACKENDが定義されていない限りは、graphics-adapter候補としては、/usr/lib/grub/i386-pc/video.lst の中を列挙しているようです(この辺の処理も00_headerで行っています)
grub.cfgから推測する限りでは、以下のいずれかっぽく見えますので、確認してみてください。
・(どこかで)GRUB_VIDEO_BACKENDが空で定義されている。
・/usr/lib/grub/i386-pc/video.lst が空(か、vgaやvbeなどの基本的なものを含んでいない)。
※あくまでも、grub.cfgの内容だけで推測したものです。
なお、gfxtermのgraphics-adapterに特定のモジュールを使いたい場合、/etc/default/grubに、GRUB_VIDEO_BACKEND を定義してそこで指定するのが想定している方法のようです。
GRUB_VIDEO_BACKEND=vbe
(本来、必要ないはずのオプションなので、今回のケースに対する根本解決ではないです。grub.cfgを書き換えたり、grub.d配下を書き換える方法に対する方法の話になります。念のため。)
オフライン
前進してよかったです。
それで、既出の整理となってしまいますが、#25の「grub.cfg」を見ると「load_video」関数を呼び出す記述が書き込まれていない(抜けてしまっている)ようですので、jackalopeさんの仰られるように「00_header」ファイルの整合性が疑われます(該当する箇所は「cat」コマンドで書き出しているだけなので、抜けてしまうというのはおかしい)。まずはこれを確認してください。比較するときは「diff」コマンドが便利です。
それと、Catalinaさんの反応から察するに、grub.cfgのどこにも「insmod vbe」がなかったのではと思えますので、weykさんご指摘の「/usr/lib/grub/i386-pc/video.lst」および「/boot/grub/video.lst」も疑われます。
オフライン
しまった!間違っているかも。
環境はUbuntu 10.04からのアップグレードですね。
となると、「/etc/grub.d/」配下がUbuntu 10.04のそれなのだろうと思います。
ので、「00_helper」を差し替える前に下記の手順で確認してみてください。
1. まず、#7の手順で「grub-common」パッケージを展開してください。
2. そして、下記コマンドを実行してディレクトリ配下のファイルを比較してください。
diff hoge-dir/etc/grub.d/00_header /etc/grub.d/00_header diff hoge-dir/etc/grub.d/10_linux /etc/grub.d/10_linux
結果が下記のようになったなら10.04のファイル群であると断定できるかと思います。
00_header
1,2c1
< #! /bin/sh
< set -e
---
> #! /bin/sh -e
25c24,25
< locale_dir=`echo ${GRUB_PREFIX}/locale | sed ${transform}`
---
> grub_prefix=`echo /boot/grub | sed ${transform}`
> locale_dir=`echo /boot/grub/locale | sed ${transform}`
41,44d40
< if [ "x${GRUB_DEFAULT_BUTTON}" = "x" ] ; then GRUB_DEFAULT_BUTTON="$GRUB_DEFAULT" ; fi
< if [ "x${GRUB_DEFAULT_BUTTON}" = "xsaved" ] ; then GRUB_DEFAULT_BUTTON='${saved_entry}' ; fi
< if [ "x${GRUB_TIMEOUT_BUTTON}" = "x" ] ; then GRUB_TIMEOUT_BUTTON="$GRUB_TIMEOUT" ; fi
<
47d42
< set have_grubenv=true
50,60d44
< EOF
< if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ]; then
< cat <<EOF
< if cmostest $GRUB_BUTTON_CMOS_ADDRESS ; then
< set default="${GRUB_DEFAULT_BUTTON}"
< else
< set default="${GRUB_DEFAULT}"
< fi
< EOF
< else
< cat <<EOF
62,66c46,47
< EOF
< fi
< cat <<EOF
< if [ "\${prev_saved_entry}" ]; then
< set saved_entry="\${prev_saved_entry}"
---
> if [ \${prev_saved_entry} ]; then
> set saved_entry=\${prev_saved_entry}
74,75c55,56
< if [ -z "\${boot_once}" ]; then
< saved_entry="\${chosen}"
---
> if [ -z \${boot_once} ]; then
> saved_entry=\${chosen}
82,113c63
< if [ -n "\${have_grubenv}" ]; then if [ -z "\${boot_once}" ]; then save_env recordfail; fi; fi
< }
<
< function load_video {
< EOF
< if [ -n "${GRUB_VIDEO_BACKEND}" ]; then
< cat <<EOF
< insmod ${GRUB_VIDEO_BACKEND}
< EOF
< else
< # Insert all available backends; GRUB will use the most appropriate.
< for backend in $(cat "${GRUB_PREFIX}/video.lst"); do
< # video_bochs and video_cirrus require probing PCI space, and some
< # machines don't seem to like this. These are generally
< # non-essential at least for i386-pc, so disable them as a
< # short-term fix for Ubuntu 10.10.
< case "${backend}" in
< video_bochs|video_cirrus)
< cpu="$(uname -m)"
< case "${cpu}" in
< i[3456]86|x86_64)
< [ -d /sys/firmware/efi ] || continue
< ;;
< esac
< ;;
< esac
< cat <<EOF
< insmod ${backend}
< EOF
< done
< fi
< cat <<EOF
---
> if [ -n \${have_grubenv} ]; then if [ -z \${boot_once} ]; then save_env recordfail; fi; fi
115d64
<
118,131c67,70
< serial=0;
< gfxterm=0;
< for x in ${GRUB_TERMINAL_INPUT} ${GRUB_TERMINAL_OUTPUT}; do
< if [ xserial = "x$x" ]; then
< serial=1;
< fi
< if [ xgfxterm = "x$x" ]; then
< gfxterm=1;
< fi
< done
<
< if [ "x$serial" = x1 ]; then
< if ! test -e ${GRUB_PREFIX}/serial.mod ; then
< echo "Serial terminal not available on this platform." >&2 ; exit 1
---
> case ${GRUB_TERMINAL_INPUT}:${GRUB_TERMINAL_OUTPUT} in
> serial:* | *:serial)
> if ! test -e ${grub_prefix}/serial.mod ; then
> echo "Serial terminal not available on this platform." >&2 ; exit 1
135,136c74,75
< grub_warn "Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default parameters will be used."
< GRUB_SERIAL_COMMAND=serial
---
> grub_warn "Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default parameters will be used."
> GRUB_SERIAL_COMMAND=serial
139,152c78,79
< fi
<
< if [ "x$gfxterm" = x1 ]; then
< # Make the font accessible
< prepare_grub_to_access_device `${grub_probe} --target=device "${GRUB_FONT_PATH}"`
<
< cat << EOF
< if loadfont `make_system_path_relative_to_its_root "${GRUB_FONT_PATH}"` ; then
< set gfxmode=${GRUB_GFXMODE}
< load_video
< insmod gfxterm
< fi
< EOF
< fi
---
> ;;
> esac
160c87,91
< terminal_input ${GRUB_TERMINAL_INPUT}
---
> if terminal_input ${GRUB_TERMINAL_INPUT} ; then true ; else
> # For backward compatibility with versions of terminal.mod that don't
> # understand terminal_input
> terminal ${GRUB_TERMINAL_INPUT}
> fi
165a97,125
> xgfxterm)
> # Make the font accessible
> prepare_grub_to_access_device `${grub_probe} --target=device ${GRUB_FONT_PATH}`
>
> cat << EOF
> if loadfont `make_system_path_relative_to_its_root ${GRUB_FONT_PATH}` ; then
> set gfxmode=${GRUB_GFXMODE}
> insmod gfxterm
> insmod ${GRUB_VIDEO_BACKEND}
> if terminal_output gfxterm ; then true ; else
> # For backward compatibility with versions of terminal.mod that don't
> # understand terminal_output
> terminal gfxterm
> fi
> EOF
> if [ x$GRUB_THEME != x ] && [ -f $GRUB_THEME ] \
> && is_path_readable_by_grub $GRUB_THEME; then
> echo "Found theme: $GRUB_THEME" >&2
> prepare_grub_to_access_device `${grub_probe} --target=device $GRUB_THEME` | sed -e "s/^/ /"
> cat << EOF
> insmod gfxmenu
> set theme=(\$root)`make_system_path_relative_to_its_root $GRUB_THEME`
> set menuviewer=gfxmenu
> EOF
> fi
> cat << EOF
> fi
> EOF
> ;;
171c131,135
< terminal_output ${GRUB_TERMINAL_OUTPUT}
---
> if terminal_output ${GRUB_TERMINAL_OUTPUT} ; then true ; else
> # For backward compatibility with versions of terminal.mod that don't
> # understand terminal_output
> terminal ${GRUB_TERMINAL_OUTPUT}
> fi
176,227d139
< if [ "x$gfxterm" = x1 ]; then
< if [ "x$GRUB_THEME" != x ] && [ -f "$GRUB_THEME" ] \
< && is_path_readable_by_grub "$GRUB_THEME"; then
< echo "Found theme: $GRUB_THEME" >&2
< prepare_grub_to_access_device `${grub_probe} --target=device "$GRUB_THEME"`
< cat << EOF
< insmod gfxmenu
< EOF
< themedir="`dirname "$GRUB_THEME"`"
< for x in "$themedir"/*.pf2 "$themedir"/f/*.pf2; do
< if [ -f "$x" ]; then
< cat << EOF
< loadfont (\$root)`make_system_path_relative_to_its_root $x`
< EOF
< fi
< done
< if [ x"`echo "$themedir"/*.jpg`" != x"$themedir/*.jpg" ] || [ x"`echo "$themedir"/*.jpeg`" != x"$themedir/*.jpeg" ]; then
< cat << EOF
< insmod jpeg
< EOF
< fi
< if [ x"`echo "$themedir"/*.png`" != x"$themedir/*.png" ]; then
< cat << EOF
< insmod png
< EOF
< fi
< if [ x"`echo "$themedir"/*.tga`" != x"$themedir/*.tga" ]; then
< cat << EOF
< insmod tga
< EOF
< fi
<
< cat << EOF
< set theme=(\$root)`make_system_path_relative_to_its_root $GRUB_THEME`
< EOF
< elif [ "x$GRUB_BACKGROUND" != x ] && [ -f "$GRUB_BACKGROUND" ] \
< && is_path_readable_by_grub "$GRUB_BACKGROUND"; then
< echo "Found background: $GRUB_BACKGROUND" >&2
< case "$GRUB_BACKGROUND" in
< *.png) reader=png ;;
< *.tga) reader=tga ;;
< *.jpg|*.jpeg) reader=jpeg ;;
< *) echo "Unsupported image format" >&2; exit 1 ;;
< esac
< prepare_grub_to_access_device `${grub_probe} --target=device "$GRUB_BACKGROUND"`
< cat << EOF
< insmod $reader
< background_image -m stretch `make_system_path_relative_to_its_root "$GRUB_BACKGROUND"`
< EOF
< fi
< fi
<
229c141
< if [ "x${LANG}" != "xC" ] && [ -d "${locale_dir}" ] ; then
---
> if [ "x${LANG}" != "xC" ] ; then
238,241c150,151
< make_timeout ()
< {
< cat << EOF
< if [ "\${recordfail}" = 1 ]; then
---
> cat << EOF
> if [ \${recordfail} = 1 ]; then
244c154
< set timeout=${2}
---
> set timeout=${GRUB_TIMEOUT}
247,259d156
< }
<
< if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ]; then
< cat <<EOF
< if cmostest $GRUB_BUTTON_CMOS_ADDRESS ; then
< EOF
< make_timeout "${GRUB_HIDDEN_TIMEOUT_BUTTON}" "${GRUB_TIMEOUT_BUTTON}"
< echo else
< make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}"
< echo fi
< else
< make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}"
< fi
263,267c160,163
< echo "play ${GRUB_INIT_TUNE}"
< fi
<
< if [ "x${GRUB_BADRAM}" != "x" ] ; then
< echo "badram ${GRUB_BADRAM}"
---
> cat << EOF
> insmod play
> play ${GRUB_INIT_TUNE}
> EOF10_linux
1,2c1
< #! /bin/sh
< set -e
---
> #! /bin/sh -e
27c26
< export TEXTDOMAINDIR=${prefix}/share/locale
---
> export TEXTDOMAINDIR=@LOCALEDIR@
53c52
< || uses_abstraction "${GRUB_DEVICE}" lvm; then
---
> || [ "`grub-probe -t abstraction --device ${GRUB_DEVICE} | sed -e 's,.*\(lvm\).*,\1,'`" = "lvm" ] ; then
81,82d79
< # Use ELILO's generic "efifb" when it's known to be available.
< # FIXME: We need an interface to select vesafb in case efifb can't be used.
116,117c113,126
< list=`for i in /boot/vmlinu[zx]-* /vmlinu[zx]-* ; do
< if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
---
> blacklisted_kernel() {
> local r=""
> case "${1}" in
> *-ec2) r="linux-ec2";; # LP: #671097
> esac
> [ -n "${r}" ] && { echo "Skipping linux image [$r]: ${1}" >&2; return 0; }
> return 1;
> }
>
> list=`for i in /boot/vmlinu[xz]-* /vmlinu[xz]-* ; do
> if grub_file_is_not_garbage "$i" &&
> ! blacklisted_kernel "$i"; then
> echo -n "$i ";
> fi
133,135c142,143
< "initrd-${version}" "initramfs-${version}.img" \
< "initrd.img-${alt_version}" "initrd-${alt_version}.img" \
< "initrd-${alt_version}" "initramfs-${alt_version}.img"; do
---
> "initrd-${version}" "initrd.img-${alt_version}" \
> "initrd-${alt_version}.img" "initrd-${alt_version}"; doもし、これが確認されるようでしたら、確認と解決すべき方法はweykさんの投稿されたもの(「video.lst」と「GRUB_VIDEO_BACKEND」)となります。そして、背景画などの設定は今まで通りUbuntu 10.04方式で。
上記が違っていた場合は「00_helper」の確認で良いでしょう。
オフライン
Templerさん による投稿:
環境はUbuntu 10.04からのアップグレードですね。
となると、「/etc/grub.d/」配下がUbuntu 10.04のそれなのだろうと思います。
これはアップグレード操作での仕様なのかな?
/usr/sbin/grub-mkconfigが10.10にアップグレードされて/etc/grub.d/以下が10.04のままではgrub-updateで不具合が起きても不思議ではないような。。。
#12ではimageファイルは見つかっていないのにinsmod vbeだけでなぜimageファイルが表示されたのでしょうかね。
オフライン
こんばんわ。CatalinaさんのノートパソコンlenovoのT510の場合カスタム設定が必要に思われます。
/etc/grub.d/40_customを
#!/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above. # BEGIN Lenovo Graphics Settings loadfont (hd0,6)/usr/share/grub/unicode.pf2 set gfxterm_font="20" insmod 915resolution 915resolution 5c 1366 768 set gfxmode="1366x768x32" set gfxpayload="1366x768x32" insmod gfxterm insmod vbe insmod tga background_image (hd0,6)/usr/share/images/grub/hogehoge terminal_output gfxterm # END Acer Graphics Settings
/etc/default/grubを
# If you change this file, run 'update-grub' afterwards to update # /boot/grub/grub.cfg. GRUB_DEFAULT=0 #GRUB_HIDDEN_TIMEOUT=0 #GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT=10 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="quiet splash mem=2900mb" # The resolution used on graphical terminal # note that you can use only modes which your graphic card supports via VBE # you can see them in real GRUB with the command `vbeinfo' GRUB_GFXMODE=1366x768 # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux #GRUB_DISABLE_LINUX_UUID=true # Uncomment to disable generation of recovery mode menu entries #GRUB_DISABLE_LINUX_RECOVERY="true" # Uncomment to get a beep at grub start #GRUB_INIT_TUNE="480 440 1"
に書き換えて、
$ sudo update-grub2 $ sudo reboot
すればOKではないでしょうか?
オフライン
こんばんわ。
/etc/grub.d/40_customの
background_image (hd0,6)/usr/share/images/grub/hogehoge
のhogehoge所は
$ convert hogehoge.png hogehoge.tga
のようにしてhogehoge.tgaにしておくと良いと思います。
それと画面の解像度もパソコンのスペックに応じて適宜変えるべきでしょう。
オフライン
質問者のいないところで様々なアプローチの投稿を重ねると混乱の基になりかねないので、投稿を控えようかと思ったのですが…。
jackalope による投稿:
Templerさん による投稿:
環境はUbuntu 10.04からのアップグレードですね。
となると、「/etc/grub.d/」配下がUbuntu 10.04のそれなのだろうと思います。これはアップグレード操作での仕様なのかな?
/usr/sbin/grub-mkconfigが10.10にアップグレードされて/etc/grub.d/以下が10.04のままではgrub-updateで不具合が起きても不思議ではないような。。。
あまり深いところ(grub-mkconfig)まで見ていなかったのですが、この条件だと再現性有りまくりのようですね(実際に試してみたところ、やはり件の現象が再現されました)。これで仕様なのだとすると、もっとずっと前にこのトピックが立ち上がっていてもおかしくない(というか大騒ぎになってもおかしくない)ので、ディストリビューションアップグレード時の処理にgrub.d配下を入れ替える仕組みがあるということでしょうか?
もしそうであれば、Catalinaさんからの結果報告次第では、そもそもアップグレードに失敗している、もしくはgrub-customizerが悪さをした?ということになるのでしょうか。
私のところにはアップグレード環境がないので、アップグレード環境を使用されている方の情報とサポートを求めたいところです。
オフライン
ぁぁぁ。conffileの仕様を把握できてなかったということですかね。
conffileは弄られていたら更新されず、弄られていなかったら更新するという仕様でしょうか。
となると、件の現象は「00_header」がUbuntu 10.04のものだと再現するようですので、10.04の時に同ファイルが弄られていたということに?
オフライン
debパッケージの仕組みは分かりませんが10.04から10.10へのアップグレードが引き金になったのは確かなようです。
「ほぼ解決」で質問者はもう見ていないようなので真相は不明になりそうです。
オフライン
こんにちは。catalinaです。返信が遅くなりまして申し訳ございませんでした。
>jackalopeさん
00_headerを取り出そうと思い、grub-commonパッケージを展開しようとしたのですが、このパッケージのdebファイルが見当たりませんでした。
dpkg -l |grep grub の結果
ii grub-common 1.98+20100804-5ubuntu3 GRand Unified Bootloader, version 2 (common files)
ii grub-customizer 2.1.1-0ubuntu1~ppa1m Grub Customizer - A graphical Grub2/BURG configuration application
ii grub-pc 1.98+20100804-5ubuntu3 GRand Unified Bootloader, version 2 (PC/BIOS version)
ii grub2-splashimages 1.0.1 a collection of great GRUB2 splashimages
間違いなく入ってると思うのですが、debだけ無いのですよね。 dpkg -x で00_headerを取り出すにはどうしたらよいのでしょう?
grub2のインストールはaptitudeを使ってやっていますので、grub-commonはaptitudeが入れてくれたものだと思います。
となるとdebファイルがcacheされているだろうと /var/cache/apt/archives/ を探してみましたが、見つかりませんでした。
仮想パッケージとか、そういう特殊なパッケージに該当するのでしょうか。パッケージマネージャの仕様もしっかり理解していない為、
やや的外れなことをしているかもしれません。(私が
>tncさん
私の投稿#25を見ていただいてのレスだと思います。
>set gfxmode=1600x900
>を書きこんで表示されるようになったあたりが怪しいと思います。
と、いうことですが、私が書き込んだのは
insmod vbe
の1行です。
分かりにくくて申し訳なかったです。
>jackalopeさん
/etc/grub.d/ の中のファイル群は10.04から10.10にアップグレードした際に書き変わらなければ
ならなかったのに書き変わらなかった ということなのでしょうか?
如何せん10.04の環境が他になかったので確認はできませんでしたが、今のファイルの日付を載せておきます(これでわかるといいのですが)
grub-mkconfigのタイムスタンプは以下のようになっています。
-rwxr-xr-x 1 root root 7957 2010-10-06 21:23 /usr/sbin/grub-mkconfig
>Templerさん
>もっと前にこのトピックが~
実はこの問題が起こったのは10.10が正式リリースされた直後です。なので2010年の10月末ごろですかね。
問題の性質(grubの機能はあくまでもブートローダーなので)が緊急性を欠いたことと、その予想難易度が
今の自分にちょうどいいものの様に思えたこと、この2点から先日まで投稿せず自力で色々やっていました。
情報共有のためにもうちょっと早く投稿しておくべきだったですね。反省。
>もしくはgrub-customizerが悪さをした?
grub-customizerを導入したのは本問題が発生した後、すなわち10.10になってからのことです。
10.04 >> 10.10 のバージョンアップの過程でおかしくなったのだとしたら、grub-customizerはシロだと考えます。
余談ですが、実際grub-customizerは便利です。小さなバグはあるものの、本来複数のファイルを編集せねばならない変更も
GUIで手早く済ませることができます。
>conffileを弄ったか?
これはもう完全に是です。確実に弄っていたと思います。背景の設定以外にも、grub2の様々な機能を試すために
色々触ったと記憶しています。mdraidデバイスから起動できるとかUUID使わない様にするとか、
その辺の変更を色々したように思います。
仕様を満足に調べもせず、とりあえず設定変更して動かしてみて、どうなったかを見てみようという
子供みたいな触り方をしていた罰でしょうかね(ぉ
オフライン
>jackalopeさん
ほんとすみません、見てはいたのですがとりあえず成果が出たことで力が抜けてしまって・・・。
とりあえず00_headerを元に戻して、update-grubを回しても設定が反映される、
完全な解決を目指して頑張ります。
どうぞ宜しくお願いします。
オフライン
Catalina による投稿:
>もっと前にこのトピックが~
実はこの問題が起こったのは10.10が正式リリースされた直後です。なので2010年の10月末ごろですかね。
問題の性質(grubの機能はあくまでもブートローダーなので)が緊急性を欠いたことと、その予想難易度が
今の自分にちょうどいいものの様に思えたこと、この2点から先日まで投稿せず自力で色々やっていました。
情報共有のためにもうちょっと早く投稿しておくべきだったですね。反省。
ああ、いえ、「もっと前にこのトピックが~」はCatalinaさんに限らずの意なので、お気になさらず。
(余談: ちなみに私もGRUBはただの通過点程度にしか思っていませんので、明示的にTERMINALをconsoleにしてGRUBの起動を速くするようにしてたりします)
本題。
「/var/cache/apt/archives/」配下はcleanすると消えますので、#7にもありますがhttp://packages.ubuntu.com/ja/で検索してダウンロードしてください。Distribution:を「すべて」にして検索すると全てのUbuntuのバージョンで検索した結果が返ります。
ダウンロードして展開したら#31の方法でファイルの比較を行なってみてください。比較した結果が#31のように大きな差分となって返ってくるようであれば10.04から更新されていないということになるかと思います。(ついでにUbuntu 10.04ので比較してみるのもおもしろいかもしれません)
入れ替えたあとは、ファイルの整合性(ハッシュ値)を「dpkg --status パッケージ名」と「md5sum ファイル名」(「md5sum /etc/grub.d/*」でも可)コマンドで確認してください。
以下は10.04環境での例です。
$ dpkg --status grub-common
Package: grub-common
Status: install ok installed
Priority: optional
Section: admin
Installed-Size: 4220
Maintainer: Ubuntu Developers <[email protected]>
Architecture: i386
Source: grub2
Version: 1.98-1ubuntu10
Replaces: grub-coreboot (<< 1.97+20091114-1), grub-efi (<< 1.96+20080831-1), grub-ieee1275 (<< 1.96+20080831-1), grub-linuxbios (<< 1.96+20080831-1), grub-pc (<< 1.97+20091114-1)
Depends: base-files (>= 4.0.1~), dpkg (>= 1.15.4) | install-info | dpkg (<= 1.14.25), lsb-base (>= 3.0-6), libc6 (>= 2.8), libdevmapper1.02.1 (>= 2:1.02.20), libfreetype6 (>= 2.2.1), zlib1g (>= 1:1.1.4), gettext-base
Recommends: os-prober (>= 1.33)
Suggests: multiboot-doc, grub-emu
Conflicts: grub-doc (<< 0.97-29ubuntu60), grub-legacy-doc (<< 0.97-29ubuntu60), mdadm (<< 2.6.7-2)
Conffiles:
/etc/pm/sleep.d/10_grub-common bc63b0c6613e95979446d17a88875d6a
/etc/grub.d/00_header db2fbce0c4b11001e4fbdb23aee57647
/etc/grub.d/30_os-prober 235cb43f280c29557f0f24a1e8163457
/etc/grub.d/40_custom babe7de352fe18de5a238569cf4b8a11
/etc/grub.d/10_linux 937011830d392bdfd235232848263d94
/etc/grub.d/README be58f42dfe74feb6eeb98c6a843c743f
/etc/init.d/grub-common f5078cf9df66751dec9ae8f7baf4a0c2
Description: GRand Unified Bootloader, version 2 (common files)
This package contains common files shared by the distinct flavours of GRUB.
Homepage: http://www.gnu.org/software/grub/grub-2.en.html
Original-Maintainer: GRUB Maintainers <[email protected]>
$ md5sum /etc/grub.d/00_header
db2fbce0c4b11001e4fbdb23aee57647 /etc/grub.d/00_header
ハッシュ値が「db2fbce0c4b11001e4fbdb23aee57647」で一致しています。
これの崩れているファイルが更新対象から外されるのでしょう。
オフライン
Catalinaさん による投稿:
00_headerを取り出そうと思い、grub-commonパッケージを展開しようとしたのですが.....dpkg -x で00_headerを取り出すにはどうしたらよいのでしょう?
cacheになければダウンロードしましょう。
cd ~ aptitude download grub-common dpkg-deb -x grub-common_1.98+20100804-5ubuntu3_i386.deb ./tmp
以上で、~/tmp/etc/grub.d/に目的のファイルが展開されます。
Catalinaさん による投稿:
/etc/grub.d/ の中のファイル群は10.04から10.10にアップグレードした際に書き変わらなければ
ならなかったのに書き変わらなかった ということなのでしょうか?
如何せん10.04の環境が他になかったので確認はできませんでしたが、今のファイルの日付を載せておきます(これでわかるといいのですが)
grub-mkconfigのタイムスタンプは以下のようになっています。
システム内のファイルとdebパッケージを展開したファイルを比べれば分かります。
grub-mkconfigの日付などは私の10.10の物と同じです。
オフライン
10.04から10.10へのアップデートを以下の手順で試してみました。
1.10.04のmini.isoのインストーラーで最小インストール
2.05_debian_themeとaptlineを10.10に変更
3.aptitude update
4.aptitude full-upgrade
upgradeの途中でgrubに関する設定。
1./etc/grub.d/05_debian_themeが変更されているのをそのままにするか、新しい物にするかの選択でデフォルトはそのままです。
2.grub-pcパッケージの設定で、/etc/default/grubの取扱いでデフォルトはそのまま。
3./usr/sbin/grub-mkconfigは設定に関する入力は求められない。
05_debian_themeは変更せず、grubは変更の設定でアップグレードされたシステムで問題なく背景が表示されました。
今回の問題はupgradeの途中でgrubに関する設定の選択を作業者が間違った可能性が高いと思います。
趣味で使っていて、特に設定をいろいろ変えている場合でディストリビューションを変える時はupgradeは止めたほうが無難でしょう。
オフライン
こんにちは。catalinaです。
今度こそ解決したようです!!
#31でTemplerさんから指摘された点をまず調べました。そうしたらまさにその通りで、/etc/grub.d/00_headerは10.04のものでした。
>もし、これが確認されるようでしたら、確認と解決すべき方法はweykさんの投稿されたもの(「video.lst」と「GRUB_VIDEO_BACKEND」)となります。
ということでしたので、weykさんの投稿を参考に /etc/default/grub に GRUB_VIDEO_BACKEND=vbe を定義してから
update-grubを回してみました。 すると
insmod part_msdos
insmod ext2
set root='(hd0,msdos6)'
search --no-floppy --fs-uuid --set bf2140ed-801d-4386-99dd-b61d6698e1ed
if loadfont /usr/share/grub/unicode.pf2 ; then
set gfxmode=1600x900
insmod gfxterm
insmod vbe
if terminal_output gfxterm ; then true ; else
新しく生成された /boot/grub/grub/cfg 内に上記のように insmod vbe が増えておりました。
#私が手で追記していた場所と、奇しくも近い場所でした
何度か試しましたが、これでupdate-grubを回してもcfgを編集する必要もなく、背景の表示も問題なくできるようになりました。
同種のトラブルがあまり報告されていないことを考えると、jackalopeさんがおっしゃるように私の稚拙な操作が原因だったのでしょうね。
#10.04 >> 10.10 のupgradeの際、たしかにgrubに関することをなにか聞かれたような気がしますがdefaultで通しました・・・
upgradeの際は気をつけるようにいたします。
皆様どうもありがとうございました。
オフライン
/etc/grub.d/以下のファイル(ただし、*_customは除く)と、grub-mkconfigは、ものすごく密接に関連していて、異なるバージョンのものが混在するのは非常にまずいと思われます。
(conffilesに含まれるので、アップデート/アップグレードの際はユーザ変更が残す確認が出ますが、十中八九、提供されるファイルで上書きする必要があるはず。そうしない場合、関連するすべてのファイル(grub-mkconfigとそこから呼ばれるスクリプト全て)を確認してまわって、正しく動作するかを自身で確認する必要があります。)
jackalope さんの書かれている方法で、まずは関連するファイル(/etc/grub.d/*)を10.10に統一することをお勧めします。
(私の行った)調査は、あくまでも、graphics-driversの動作のみしか見ていません。が、grubはその機能のなかで、より重要な(クリティカルな)ことも行っていますから、あらかじめ、起動できるうちに手を打っておくのが良いかと思います(もし、それでミスして起動できなくなったとしても、事前に準備して挑めますから。ある日突然、起動がうまく行かなくなってから、行うよりもリスクが低い・・・・ようなきがします。まぁ、いじらなくても起動できなくなることが無ければ、それに越したことは無いんですが)
蛇足。
10.04と10.10の間で、grub2の内部でのgraphics-driversの値の持ちまわしが変わったんですね。
10.04のころは、grub-mkconfigにてGRUB_VIDEO_BACKENDが未定義の場合はvideo.listをGRUB_VIDEO_BACKENDへと設定し、00_headerでは常にGRUB_VIDEO_BACKENDを使えば良いという形。
10.10になって、grub-mkconfig内では存在のチェックのみとどめて、00_header内であらためてGRUB_VIDEO_BACKENDが在ればその値を、無ければvideo.lstを展開して設定するという形。
そのため、10.10のgrub-mkconfig(graphics-driversの選択は00_headerで行う前提)と、10.04の00_header(graphics-driversの選択はgrub-mkconfigで調整済みで GRUB_VIDEO_BACKENDに設定済みの前提)とを組み合わせると、video.lstから展開する必要があるケースでは、どこでも選択されずに隙間を抜けてしまう と。
オフライン
ごめんなさい。#40は誤解を招くような投稿内容だったようで申し訳ないです。#31の方法で行なって欲しかったのは比較のみで、対処のほうは新しいものへの入れ替えです。
conffileは一応はシステム管理者による変更を許容する方向のものですので(なので立ち上がるダイアログのデフォルトが「keep your currently-installed version」。下記参照)、ある程度は互換性も考慮されてはいると思う(思いたい)のですが、しかし件のファイルはスクリプトなのでユーザーの弄り度合によっては簡単に互換性も崩れてしまうわけで、しかもCatalinaさんはその変更内容を把握されていないわけですから、そのままにしておくというのは気持ち悪いです。weykさんご指摘の性質上の怖さというのもありますし。
(この手のダイアログが立ち上がったときは基本はメンテナーのバージョンに置き換えてから再度修正を加える手でしょう)
なので、入れ替えとハッシュチェック(#40参照)をしたほうが良いかと思います。
正規のバージョンのものに入れ替えたなら、トピック序盤にあった「/etc/default/grub」への「GRUB_BACKGROUND」の追加で背景画の設定も問題なくなるはずです。
(余談: jackalopeさんの投稿を見て、色々と思い出してきました。「変更されているのをそのままにするか、新しい物にするかの選択」とはこれですね)
Configuration file `/path/to/file' ==> File on system created by you or by a script. ==> File also in package provided by package maintainer. What would you like to do about it ? Your options are: Y or I : install the package maintainer's version N or O : keep your currently-installed version D : show the differences between the versions Z : background this process to examine the situation The default action is to keep your current version. *** hogehoge (Y/I/N/O/D/Z) [default=N] ?
オフライン
こんにちは。catalinaです。
osのバージョンと、ブートローダであるはずのgrubと、なんの関係あるのだろう?と不思議で、
質問しようと思い文章に起こしていたらようやく理解できました。
weykさんありがとうございます。非常によくわかりました。
/etc/grub.d/ 以下のファイルもすべて置き換え、画像の指定は
/etc/default/grub に GRUB_BACKGROUND="/boot/grub/hogehgoe"
と追記する方法(10.10方式?)で正常に動作するようになりました。update-grubを回した際にも
Found background: /boot/grub/hogehoge
がしっかり表示されます。
原因はupgradeの際の操作ミスかな、と思います。Templerさんやjackalopeさんが言われている様に、しっかりと
上書きしておけばこうはならなかったわけですから。
そろそろ1104もみえてきたので、次こそ問題のないように気をつけて臨みたいと思います。
皆様ありがとうございました。
オフライン
#21に記述しましたが、Ubuntu11.04Amd64で実行結果
下記環境のもとで、#5 STGSAGWANさんの推奨される方法で実行してみました。
結果は、実に簡単Ubuntu9.10と比較し、デスクトップが表示されるまで、1枚の画像で済むし大変楽でした。
記
Ubuntu10.10Amd64:内蔵SATA30GB SSD
WindowsXp 64Bit:内蔵 SATA 128GB SSD
Ubuntu11.04Amd64:USB 8GB SSD(今回このGRUBのメニューに背景画をいれてみた)
動作はメニューでOS選択後9.10の時は即背景画が消去され、ディスクトップが表示されるまでにさらに、もう一枚の画像を
挿入していましたが、11.04では背景画はそのまま表示をつづけ、ディスクトップが表示される数秒まえまで維持し若干画像
が乱れた後に直ぐディスクトップが表示されます。
/etc/grub.d/のファイル群は10.10と比較し変更されています。
ファイルを編集したのは /etc/grub.d/05_debian_themeのみです。
参考に当方の/etc/grub.d/05_debian_themeを提示しておきます。
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480←矢印このままだとモニタの表示可能な最大解像度で表示され、文字が小さくなり判読しがたくなる。
GRUB_GFXMODE=800x600
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_LINUX_RECOVERY="true"
#GRUB_BACKGROUND=/usr/share/images/grub/050817-N-3488C-028.tga#サイズ640X480ファイル名は大文字、小文字が区別される
GRUB_BACKGROUND=/home/uotora/1920-1200.jpg #サイズ1920x1200
# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"
オフライン