Page 2 of 58 FirstFirst 12341252 ... LastLast
Results 11 to 20 of 580

Thread: How to have a custom Grub2 menu that is maintenance free

  1. #11
    Join Date
    Aug 2009
    Beans
    Hidden!
    Distro
    Xubuntu

    Re: How to have a custom Grub2 menu that is maintenance free

    Quote Originally Posted by bogan View Post
    Hi!, Cavsfan,

    Thanks for your response, Post #7, for some reason my subscription advisory did not pick it up.

    In Quantal with grub 2.00 and Grub Customizer 3, the 'old command' showed exactly what was displayed on the screen, apart from the first three odd extra bits.

    Weirdly, the 'new command', you suggested, shows not only what is displayed, but in addition, it shows the entries complete with part of the script for each:
    Code:
    alan@alan-MS-7616:~$ grep -e "menuentry " -e "submenu" /boot/grub/grub.cfg | sed 's/^[ \t]*//' | cut -d "'" -f1,2 | nl --starting-line-number=0
         0    menuentry "Ubuntu  3.5.0-18 Linux 12.1 (on sda10)" --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-b5aab3a2-0086-4a12-9276-46bb5a615038
         1    menuentry "Memory test (memtest86+)" {
         2    menuentry "Ubuntu 12.10 (12.10)" --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-cee38717-6980-4485-a047-124edb4d5a23
         3    menuentry "Ubuntu Quantel (12.10) on USB" --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-7608b1e5-b5ea-4563-ad94-8cf496b9f95f
         4    menuentry "Ubuntu 3.5.0-18 (12.10) on sdb7 External" --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-7608b1e5-b5ea-4563-ad94-8cf496b9f95f
         5    menuentry "Windows 7 (loader) (on /dev/sda1)" --class windows --class os $menuentry_id_option 'osprober-chain-CC9240F39240E394
         6    menuentry "Ubuntu 3.2.0-33pae (12.04.1) ( on sda5)" --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-a8ecbe4f-fc2d-40a1-b261-1b62d74e7130
    alan@alan-MS-7616:~$
    Line 2 is actually the entry for the USB OS and line 3, labelled 'USB', is actually a duplicate of the sda5 entry line6, which is very confusing.

    I have had this problem of duplicate entries for some time and Posted about it but got no response; Grub customizer adds them on Saving the configuration.

    As far as I can see, to use your system, I would need to start with virgin installations of all the OSs, none of them having run Grub Customizer, as the duplicates get copied from one OS to another by update-grub.

    Chao!, bogan.
    Hi bogan!

    It's likely to be your /etc/fstab that is causing the multiple entries.
    I mention this in 1.7 of the wiki.
    In terminal enter sudo blkid to get your paritions and UUIDs.

    In my case I just have an ext4 partition mounted at / and a swap file for each system so only 2 entries appear in my fstab.

    Code:
    cavsfan@cavsfan-desktop:~$ cat /etc/fstab
    # /etc/fstab: static file system information.
    #
    # Use 'blkid -o value -s UUID' to print the universally unique identifier
    # for a device; this may be used with UUID= as a more robust way to name
    # devices that works even if disks are added and removed. See fstab(5).
    #
    # <file system> <mount point>   <type>  <options>       <dump>  <pass>
    proc            /proc           proc    nodev,noexec,nosuid 0       0
    # / was on /dev/sda2 during installation
    UUID=a162dc8a-e4df-4b79-b4c3-524761ff7ae1 /               ext4    errors=remount-ro 0       1
    # swap was on /dev/sda3 during installation
    UUID=2a80f59e-e7c3-418e-aab2-ab5d19255a2f none            swap    sw              0       0
    Just make sure your fstab is correct according to blkid.

    If you want copies of all of the grub files I can give them to you. Just let me know what Ubuntu you need it for.
    It looks like Quantal Quetzal 12.10 is that correct. No use doing a total install just to get new grub files.

    I installed the 3 Ubuntus I have again just to keep the grub files untouched in case someone needed them like you.

    I will login to my generic Quantal install and post copies of all the grub files and you can just copy and paste them into the contents of your grub files.
    That should allow you to "start over".

  2. #12
    Join Date
    Feb 2010
    Location
    Nr BrandsHatch, S'oaks UK
    Beans
    1,241
    Distro
    Lubuntu 13.04 Raring Ringtail

    Re: How to have a custom Grub2 menu that is maintenance free

    Hi!, Cavsfan,

    Thanks again. I am not sure what to look for in /etc/fstab, it looks much like yours except there is a entry for /home, and for some reason it also lists the Swap from the 12.10 USB, but not the one from 12.10 sdb7 [perhaps the later was not mounted].
    Code:
    alan@alan-MS-7616:~$ cat /etc/fstab
    # /etc/fstab: static file system information.
    #
    [Text deleted]
    #
    # <file system> <mount point>   <type>  <options>       <dump>  <pass>
    # / was on /dev/sda10 during installation
    UUID=b5aab3a2-0086-4a12-9276-46bb5a615038 /               ext4    errors=remount-ro 0       1
    # /home was on /dev/sda11 during installation
    UUID=adc771a1-313c-47ae-8725-3c89b89bbfa2 /home           ext4    defaults        0       2
    # swap was on /dev/sda6 during installation
    UUID=a74af1d9-f7f9-4453-97e7-b9e3f370dca4 none            swap    sw              0       0
    # swap was on /dev/sdb3 during installation
    UUID=9a74bb15-1215-4774-8419-f2908ee62d2e none            swap    sw              0       0
    alan@alan-MS-7616:~$
    I have one virgin 12.10 installation in which I deliberately did not run Grub Customizer, so it would be 12.04.1 for which I might need the grub files.

    Presumably I will need to replace the files in all the other installations, as they interact; as well as deleting all the Grub Customizer files.

    Chao!, bogan.
    "Better Solutions may bring Worsened Problems": After Lao Tse, b. circa 405BC. a contemporary of Confucius, who died circa 600BC.
    They did things differently in those days, apparently!!

  3. #13
    Join Date
    Aug 2009
    Beans
    Hidden!
    Distro
    Xubuntu

    Re: How to have a custom Grub2 menu that is maintenance free

    Here is how the original grub files as in /etc/grub.d/ appear:
    Code:
    cavsfan@cavsfan-MS-7529:~$ cd /etc/grub.d/
    cavsfan@cavsfan-MS-7529:/etc/grub.d$ ls -l
    total 72
    -rwxr-xr-x 1 root root  7541 Oct 14 13:36 00_header
    -rwxr-xr-x 1 root root  5488 Oct  4 05:30 05_debian_theme
    -rwxr-xr-x 1 root root 10891 Oct 14 13:36 10_linux
    -rwxr-xr-x 1 root root 10258 Oct 14 13:36 20_linux_xen
    -rwxr-xr-x 1 root root  1688 Oct 11 10:10 20_memtest86+
    -rwxr-xr-x 1 root root 10976 Oct 14 13:36 30_os-prober
    -rwxr-xr-x 1 root root  1426 Oct 14 13:36 30_uefi-firmware
    -rwxr-xr-x 1 root root   214 Oct 14 13:36 40_custom
    -rwxr-xr-x 1 root root   216 Oct 14 13:36 41_custom
    -rw-r--r-- 1 root root   483 Oct 14 13:36 README
    I would think /etc/default/grub might be one you need:
    Code:
    # If you change this file, run 'update-grub' afterwards to update
    # /boot/grub/grub.cfg.
    # For full documentation of the options in this file, see:
    #   info -f grub -n 'Simple configuration'
    
    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
    
    # 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_RECOVERY="true"
    
    # Uncomment to get a beep at grub start
    #GRUB_INIT_TUNE="480 440 1"
    /etc/grub.d/05_debian_theme:
    Code:
    #!/bin/sh
    set -e
    
    # grub-mkconfig helper script.
    # Copyright (C) 2010  Alexander Kurtz <kurtz.alex@googlemail.com>
    #
    # GRUB is free software: you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation, either version 3 of the License, or
    # (at your option) any later version.
    #
    # GRUB is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    # GNU General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
    
    # Include the GRUB helper library for grub-mkconfig.
    . /usr/share/grub/grub-mkconfig_lib
    
    # We want to work in /boot/grub/ only.
    test -d /boot/grub; cd /boot/grub
    
    # Set the location of a possibly necessary cache file for the background image.
    # NOTE: This MUST BE A DOTFILE to avoid confusing it with user-defined images.
    BACKGROUND_CACHE=".background_cache"
    
    set_default_theme(){
        # Set a monochromatic theme for Ubuntu.
        echo "${1}set menu_color_normal=white/black"
        echo "${1}set menu_color_highlight=black/light-gray"
    
        if [ -e /lib/plymouth/themes/default.grub ]; then
            sed "s/^/${1}/" /lib/plymouth/themes/default.grub
        fi
    }
    
    module_available(){
        local module
        for module in "${1}.mod" */"${1}.mod"; do
            if [ -f "${module}" ]; then
                return 0
            fi
        done
        return 1
    }
    
    set_background_image(){
        # Step #1: Search all available output modes ...
        local output
        for output in ${GRUB_TERMINAL_OUTPUT}; do
            if [ "x$output" = "xgfxterm" ]; then
                break
            fi
        done
    
        # ... and check if we are able to display a background image at all.
        if ! [ "x${output}" = "xgfxterm" ]; then
            return 1
        fi
    
        # Step #2: Check if the specified background image exists.
        if ! [ -f "${1}" ]; then
            return 2
        fi
    
        # Step #3: Search the correct GRUB module for our background image.
        local reader
        case "${1}" in
            *.jpg|*.JPG|*.jpeg|*.JPEG) reader="jpeg";;
            *.png|*.PNG) reader="png";;
            *.tga|*.TGA) reader="tga";;
            *) return 3;; # Unknown image type.
        esac
    
        # Step #4: Check if the necessary GRUB module is available.
        if ! module_available "${reader}"; then
            return 4
        fi
    
        # Step #5: Check if GRUB can read the background image directly.
        # If so, we can remove the cache file (if any). Otherwise the backgound
        # image needs to be cached under /boot/grub/.
        if is_path_readable_by_grub "${1}"; then
            rm --force "${BACKGROUND_CACHE}.jpeg" \
                "${BACKGROUND_CACHE}.png" "${BACKGROUND_CACHE}.tga"
        elif cp "${1}" "${BACKGROUND_CACHE}.${reader}"; then
            set -- "${BACKGROUND_CACHE}.${reader}" "${2}" "${3}"
        else
            return 5
        fi
    
        # Step #6: Prepare GRUB to read the background image.
        if ! prepare_grub_to_access_device "`${grub_probe} --target=device "${1}"`"; then
            return 6
        fi
    
        # Step #7: Everything went fine, print out a message to stderr ...
        echo "Found background image: ${1}" >&2
    
        # ... and write our configuration snippet to stdout. Use the colors
        # desktop-base specified. If we're using a user-defined background, use
        # the default colors since we've got no idea how the image looks like.
        # If loading the background image fails, use the default theme.
        echo "insmod ${reader}"
        echo "if background_image `make_system_path_relative_to_its_root "${1}"`; then"
        if [ -n "${2}" ]; then
            echo "  set color_normal=${2}"
        fi
        if [ -n "${3}" ]; then
            echo "  set color_highlight=${3}"
        fi
        if [ -z "${2}" ] && [ -z "${3}" ]; then
            echo "  true"
        fi
        echo "else"
        set_default_theme "  "
        echo "fi"
    }
    
    # Earlier versions of grub-pc copied the default background image to /boot/grub
    # during postinst. Remove those obsolete images if they haven't been touched by
    # the user. They are still available under /usr/share/images/desktop-base/ if
    # desktop-base is installed.
    while read checksum background; do
        if [ -f "${background}" ] && [ "x`sha1sum "${background}"`" = "x${checksum}  ${background}" ]; then
            echo "Removing old background image: ${background}" >&2
            rm "${background}"
        fi
    done <<EOF
    648ee65dd0c157a69b019a5372cbcfea4fc754a5  debian-blueish-wallpaper-640x480.png
    0431e97a6c661084c59676c4baeeb8c2f602edb8  debian-blueish-wallpaper-640x480.png
    968ecf6696c5638cfe80e8e70aba239526270864  debian-blueish-wallpaper-640x480.tga
    11143e8c92a073401de0b0fd42d0c052af4ccd9b  moreblue-orbit-grub.png
    d00d5e505ab63f2d53fa880bfac447e2d3bb197c  moreblue-orbit-grub.png
    f5b12c1009ec0a3b029185f6b66cd0d7e5611019  moreblue-orbit-grub.png
    EOF
    
    # Include the configuration of desktop-base if available.
    if [ -f "/usr/share/desktop-base/grub_background.sh" ]; then
        . "/usr/share/desktop-base/grub_background.sh"
    fi
    
    # First check whether the user has specified a background image explicitly.
    # If so, try to use it. Don't try the other possibilities in that case
    # (#608263).
    if [ -n "${GRUB_BACKGROUND+x}" ]; then
        set_background_image "${GRUB_BACKGROUND}" || set_default_theme
        exit 0
    fi
    
    # Next search for pictures the user put into /boot/grub/ and use the first one.
    for background in *.jpg *.JPG *.jpeg *.JPEG *.png *.PNG *.tga *.TGA; do
        if set_background_image "${background}"; then
            exit 0
        fi
    done
    
    # Next try to use the background image and colors specified by desktop-base.
    if set_background_image "${WALLPAPER}" "${COLOR_NORMAL}" "${COLOR_HIGHLIGHT}"; then
        exit 0
    fi
    
    # Finally, if all of the above fails, use the default theme.
    set_default_theme
    /etc/grub.d/10_linux
    Code:
    #! /bin/sh
    set -e
    
    # grub-mkconfig helper script.
    # Copyright (C) 2006,2007,2008,2009,2010  Free Software Foundation, Inc.
    #
    # GRUB is free software: you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation, either version 3 of the License, or
    # (at your option) any later version.
    #
    # GRUB is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    # GNU General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
    
    prefix="/usr"
    exec_prefix="${prefix}"
    datarootdir="${prefix}/share"
    
    . "${datarootdir}/grub/grub-mkconfig_lib"
    
    export TEXTDOMAIN=grub
    export TEXTDOMAINDIR="${datarootdir}/locale"
    
    CLASS="--class gnu-linux --class gnu --class os"
    
    if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
      OS=GNU/Linux
    else
      OS="${GRUB_DISTRIBUTOR}"
      CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1) ${CLASS}"
    fi
    
    # loop-AES arranges things so that /dev/loop/X can be our root device, but
    # the initrds that Linux uses don't like that.
    case ${GRUB_DEVICE} in
      /dev/loop/*|/dev/loop[0-9])
        GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"`
        # We can't cope with devices loop-mounted from files here.
        case ${GRUB_DEVICE} in
          /dev/*) ;;
          *) exit 0 ;;
        esac
      ;;
    esac
    
    if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \
        || ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \
        || uses_abstraction "${GRUB_DEVICE}" lvm; then
      LINUX_ROOT_DEVICE=${GRUB_DEVICE}
    else
      LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
    fi
    
    GRUBFS="`${grub_probe} --device ${GRUB_DEVICE} --target=fs 2>/dev/null || true`"
    
    if [ x"$GRUBFS" = x ]; then
        GRUBFS="$(stat -f --printf=%T / || true)"
    fi
    
    case x"$GRUBFS" in
        xbtrfs)
        rootsubvol="`make_system_path_relative_to_its_root /`"
        rootsubvol="${rootsubvol#/}"
        if [ "x${rootsubvol}" != x ]; then
            GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}"
        fi;;
        xzfs)
        rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true`
        bootfs="`make_system_path_relative_to_its_root / | sed -e "s,@$,,"`"
        LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs}"
        ;;
    esac
    
    title_correction_code=
    
    for word in $GRUB_CMDLINE_LINUX_DEFAULT; do
      if [ "$word" = splash ]; then
        GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT \$vt_handoff"
      fi
    done
    
    # add crashkernel option if we have the required tools
    if [ -x "/usr/bin/makedumpfile" ] && [ -x "/sbin/kexec" ]; then
        GRUB_CMDLINE_EXTRA="$GRUB_CMDLINE_EXTRA crashkernel=384M-2G:64M,2G-:128M"
    fi
    
    linux_entry ()
    {
      os="$1"
      version="$2"
      type="$3"
      args="$4"
    
      if [ -z "$boot_device_id" ]; then
          boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
      fi
      if [ x$type != xsimple ] ; then
          case $type in
          recovery)
              title="$(gettext_printf "%s, with Linux %s (recovery mode)" "${os}" "${version}")" ;;
          *)
              title="$(gettext_printf "%s, with Linux %s" "${os}" "${version}")" ;;
          esac
          if [ x"$title" = x"$GRUB_ACTUAL_DEFAULT" ] || [ x"Previous Linux versions>$title" = x"$GRUB_ACTUAL_DEFAULT" ]; then
          replacement_title="$(echo "Advanced options for ${OS}" | sed 's,>,>>,g')>$(echo "$title" | sed 's,>,>>,g')"
          quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)"
          title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;"
          grub_warn "$(gettext_printf "Please don't use old title \`%s' for GRUB_DEFAULT, use \`%s' (for versions before 2.00) or \`%s' (for 2.00 or later)" "$GRUB_ACTUAL_DEFAULT" "$replacement_title" "gnulinux-advanced-$boot_device_id>gnulinux-$version-$type-$boot_device_id")"
          fi
          echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
      else
          echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
      fi      
      echo "recordfail" | sed "s/^/$submenu_indentation/"
      if [ x$type != xrecovery ] ; then
          save_default_entry | sed -e "s/^/\t/"
    
          echo "    gfxmode \$linux_gfx_mode" | sed "s/^/$submenu_indentation/"
      fi
    
      echo "    insmod gzio" | sed "s/^/$submenu_indentation/"
    
      if [ x$dirname = x/ ]; then
        if [ -z "${prepare_root_cache}" ]; then
          prepare_root_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE} | sed -e "s/^/\t/")"
        fi
        printf '%s\n' "${prepare_root_cache}" | sed "s/^/$submenu_indentation/"
      else
        if [ -z "${prepare_boot_cache}" ]; then
          prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | sed -e "s/^/\t/")"
        fi
        printf '%s\n' "${prepare_boot_cache}" | sed "s/^/$submenu_indentation/"
      fi
      if [ x$type != xsimple ]; then
        message="$(gettext_printf "Loading Linux %s ..." ${version})"
        sed "s/^/$submenu_indentation/" << EOF
        echo    '$(echo "$message" | grub_quote)'
    EOF
      fi
      if test -d /sys/firmware/efi && test -e "${linux}.efi.signed"; then
        sed "s/^/$submenu_indentation/" << EOF
        linux    ${rel_dirname}/${basename}.efi.signed root=${linux_root_device_thisversion} ro ${args}
    EOF
      else
        sed "s/^/$submenu_indentation/" << EOF
        linux    ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args}
    EOF
      fi
      if test -n "${initrd}" ; then
        # TRANSLATORS: ramdisk isn't identifier. Should be translated.
        if [ x$type != xsimple ]; then
          message="$(gettext_printf "Loading initial ramdisk ...")"
          sed "s/^/$submenu_indentation/" << EOF
        echo    '$(echo "$message" | grub_quote)'
    EOF
        fi
        sed "s/^/$submenu_indentation/" << EOF
        initrd    ${rel_dirname}/${initrd}
    EOF
      fi
      sed "s/^/$submenu_indentation/" << EOF
    }
    EOF
    }
    
    machine=`uname -m`
    case "x$machine" in
        xi?86 | xx86_64)
        list=`for i in /boot/vmlinuz-* /vmlinuz-* /boot/kernel-* ; do
                      if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
                  done` ;;
        *) 
        list=`for i in /boot/vmlinuz-* /boot/vmlinux-* /vmlinuz-* /vmlinux-* /boot/kernel-* ; do
                      if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
             done` ;;
    esac
    
    case "$machine" in
        i?86) GENKERNEL_ARCH="x86" ;;
        mips|mips64) GENKERNEL_ARCH="mips" ;;
        mipsel|mips64el) GENKERNEL_ARCH="mipsel" ;;
        arm*) GENKERNEL_ARCH="arm" ;;
        *) GENKERNEL_ARCH="$machine" ;;
    esac
    
    prepare_boot_cache=
    prepare_root_cache=
    boot_device_id=
    title_correction_code=
    
    cat << 'EOF'
    function gfxmode {
        set gfxpayload="${1}"
        if [ "${1}" = "keep" ]; then
            set vt_handoff=vt.handoff=7
        else
            set vt_handoff=
        fi
    }
    EOF
    
    # 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.
    if [ "x$GRUB_GFXPAYLOAD_LINUX" != x ]; then
      echo "set linux_gfx_mode=$GRUB_GFXPAYLOAD_LINUX"
    else
      cat << EOF
    if [ "\${recordfail}" != 1 ]; then
      if [ -e \${prefix}/gfxblacklist.txt ]; then
        if hwmatch \${prefix}/gfxblacklist.txt 3; then
          if [ \${match} = 0 ]; then
            set linux_gfx_mode=keep
          else
            set linux_gfx_mode=text
          fi
        else
          set linux_gfx_mode=text
        fi
      else
        set linux_gfx_mode=keep
      fi
    else
      set linux_gfx_mode=text
    fi
    EOF
    fi
    cat << EOF
    export linux_gfx_mode
    if [ "\${linux_gfx_mode}" != "text" ]; then load_video; fi
    EOF
    
    # Extra indentation to add to menu entries in a submenu. We're not in a submenu
    # yet, so it's empty. In a submenu it will be equal to '\t' (one tab).
    submenu_indentation=""
    
    is_first_entry=true
    while [ "x$list" != "x" ] ; do
      linux=`version_find_latest $list`
      case $linux in
        *.efi.signed)
          # We handle these in linux_entry.
          list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '`
          continue
          ;;
      esac
      gettext_printf "Found linux image: %s\n" "$linux" >&2
      basename=`basename $linux`
      dirname=`dirname $linux`
      rel_dirname=`make_system_path_relative_to_its_root $dirname`
      version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
      alt_version=`echo $version | sed -e "s,\.old$,,g"`
      linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
    
      initrd=
      for i in "initrd.img-${version}" "initrd-${version}.img" "initrd-${version}.gz" \
           "initrd-${version}" "initramfs-${version}.img" \
           "initrd.img-${alt_version}" "initrd-${alt_version}.img" \
           "initrd-${alt_version}" "initramfs-${alt_version}.img" \
           "initramfs-genkernel-${version}" \
           "initramfs-genkernel-${alt_version}" \
           "initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \
           "initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}"; do
        if test -e "${dirname}/${i}" ; then
          initrd="$i"
          break
        fi
      done
    
      config=
      for i in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "/etc/kernels/kernel-config-${version}" ; do
        if test -e "${i}" ; then
          config="${i}"
          break
        fi
      done
    
      initramfs=
      if test -n "${config}" ; then
          initramfs=`grep CONFIG_INITRAMFS_SOURCE= "${config}" | cut -f2 -d= | tr -d \"`
      fi
    
      if test -n "${initrd}" ; then
        gettext_printf "Found initrd image: %s\n" "${dirname}/${initrd}" >&2
      elif test -z "${initramfs}" ; then
        # "UUID=" and "ZFS=" magic is parsed by initrd or initramfs.  Since there's
        # no initrd or builtin initramfs, it can't work here.
        linux_root_device_thisversion=${GRUB_DEVICE}
      fi
    
      if [ "x$is_first_entry" = xtrue ]; then
        linux_entry "${OS}" "${version}" simple \
        "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_EXTRA} ${GRUB_CMDLINE_LINUX_DEFAULT}"
    
        submenu_indentation="\t"
        
        if [ -z "$boot_device_id" ]; then
        boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
        fi
        # TRANSLATORS: %s is replaced with an OS name
        echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"
      fi
    
      linux_entry "${OS}" "${version}" advanced \
                  "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_EXTRA} ${GRUB_CMDLINE_LINUX_DEFAULT}"
      if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then
        if [ -x /lib/recovery-mode/recovery-menu ]; then
          linux_entry "${OS}" "${version}" recovery \
              "recovery nomodeset ${GRUB_CMDLINE_LINUX}"
        else
          linux_entry "${OS}" "${version}" recovery \
              "single nomodeset ${GRUB_CMDLINE_LINUX}"
        fi
      fi
    
      list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '`
      is_first_entry=false
    done
    
    # If at least one kernel was found, then we need to
    # add a closing '}' for the submenu command.
    if [ x"$is_first_entry" != xtrue ]; then
      echo '}'
    fi
    
    echo "$title_correction_code"
    /etc/grub.d/30_os-prober
    Code:
    #! /bin/sh
    set -e
    
    # grub-mkconfig helper script.
    # Copyright (C) 2006,2007,2008,2009  Free Software Foundation, Inc.
    #
    # GRUB is free software: you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation, either version 3 of the License, or
    # (at your option) any later version.
    #
    # GRUB is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    # GNU General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
    
    prefix="/usr"
    exec_prefix="${prefix}"
    datarootdir="${prefix}/share"
    
    export TEXTDOMAIN=grub
    export TEXTDOMAINDIR="${datarootdir}/locale"
    
    . "${datarootdir}/grub/grub-mkconfig_lib"
    
    found_other_os=
    
    make_timeout () {
      if [ "x${found_other_os}" = "x" ] ; then
        if [ "x${1}" != "x" ] ; then
          if [ "x${GRUB_HIDDEN_TIMEOUT_QUIET}" = "xtrue" ] ; then
    	verbose=
          else
    	verbose=" --verbose"
          fi
    
          if [ "x${1}" = "x0" ] ; then
    	cat <<EOF
    if [ "x\${timeout}" != "x-1" ]; then
      if keystatus; then
        if keystatus --shift; then
          set timeout=-1
        else
          set timeout=0
        fi
      else
        if sleep$verbose --interruptible 3 ; then
          set timeout=0
        fi
      fi
    fi
    EOF
          else
    	cat << EOF
    if [ "x\${timeout}" != "x-1" ]; then
      if sleep$verbose --interruptible ${GRUB_HIDDEN_TIMEOUT} ; then
        set timeout=0
      fi
    fi
    EOF
          fi
        fi
      fi
    }
    
    adjust_timeout () {
      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
    }
    
    if [ "x${GRUB_DISABLE_OS_PROBER}" = "xtrue" ]; then
      adjust_timeout
      exit 0
    fi
    
    if [ -z "`which os-prober 2> /dev/null`" -o -z "`which linux-boot-prober 2> /dev/null`" ] ; then
      # missing os-prober and/or linux-boot-prober
      adjust_timeout
      exit 0
    fi
    
    OSPROBED="`os-prober | tr ' ' '^' | paste -s -d ' '`"
    if [ -z "${OSPROBED}" ] ; then
      # empty os-prober output, nothing doing
      adjust_timeout
      exit 0
    fi
    
    osx_entry() {
        found_other_os=1
        if [ x$2 = x32 ]; then
            # TRANSLATORS: it refers to kernel architecture (32-bit)
    	bitstr="$(gettext "(32-bit)")"
        else
            # TRANSLATORS: it refers to kernel architecture (64-bit)
    	bitstr="$(gettext "(64-bit)")"
        fi
        # TRANSLATORS: it refers on the OS residing on device %s
        onstr="$(gettext_printf "(on %s)" "${DEVICE}")"
            cat << EOF
    menuentry '$(echo "${LONGNAME} $bitstr $onstr" | grub_quote)' --class osx --class darwin --class os \$menuentry_id_option 'osprober-xnu-$2-$(grub_get_device_id "${DEVICE}")'  {
    EOF
    	save_default_entry | sed -e "s/^/\t/"
    	prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/"
    	cat << EOF
            load_video
            set do_resume=0
            if [ /var/vm/sleepimage -nt10 / ]; then
               if xnu_resume /var/vm/sleepimage; then
                 set do_resume=1
               fi
            fi
            if [ \$do_resume = 0 ]; then
               xnu_uuid ${OSXUUID} uuid
               if [ -f /Extra/DSDT.aml ]; then
                  acpi -e /Extra/DSDT.aml
               fi
               if [ /kernelcache -nt /System/Library/Extensions ]; then
                  $1 /kernelcache boot-uuid=\${uuid} rd=*uuid
               else
                  $1 /mach_kernel boot-uuid=\${uuid} rd=*uuid
                  if [ /System/Library/Extensions.mkext -nt /System/Library/Extensions ]; then
                    xnu_mkext /System/Library/Extensions.mkext
                  else
                    xnu_kextdir /System/Library/Extensions
                  fi
               fi
               if [ -f /Extra/Extensions.mkext ]; then
                  xnu_mkext /Extra/Extensions.mkext
               fi
               if [ -d /Extra/Extensions ]; then
                  xnu_kextdir /Extra/Extensions
               fi
               if [ -f /Extra/devprop.bin ]; then
                  xnu_devprop_load /Extra/devprop.bin
               fi
               if [ -f /Extra/splash.jpg ]; then
                  insmod jpeg
                  xnu_splash /Extra/splash.jpg
               fi
               if [ -f /Extra/splash.png ]; then
                  insmod png
                  xnu_splash /Extra/splash.png
               fi
               if [ -f /Extra/splash.tga ]; then
                  insmod tga
                  xnu_splash /Extra/splash.tga
               fi
            fi
    }
    EOF
    }
    
    used_osprober_linux_ids=
    
    wubi=
    
    for OS in ${OSPROBED} ; do
      DEVICE="`echo ${OS} | cut -d ':' -f 1`"
      LONGNAME="`echo ${OS} | cut -d ':' -f 2 | tr '^' ' '`"
      LABEL="`echo ${OS} | cut -d ':' -f 3 | tr '^' ' '`"
      BOOT="`echo ${OS} | cut -d ':' -f 4`"
    
      if [ -z "${LONGNAME}" ] ; then
        LONGNAME="${LABEL}"
      fi
    
      gettext_printf "Found %s on %s\n" "${LONGNAME}" "${DEVICE}" >&2
    
      case ${BOOT} in
        chain)
    
          case ${LONGNAME} in
    	Windows*)
    	  if [ -z "$wubi" ]; then
    	    if [ -x /usr/share/lupin-support/grub-mkimage ] && \
    	       /usr/share/lupin-support/grub-mkimage --test; then
    	      wubi=yes
    	    else
    	      wubi=no
    	    fi
    	  fi
    	  if [ "$wubi" = yes ]; then
    	    echo "Skipping ${LONGNAME} on Wubi system" >&2
    	    continue
    	  fi
    	  ;;
          esac
    
          found_other_os=1
    	  onstr="$(gettext_printf "(on %s)" "${DEVICE}")"
          cat << EOF
    menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' --class windows --class os \$menuentry_id_option 'osprober-chain-$(grub_get_device_id "${DEVICE}")' {
    EOF
          save_default_entry | sed -e "s/^/\t/"
          prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/"
    
          case ${LONGNAME} in
    	Windows\ Vista*|Windows\ 7*|Windows\ Server\ 2008*)
    	;;
    	*)
    	  cat << EOF
    	drivemap -s (hd0) \${root}
    EOF
    	;;
          esac
    
          cat <<EOF
    	chainloader +1
    }
    EOF
        ;;
        linux)
          LINUXPROBED="`linux-boot-prober ${DEVICE} 2> /dev/null | tr ' ' '^' | paste -s -d ' '`"
          prepare_boot_cache=
          boot_device_id=
          is_first_entry=true
          title_correction_code=
          OS="${LONGNAME}"
    
          for LINUX in ${LINUXPROBED} ; do
            LROOT="`echo ${LINUX} | cut -d ':' -f 1`"
            LBOOT="`echo ${LINUX} | cut -d ':' -f 2`"
            LLABEL="`echo ${LINUX} | cut -d ':' -f 3 | tr '^' ' '`"
            LKERNEL="`echo ${LINUX} | cut -d ':' -f 4`"
            LINITRD="`echo ${LINUX} | cut -d ':' -f 5`"
            LPARAMS="`echo ${LINUX} | cut -d ':' -f 6- | tr '^' ' '`"
    
            if [ -z "${LLABEL}" ] ; then
              LLABEL="${LONGNAME}"
            fi
    
    	if [ "${LROOT}" != "${LBOOT}" ]; then
    	  LKERNEL="${LKERNEL#/boot}"
    	  LINITRD="${LINITRD#/boot}"
    	fi
    
    	if [ -z "${prepare_boot_cache}" ]; then
    	  prepare_boot_cache="$(prepare_grub_to_access_device ${LBOOT} | sed -e "s/^/\t/")"
    	  [ "${prepare_boot_cache}" ] || continue
    	fi
    
    	found_other_os=1
    	onstr="$(gettext_printf "(on %s)" "${DEVICE}")"
    	recovery_params="$(echo "${LPARAMS}" | grep 'single\|recovery')" || true
    	counter=1
    	while echo "$used_osprober_linux_ids" | grep 'osprober-gnulinux-$LKERNEL-${recovery_params}-$counter-$boot_device_id' > /dev/null; do
    	    counter=$((counter+1));
    	done
    	if [ -z "$boot_device_id" ]; then
    	    boot_device_id="$(grub_get_device_id "${DEVICE}")"
    	fi
    	used_osprober_linux_ids="$used_osprober_linux_ids 'osprober-gnulinux-$LKERNEL-${recovery_params}-$counter-$boot_device_id'"
    
    	if [ "x$is_first_entry" = xtrue ]; then
                cat << EOF
    menuentry '$(echo "$OS" | grub_quote)' --class gnu-linux --class gnu --class os \$menuentry_id_option 'osprober-gnulinux-simple-$boot_device_id' {
    EOF
    	    save_default_entry | sed -e "s/^/\t/"
    	    printf '%s\n' "${prepare_boot_cache}"
    	    cat <<  EOF
    	linux ${LKERNEL} ${LPARAMS}
    EOF
                if [ -n "${LINITRD}" ] ; then
              cat << EOF
    	initrd ${LINITRD}
    EOF
                fi
            cat << EOF
    }
    EOF
    	    echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' \$menuentry_id_option 'osprober-gnulinux-advanced-$boot_device_id' {"
    	    is_first_entry=false
    	fi
    	title="${LLABEL} $onstr"
            cat << EOF
    	menuentry '$(echo "$title" | grub_quote)' --class gnu-linux --class gnu --class os \$menuentry_id_option 'osprober-gnulinux-$LKERNEL-${recovery_params}-$boot_device_id' {
    EOF
    	save_default_entry | sed -e "s/^/\t\t/"
    	printf '%s\n' "${prepare_boot_cache}" | sed -e "s/^/\t/"
    	cat <<  EOF
    		linux ${LKERNEL} ${LPARAMS}
    EOF
            if [ -n "${LINITRD}" ] ; then
                cat << EOF
    		initrd ${LINITRD}
    EOF
            fi
            cat << EOF
    	}
    EOF
    	if [ x"$title" = x"$GRUB_ACTUAL_DEFAULT" ] || [ x"Previous Linux versions>$title" = x"$GRUB_ACTUAL_DEFAULT" ]; then
    	    replacement_title="$(echo "Advanced options for ${OS}" | sed 's,>,>>,g')>$(echo "$title" | sed 's,>,>>,g')"
    	    quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)"
    	    title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;"
    	    grub_warn "$(gettext_printf "Please don't use old title \`%s' for GRUB_DEFAULT, use \`%s' (for versions before 2.00) or \`%s' (for 2.00 or later)" "$GRUB_ACTUAL_DEFAULT" "$replacement_title" "gnulinux-advanced-$boot_device_id>gnulinux-$version-$type-$boot_device_id")"
    	fi
          done
          if [ x"$is_first_entry" != xtrue ]; then
    	  echo '}'
          fi
          echo "$title_correction_code"
        ;;
        macosx)
          OSXUUID="`${grub_probe} --target=fs_uuid --device ${DEVICE} 2> /dev/null`"
          osx_entry xnu_kernel 32
          osx_entry xnu_kernel64 64
        ;;
        hurd)
          found_other_os=1
          onstr="$(gettext_printf "(on %s)" "${DEVICE}")"
          cat << EOF
    menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' --class hurd --class gnu --class os \$menuentry_id_option 'osprober-gnuhurd-/boot/gnumach.gz-false-$(grub_get_device_id "${DEVICE}")' {
    EOF
          save_default_entry | sed -e "s/^/\t/"
          prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/"
          grub_device="`${grub_probe} --device ${DEVICE} --target=drive`"
          mach_device="`echo "${grub_device}" | sed -e 's/(\(hd.*\),msdos\(.*\))/\1s\2/'`"
          grub_fs="`${grub_probe} --device ${DEVICE} --target=fs`"
          case "${grub_fs}" in
    	*fs)	hurd_fs="${grub_fs}" ;;
    	*)	hurd_fs="${grub_fs}fs" ;;
          esac
          cat << EOF
    	multiboot /boot/gnumach.gz root=device:${mach_device}
    	module /hurd/${hurd_fs}.static ${hurd_fs} --readonly \\
    			--multiboot-command-line='\${kernel-command-line}' \\
    			--host-priv-port='\${host-port}' \\
    			--device-master-port='\${device-port}' \\
    			--exec-server-task='\${exec-task}' -T typed '\${root}' \\
    			'\$(task-create)' '\$(task-resume)'
    	module /lib/ld.so.1 exec /hurd/exec '\$(exec-task=task-create)'
    }
    EOF
        ;;
        *)
          echo -n "  "
          # TRANSLATORS: %s is replaced by OS name.
          gettext_printf "%s is not yet supported by grub-mkconfig.\n" "${LONGNAME}" >&2
        ;;
      esac
    done
    
    adjust_timeout

  4. #14
    Join Date
    Aug 2009
    Beans
    Hidden!
    Distro
    Xubuntu

    Re: How to have a custom Grub2 menu that is maintenance free

    Quote Originally Posted by bogan View Post
    Hi!, Cavsfan,

    Thanks again. I am not sure what to look for in /etc/fstab, it looks much like yours except there is a entry for /home, and for some reason it also lists the Swap from the 12.10 USB, but not the one from 12.10 sdb7 [perhaps the later was not mounted].
    Code:
    alan@alan-MS-7616:~$ cat /etc/fstab
    # /etc/fstab: static file system information.
    #
    [Text deleted]
    #
    # <file system> <mount point>   <type>  <options>       <dump>  <pass>
    # / was on /dev/sda10 during installation
    UUID=b5aab3a2-0086-4a12-9276-46bb5a615038 /               ext4    errors=remount-ro 0       1
    # /home was on /dev/sda11 during installation
    UUID=adc771a1-313c-47ae-8725-3c89b89bbfa2 /home           ext4    defaults        0       2
    # swap was on /dev/sda6 during installation
    UUID=a74af1d9-f7f9-4453-97e7-b9e3f370dca4 none            swap    sw              0       0
    # swap was on /dev/sdb3 during installation
    UUID=9a74bb15-1215-4774-8419-f2908ee62d2e none            swap    sw              0       0
    alan@alan-MS-7616:~$
    I have one virgin 12.10 installation in which I deliberately did not run Grub Customizer, so it would be 12.04.1 for which I might need the grub files.

    Presumably I will need to replace the files in all the other installations, as they interact; as well as deleting all the Grub Customizer files.

    Chao!, bogan.
    Bogan,
    You should only have whatever is for the system you are logged into in fstab.
    It looks like you have 2 swaps and you should only have one. If you originally set it up with / and home, you should have those 2 plus the swap file for that system.

    You should also not have that [Text deleted] comment as it does not have # before it.
    As I installed each additional system fstab pulled in all of the swap files and I had to edit it gksu gedit /etc/fstab each time.

    Labelling the partition is especially helpful when you have multiple systems.
    It is mentioned in 1.6 of the wiki but, here is the command:
    sudo tune2fs -L Quantal /dev/sda7
    You can probably use the files I posted above. Let me know if you need anything else.

    Ciao!

  5. #15
    Join Date
    Feb 2010
    Location
    Nr BrandsHatch, S'oaks UK
    Beans
    1,241
    Distro
    Lubuntu 13.04 Raring Ringtail

    Re: How to have a custom Grub2 menu that is maintenance free

    Hi!, Cavsfan,

    I copy/pasted the contents of /etc/fstab and Posted it, [after deleting the text paragraph to make it smaller - the " [Text deleted]" was my addition -.

    This morning after reading your two Posts, I went to /etc/fstab in all the Ubuntu installations on this computer and found most of them had 3 or 4 extra swap entries, which I deleted.

    Edit. Some of them were for partitions on HDDisks that no longer exist!

    It will be interesting to see if it makes any difference.

    Running the 'new command' on an OS that had not run grub Customizer worked correctly, showing all the Alternative options and partition labels.

    Could you please explain the command "sudo tune2fs -L Quantal /dev/sda7"
    Where, in what file does it place the title?
    Does it have to be run from each of the Os to be titled?
    Will it work in the standard Grub2 +Grub Customizer set-up? or only with your system?

    I guess I need to study your Wiki in more detail.

    Chao!, bogan.

    .
    Last edited by bogan; October 31st, 2012 at 01:52 PM. Reason: note added
    "Better Solutions may bring Worsened Problems": After Lao Tse, b. circa 405BC. a contemporary of Confucius, who died circa 600BC.
    They did things differently in those days, apparently!!

  6. #16
    Join Date
    Aug 2009
    Beans
    Hidden!
    Distro
    Xubuntu

    Re: How to have a custom Grub2 menu that is maintenance free

    Quote Originally Posted by bogan View Post
    Hi!, Cavsfan,

    I copy/pasted the contents of /etc/fstab and Posted it, [after deleting the text paragraph to make it smaller - the " [Text deleted]" was my addition -.

    This morning after reading your two Posts, I went to /etc/fstab in all the Ubuntu installations on this computer and found most of them had 3 or 4 extra swap entries, which I deleted.

    Edit. Some of them were for partitions on HDDisks that no longer exist!

    It will be interesting to see if it makes any difference.

    Running the 'new command' on an OS that had not run grub Customizer worked correctly, showing all the Alternative options and partition labels.

    Could you please explain the command "sudo tune2fs -L Quantal /dev/sda7"
    Where, in what file does it place the title?
    Does it have to be run from each of the Os to be titled?
    Will it work in the standard Grub2 +Grub Customizer set-up? or only with your system?

    I guess I need to study your Wiki in more detail.

    Chao!, bogan.

    .
    That is exactly what happened to me: each time I installed or reinstalled a Ubuntu the fstab for that installation would contain the old original swap file,
    the new one and all of the swap files from every other Ubuntu on my machine.

    This is why I thought it necessary to add that info in 1.7 of the wiki.

    The label command drs305 also gave me. It makes partitions easier to identify rather than looking at a UUID.
    Here his my output of sudo blkid:
    Code:
    /dev/sda1: LABEL="C:" UUID="1CFC7A8DFC7A60C6" TYPE="ntfs" 
    /dev/sda2: LABEL="Lucid" UUID="a162dc8a-e4df-4b79-b4c3-524761ff7ae1" TYPE="ext4" 
    /dev/sda3: UUID="2a80f59e-e7c3-418e-aab2-ab5d19255a2f" TYPE="swap" 
    /dev/sda5: LABEL="Precise" UUID="3b8b1954-24e6-4a5e-9074-70a1a94ed4be" TYPE="ext4" 
    /dev/sda6: UUID="82c51b29-023f-4964-99b6-67b45a49527f" TYPE="swap" 
    /dev/sda7: LABEL="Quantal" UUID="b5fc902c-0bf0-45b3-95a1-29f3c46dfe6a" TYPE="ext4" 
    /dev/sda8: UUID="69ac3efc-8a8a-4056-89e0-59bb81c2f468" TYPE="swap" 
    /dev/sda9: LABEL="Lucid-Generic" UUID="109c11d0-71e3-41a4-87da-9e81535499a5" TYPE="ext4" 
    /dev/sda10: UUID="24aa8c8b-53dc-4ecc-852b-ff2c25c8b342" TYPE="swap" 
    /dev/sda11: LABEL="Precise-Generic" UUID="50104efb-d918-45a9-985e-a70c60e87ac0" TYPE="ext4" 
    /dev/sda12: UUID="139390a6-2fe1-4ff2-b650-88ae3b0586c1" TYPE="swap" 
    /dev/sda13: UUID="580e8c62-78ce-44a2-93e3-ccebd37c3acc" TYPE="ext4" LABEL="Quantal-Generic" 
    /dev/sda14: UUID="ec3048b8-c644-435a-93bb-08bb4975d0db" TYPE="swap" 
    /dev/sdb1: LABEL="Fantom" UUID="78B8D1A1B8D15DE6" TYPE="ntfs"
    As you can see Quantal is installed on /dev/sda7 and the above command was used to add the label.
    Since it must be run as sudo, it can be run from any installation.

    Example: sudo tune2fs -L {label} {devicename}.

    So, when I login to Lucid for example, I see a partition (drive) named Precise, Quantal, etc.
    It would probably just show the UUID otherwise. Which would make it a lot more difficult to identify.

  7. #17
    Join Date
    Feb 2010
    Location
    Nr BrandsHatch, S'oaks UK
    Beans
    1,241
    Distro
    Lubuntu 13.04 Raring Ringtail

    Re: How to have a custom Grub2 menu that is maintenance free

    Hi!, Cavsfan,

    WoW! "sudo tune2fs -L Quantal /dev/sda7" looks like just what I need, the problem with duplicates is made worse because they just say: eg"Ubuntu 12.10 (12.10)", and the only way to know which of three 12.10s on the computer, each refer to, is to use 'e' edit in the Grub Menu and check out the 'hd1:msdos7' entry in the script.

    Similarly in Grub Customizer, there is no telling which is which, as the entries do not stay in the same order in the menu.

    One more question: in: 'sudo tune2fs -L {label} {devicename}', can the 'label' have spaces in it? & if so, must the label be in quotes? For instance: "Quantal on USB". Or should I add a hyphen as you have used?

    I do not think I need the Grub files, as when Grub Customer replaces them with Proxy versions, the originals are saved in a 'proxifiedScripts' folder, but without their numbers.

    At the moment, things are not going well: the USB 12.10 with no GC, which previously was exempt from the duplicates problem, has suddenly produced two duplicates in its own grub menu, and two duplicates of its entries have appeared in the grub menu of my main Ubuntu OS: Whilst the grub menu of 11.10 has no less than 24 entries, where there should only be seven [ or 12 with recoveries] and my main OS had 34!.

    For the moment I have fixed things by editing /boot/grub/grub.cfg in my main OS, but of course, that will not survive a kernal update or update-grub.

    Sorry to be such a persistent nuisance.

    Chao!, bogan.
    Last edited by bogan; October 31st, 2012 at 06:40 PM. Reason: spacing
    "Better Solutions may bring Worsened Problems": After Lao Tse, b. circa 405BC. a contemporary of Confucius, who died circa 600BC.
    They did things differently in those days, apparently!!

  8. #18
    Join Date
    Aug 2009
    Beans
    Hidden!
    Distro
    Xubuntu

    Re: How to have a custom Grub2 menu that is maintenance free

    Quote Originally Posted by bogan View Post
    Hi!, Cavsfan,

    WoW! "sudo tune2fs -L Quantal /dev/sda7" looks like just what I need, the problem with duplicates is made worse because they just say: eg"Ubuntu 12.10 (12.10)", and the only way to know which of three 12.10s on the computer, each refer to, is to use 'e' edit in the Grub Menu and check out the 'hd1:msdos7' entry in the script.

    Similarly in Grub Customizer, there is no telling which is which, as the entries do not stay in the same order in the menu.

    One more question: in: 'sudo tune2fs -L {label} {devicename}', can the 'label' have spaces in it? & if so, must the label be in quotes? For instance: "Quantal on USB". Or should I add a hyphen as you have used?

    I do not think I need the Grub files, as when Grub Customer replaces them with Proxy versions, the originals are saved in a 'proxifiedScripts' folder, but without their numbers.

    At the moment, things are not going well: the USB 12.10 with no GC, which previously was exempt from the duplicates problem, has suddenly produced two duplicates in its own grub menu, and two duplicates of its entries have appeared in the grub menu of my main Ubuntu OS: Whilst the grub menu of 11.10 has no less than 24 entries, where there should only be seven [ or 12 with recoveries] and my main OS had 34!.

    For the moment I have fixed things by editing /boot/grub/grub.cfg in my main OS, but of course, that will not survive a kernal update or update-grub.

    Sorry to be such a persistent nuisance.

    Chao!, bogan.
    I think the label command will work with spaces if you put quotes around the text. I would just use sudo tune2fs -L "Quantal on USB" /dev/sda7 and that will work.
    As a matter of fact I believe the quotes work better.
    I just changed all my generic installs with spaces in between. And that is how they appear when I click on Places.
    Code:
    /dev/sda1: LABEL="C:" UUID="1CFC7A8DFC7A60C6" TYPE="ntfs" 
    /dev/sda2: LABEL="Lucid" UUID="a162dc8a-e4df-4b79-b4c3-524761ff7ae1" TYPE="ext4" 
    /dev/sda3: UUID="2a80f59e-e7c3-418e-aab2-ab5d19255a2f" TYPE="swap" 
    /dev/sda5: LABEL="Precise" UUID="3b8b1954-24e6-4a5e-9074-70a1a94ed4be" TYPE="ext4" 
    /dev/sda6: UUID="82c51b29-023f-4964-99b6-67b45a49527f" TYPE="swap" 
    /dev/sda7: LABEL="Quantal" UUID="b5fc902c-0bf0-45b3-95a1-29f3c46dfe6a" TYPE="ext4" 
    /dev/sda8: UUID="69ac3efc-8a8a-4056-89e0-59bb81c2f468" TYPE="swap" 
    /dev/sda9: LABEL="Lucid Generic" UUID="109c11d0-71e3-41a4-87da-9e81535499a5" TYPE="ext4" 
    /dev/sda10: UUID="24aa8c8b-53dc-4ecc-852b-ff2c25c8b342" TYPE="swap" 
    /dev/sda11: LABEL="Precise Generic" UUID="50104efb-d918-45a9-985e-a70c60e87ac0" TYPE="ext4" 
    /dev/sda12: UUID="139390a6-2fe1-4ff2-b650-88ae3b0586c1" TYPE="swap" 
    /dev/sda13: UUID="580e8c62-78ce-44a2-93e3-ccebd37c3acc" TYPE="ext4" LABEL="Quantal Generic" 
    /dev/sda14: UUID="ec3048b8-c644-435a-93bb-08bb4975d0db" TYPE="swap" 
    /dev/sdb1: LABEL="Fantom" UUID="78B8D1A1B8D15DE6" TYPE="ntfs"
    Never used the grub-customizer myself. I have always preferred my way which ranch hand taught me.
    He is a pretty smart guy with Ubuntu and Linux!

    Other than making a couple mods to 2-3 files the big thing is /etc/grub.d/06_custom (saved from 40_custom).

    Here is the contents of my 06_custom file in Quantal and it displays what I want it to display with no exceptions.

    Code:
    #!/bin/sh
    echo 1>&2 "Adding Ubuntu Lucid Lynx 10.04, Precise Pangolin 12.04, Quantal Quetzal 12.10 and Windows 7"
    exec tail -n +4 $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.
    menuentry "Lycid Lynx 10.04" {
        set root=(hd0,2)
            linux /vmlinuz root=/dev/sda2 ro quiet splash
            initrd /initrd.img
    }
    menuentry "Lycid Lynx 10.04 (Recovery Mode)" {
        set root=(hd0,2)
            linux /vmlinuz root=/dev/sda2 ro single
            initrd /initrd.img
    }
    menuentry "Lycid Lynx Generic 10.04" {
        set root=(hd0,9)
            linux /vmlinuz root=/dev/sda9 ro quiet splash
            initrd /initrd.img
    }
    menuentry "Lycid Lynx Generic 10.04 (Recovery Mode)" {
        set root=(hd0,9)
            linux /vmlinuz root=/dev/sda9 ro single
            initrd /initrd.img
    }
    menuentry "Precise Pangolin 12.04" {
        set root=(hd0,5)
            linux /vmlinuz root=/dev/sda5 ro quiet splash
            initrd /initrd.img
    }
    menuentry "Precise Pangolin 12.04 (Recovery Mode)" {
        set root=(hd0,5)
            linux /vmlinuz root=/dev/sda5 ro single
            initrd /initrd.img
    }
    menuentry "Precise Pangolin Generic 12.04" {
        set root=(hd0,11)
            linux /vmlinuz root=/dev/sda11 ro quiet splash
            initrd /initrd.img
    }
    menuentry "Precise Pangolin Generic 12.04 (Recovery Mode)" {
        set root=(hd0,11)
            linux /vmlinuz root=/dev/sda11 ro single
            initrd /initrd.img
    }
    menuentry "Quantal Quetzal 12.10" {
        set root=(hd0,7)
            linux /vmlinuz root=/dev/sda7 ro quiet splash
            initrd /initrd.img
    }
    menuentry "Quantal Quetzal 12.10 (Recovery Mode)" {
        set root=(hd0,7)
            linux /vmlinuz root=/dev/sda7 ro single
            initrd /initrd.img
    }
    menuentry "Quantal Quetzal Generic 12.10" {
        set root=(hd0,13)
            linux /vmlinuz root=/dev/sda13 ro quiet splash
            initrd /initrd.img
    }
    menuentry "Quantal Quetzal Generic 12.10 (Recovery Mode)" {
        set root=(hd0,13)
            linux /vmlinuz root=/dev/sda13 ro single
            initrd /initrd.img
    }
    menuentry "Windows 7" {
        insmod ntfs
        set root='(hd0,1)'
        search --no-floppy --fs-uuid --set 1CFC7A8DFC7A60C6
        chainloader +1
    }
    Other than changing what is in red, you would just change what is between the quotes to whatever you want
    because you will be the only one that sees it.

    Then making it executable sudo chmod +x /etc/grub.d/06_custom and
    then sudo update-grub of course.

    And you are not a nuisance! You wouldn't believe how long it took me to work up the courage to make these changes to my machine!
    But, I am glad I did. You see my screen above and they are the same on all three installs. The 06_custom file above matches what is displayed on my pictures above.
    Since I am leaving the generic installs untouched but, they still are bootable from where my grub is installed.
    I have customized all three Ubuntus for the wiki but, I have my boot grub2 on Lucid which is on a primary partition.

    EDIT: In answer to your question, I would get all the grub files back to their original state before I tried my method.
    I don't think my method will work on files that have been customized by grub-customizer.
    If you need anything other than what I already posted above just let me know.
    Last edited by Cavsfan; October 31st, 2012 at 08:27 PM. Reason: Added last part to answer a question.

  9. #19
    Join Date
    Aug 2009
    Beans
    Hidden!
    Distro
    Xubuntu

    Re: How to have a custom Grub2 menu that is maintenance free

    After you get all of your grub files back to default.

    First enter this in terminal to create the font. You will see errors but, it will still work:

    Code:
    sudo grub-mkfont --output=/boot/grub/DejaVuSansMono.pf2 \
    --size=24 /usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono.ttf
    Here are my files on Quantal with the changes/additions in red:
    gksu gedit /etc/default/grub
    Code:
    # If you change this file, run 'update-grub' afterwards to update
    # /boot/grub/grub.cfg.
    # For full documentation of the options in this file, see:
    #   info -f grub -n 'Simple configuration'
    
    GRUB_DEFAULT=12
    #GRUB_HIDDEN_TIMEOUT=0
    GRUB_HIDDEN_TIMEOUT_QUIET=true
    GRUB_TIMEOUT=60
    GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
    GRUB_CMDLINE_LINUX=""
    GRUB_FONT=/boot/grub/DejaVuSansMono.pf2 
    
    # 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=1920x1200-24
    
    # 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_RECOVERY="true"
    
    # Uncomment to get a beep at grub start
    #GRUB_INIT_TUNE="480 440 1"
    The red 12 indicates the default which is the 13 line down (windows 7) for my wife.
    Code:
    cavsfan@cavsfan-desktop:~$ grep -e "menuentry " -e "submenu" /boot/grub/grub.cfg | sed 's/^[ \t]*//' | cut -d "'" -f1,2 | nl --starting-line-number=0
         0    menuentry "Lucid Lynx" {
         1    menuentry "Lucid Lynx (Recovery Mode)" {
         2    menuentry "Lucid Lynx Generic" {
         3    menuentry "Lucid Lynx Generic (Recovery Mode)" {
         4    menuentry "Precise Pangolin 12.04" {
         5    menuentry "Precise Pangolin 12.04 (Recovery Mode)" {
         6    menuentry "Precise Pangolin Generic 12.04" {
         7    menuentry "Precise Pangolin 12.04 Generic (Recovery Mode)" {
         8    menuentry "Quantal Quetzel 12.10" {
         9    menuentry "Quantal Quetzel 12.10 (Recovery Mode)" {
        10    menuentry "Quantal Quetzel Generic 12.10" {
        11    menuentry "Quantal Quetzel 12.10 Generic (Recovery Mode)" {
        12    menuentry "Windows 7" {
    I have a 60 second timeout because I am slow sometimes and need that time. Then there is my screen resolution 1920x1200-24 (24 is color bit depth).
    Then there is also the font line that has to be added.

    You must move 1 picture that is the resolution of your screen into /boot/grub/.
    sudo cp picture.jpg /boot/grub/ The picture will not display unless it is precisely as specified by GRUB_GFXMODE above.

    The following is dependant on finding that picture in that directory. It can be a .png .jpg .tga or .jpeg picture.

    /etc/grub.d/05_debian_theme
    (just 2 lines added after line 108

    Code:
    #!/bin/sh
    set -e
    
    # grub-mkconfig helper script.
    # Copyright (C) 2010  Alexander Kurtz <kurtz.alex@googlemail.com>
    #
    # GRUB is free software: you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation, either version 3 of the License, or
    # (at your option) any later version.
    #
    # GRUB is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    # GNU General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
    
    # Include the GRUB helper library for grub-mkconfig.
    . /usr/share/grub/grub-mkconfig_lib
    
    # We want to work in /boot/grub/ only.
    test -d /boot/grub; cd /boot/grub
    
    # Set the location of a possibly necessary cache file for the background image.
    # NOTE: This MUST BE A DOTFILE to avoid confusing it with user-defined images.
    BACKGROUND_CACHE=".background_cache"
    
    set_default_theme(){
        # Set a monochromatic theme for Ubuntu.
        echo "${1}set menu_color_normal=white/black"
        echo "${1}set menu_color_highlight=black/light-gray"
    
        if [ -e /lib/plymouth/themes/default.grub ]; then
            sed "s/^/${1}/" /lib/plymouth/themes/default.grub
        fi
    }
    
    module_available(){
        local module
        for module in "${1}.mod" */"${1}.mod"; do
            if [ -f "${module}" ]; then
                return 0
            fi
        done
        return 1
    }
    
    set_background_image(){
        # Step #1: Search all available output modes ...
        local output
        for output in ${GRUB_TERMINAL_OUTPUT}; do
            if [ "x$output" = "xgfxterm" ]; then
                break
            fi
        done
    
        # ... and check if we are able to display a background image at all.
        if ! [ "x${output}" = "xgfxterm" ]; then
            return 1
        fi
    
        # Step #2: Check if the specified background image exists.
        if ! [ -f "${1}" ]; then
            return 2
        fi
    
        # Step #3: Search the correct GRUB module for our background image.
        local reader
        case "${1}" in
            *.jpg|*.JPG|*.jpeg|*.JPEG) reader="jpeg";;
            *.png|*.PNG) reader="png";;
            *.tga|*.TGA) reader="tga";;
            *) return 3;; # Unknown image type.
        esac
    
        # Step #4: Check if the necessary GRUB module is available.
        if ! module_available "${reader}"; then
            return 4
        fi
    
        # Step #5: Check if GRUB can read the background image directly.
        # If so, we can remove the cache file (if any). Otherwise the backgound
        # image needs to be cached under /boot/grub/.
        if is_path_readable_by_grub "${1}"; then
            rm --force "${BACKGROUND_CACHE}.jpeg" \
                "${BACKGROUND_CACHE}.png" "${BACKGROUND_CACHE}.tga"
        elif cp "${1}" "${BACKGROUND_CACHE}.${reader}"; then
            set -- "${BACKGROUND_CACHE}.${reader}" "${2}" "${3}"
        else
            return 5
        fi
    
        # Step #6: Prepare GRUB to read the background image.
        if ! prepare_grub_to_access_device "`${grub_probe} --target=device "${1}"`"; then
            return 6
        fi
    
        # Step #7: Everything went fine, print out a message to stderr ...
        echo "Found background image: ${1}" >&2
    
        # ... and write our configuration snippet to stdout. Use the colors
        # desktop-base specified. If we're using a user-defined background, use
        # the default colors since we've got no idea how the image looks like.
        # If loading the background image fails, use the default theme.
        echo "insmod ${reader}"
        echo "if background_image `make_system_path_relative_to_its_root "${1}"`; then"
        echo " set color_normal=cyan/black"
        echo " set color_highlight=light-red/black"
        if [ -n "${2}" ]; then
            echo "  set color_normal=${2}"
        fi
        if [ -n "${3}" ]; then
            echo "  set color_highlight=${3}"
        fi
        if [ -z "${2}" ] && [ -z "${3}" ]; then
            echo "  true"
        fi
        echo "else"
        set_default_theme "  "
        echo "fi"
    }
    
    # Earlier versions of grub-pc copied the default background image to /boot/grub
    # during postinst. Remove those obsolete images if they haven't been touched by
    # the user. They are still available under /usr/share/images/desktop-base/ if
    # desktop-base is installed.
    while read checksum background; do
        if [ -f "${background}" ] && [ "x`sha1sum "${background}"`" = "x${checksum}  ${background}" ]; then
            echo "Removing old background image: ${background}" >&2
            rm "${background}"
        fi
    done <<EOF
    648ee65dd0c157a69b019a5372cbcfea4fc754a5  debian-blueish-wallpaper-640x480.png
    0431e97a6c661084c59676c4baeeb8c2f602edb8  debian-blueish-wallpaper-640x480.png
    968ecf6696c5638cfe80e8e70aba239526270864  debian-blueish-wallpaper-640x480.tga
    11143e8c92a073401de0b0fd42d0c052af4ccd9b  moreblue-orbit-grub.png
    d00d5e505ab63f2d53fa880bfac447e2d3bb197c  moreblue-orbit-grub.png
    f5b12c1009ec0a3b029185f6b66cd0d7e5611019  moreblue-orbit-grub.png
    EOF
    
    # Include the configuration of desktop-base if available.
    if [ -f "/usr/share/desktop-base/grub_background.sh" ]; then
        . "/usr/share/desktop-base/grub_background.sh"
    fi
    
    # First check whether the user has specified a background image explicitly.
    # If so, try to use it. Don't try the other possibilities in that case
    # (#608263).
    if [ -n "${GRUB_BACKGROUND+x}" ]; then
        set_background_image "${GRUB_BACKGROUND}" || set_default_theme
        exit 0
    fi
    
    # Next search for pictures the user put into /boot/grub/ and use the first one.
    for background in *.jpg *.JPG *.jpeg *.JPEG *.png *.PNG *.tga *.TGA; do
        if set_background_image "${background}"; then
            exit 0
        fi
    done
    
    # Next try to use the background image and colors specified by desktop-base.
    if set_background_image "${WALLPAPER}" "${COLOR_NORMAL}" "${COLOR_HIGHLIGHT}"; then
        exit 0
    fi
    
    # Finally, if all of the above fails, use the default theme.
    set_default_theme
    The custom menu entries will display at the top and after you are comfortable that they work
    then you can make the rest of the files unexecutable as in 1.5 of the wiki.

  10. #20
    Join Date
    Feb 2010
    Location
    Nr BrandsHatch, S'oaks UK
    Beans
    1,241
    Distro
    Lubuntu 13.04 Raring Ringtail

    Re: How to have a custom Grub2 menu that is maintenance free

    Hi!, Cavsfan,

    I must have misunderstood you, as I thought using the "tune2fs -L" command would change the entry names in grub menu [ & in grub Customizer]. Big disappointment!!

    The changes do show up in 'blkid' and in the left-hand Bookmarks list in Desktop Manager, - which is a great advantage - and also in Gparted, but strangely do not show up in Windows Disk manager.

    I have reverted all the installations in this computer which had grub Customer and the results are that the grub menus now show the entries I expect, without any duplicates.

    The duplicates are still there, however, and the 'new' grep menu entry command shows them in addition to those that actually display. which is rather disconcerting.
    EDIT: I was wrong, the duplicates are there, but they are hidden in the Advanced Options sub-menus.

    I have not altered the /etc/default/grub files and my grub backgrounds images are unchanged. Nor have I actually removed the Grub Customizer installlations, I have done just what Daniel Richter instructed in the GC 'How To'.

    So I am all ready to take the plunge.

    Chao!, bogan.
    Last edited by bogan; November 1st, 2012 at 11:55 PM. Reason: correction
    "Better Solutions may bring Worsened Problems": After Lao Tse, b. circa 405BC. a contemporary of Confucius, who died circa 600BC.
    They did things differently in those days, apparently!!

Page 2 of 58 FirstFirst 12341252 ... LastLast

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •