LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Slackware (https://www.linuxquestions.org/questions/slackware-14/)
-   -   Trouble installing GRUB (https://www.linuxquestions.org/questions/slackware-14/trouble-installing-grub-4175481205/)

slack_ 10-17-2013 03:15 PM

Trouble installing GRUB
 
Hello I'm slack_ glad to be here. I'm currently working on a little project, if you can call it that, and I'm running into some trouble. Basically what I'm trying to do is create a key to get into my computer. I'm trying to set up /boot on /dev/sdb1(my usb) and install GRUB on said device as well. The desired effect is that you would't be able to get into my computer at all unless this usb device was plugged in. I've tried this with LILO and it doesn't want to work, and I've seen a method on the Arch wiki using GRUB so I figured I'd try that instead. I will explain the steps I've taken:

First off, I'm intending on running a dual-boot with Win7. So my partitioning scheme is as follows:

/dev/sda1(Windows boot)
/dev/sda2(Windows)
/dev/sda3(Partition shared between Win and Nix)

Then, using fdisk, I create a Primary partition /dev/sda4. This will be mounted as /. Next, I create a new Primary partition on /dev/sdb1(usb) and make it bootable. This will be mounted at /boot. Both partitions are ext4. So now my partitioning schemed looks like this:

/dev/sda1
/dev/sda2
/dev/sda3
/dev/sda4 Linux

/dev/sdb1 (bootable) Linux

Now, I go through the setup. I don't create a SWAP. I set the target partitions. As I said, /dev/sda4 target is /. Target for /dev/sdb1 is /boot. I skip creating a boot disk. I do a full install, and I skip installing LILO. Here's where I run into trouble.

After I configure the system, instead of starting over. I open up a new TTY and download grub-0.97-i486-9.txz from http://packages.slackware.com/ in extra/grub under the Slackware 14.0 32bit release. Then I run these commands:

installpkg grub-0.97-i486-9.txz (works successfully)

slackpkg update (can't resolve mirrors)
I've made sure to enable only one mirror under the US Slackware 14.0 section. I've tried multiple different ones, and even though I'm connected to the internet, the mirrors always fail.

However, just last night this part worked for me successfully. So, let's pretend that it works for me now. The next step after that I would run is:

slackpkg install grub

This is the error I get with that:

Code:


Looking for grub in package list. Please wait... DONE

No packages match the pattern for install. Try:

/usr/sbin/slackpkg reinstall|upgrade

Running the recommended command doesn't work for me.

colorpurple21859 10-17-2013 03:57 PM

You wouldn't happen to have installed slackware 64 and trying to use a package from slackware 32 bit? If so, I don't think that will work without setting up for multilib. If your running slackware64 installing grub2 from current would probably work.

slack_ 10-17-2013 04:56 PM

I am running Slack64 in fact. Although I believe I've tried to install GRUB2 before and it didn't work either. You say I need to get grub2 from current? Which mirror should I be using?

ReaperX7 10-17-2013 08:28 PM

All the mirrors in slackpkg's mirrors list should all have it.

If you are using Slackware 14.0 distribution you should get the packages from SlackBuilds.org, not the -current repository.

You'll need all the respective dependencies also for Grub2 as well:

os-prober-1.63
gnu-unifont-5.1
help2man-1.40.11
locale-gettext-1.05

Install order is as such:

locale-gettext-1.05
help2man-1.40.11
gnu-unifont-5.1
os-prober-1.63
grub-2.00

Then setup Grub using this method:

Code:

mkdir /boot/grub
grub-mkconfig -o /boot/grub/grub.cfg
grub-install /dev/sda

Because you added /boot as a USB drive on /dev/sdb you may need to check the /boot/grub/grub.cfg to make sure the bootloader is set properly to auto-detect the bootloader and kernel being set on a removeable drive.

Not to poke and shoot down your idea, but you very much so, over-complicated the system by using a /boot partition off the main drive. It's not a bad idea, but it's just over-complicated and setting up Grub2 is often very problematic as the USB drive must be bootable and read-ready at startup. Some ways around this might be to install grub to /dev/sdb and have the USB drive as the 1st bootable device with the HDD boot disabled.

You could have simplified your security by placing a password in the CMOS/BIOS for the hard drive so that without the password it won't boot, and protecting the CMOS with a password also.

slack_ 10-17-2013 08:40 PM

So, assuming I still wanted to go ahead and test out my method despite the fact that you say it's overcomplicated(I'm not arguing with you) then, using your grub setup instructions could I do:

Code:

mkdir /boot/grub
grub-mkconfig -o /boot/grub/grub.cfg
grub-install /dev/sdb1

Correct? I'm also assuming that making the directory /boot/grub should be done on the USB, given that I'm still attempting that method. By the way, when I'm running these commands should I be doing everything with /dev/sdb1 or /dev/sdb?

ReaperX7 10-17-2013 09:33 PM

It would be /dev/sdb as Grub would be installing to the master boot record of the drive, not the actual partition itself.

The /boot directory should be mounted for /dev/sdb1 and so all directories will in fact be on /dev/sdb1.

Basically you'd want to do something such as this to more or less ensure the /boot directory is in fact set for /dev/sdb1 for files to be properly placed (note this also assumes you're using an ext4 partition scheme, but this can be changed:

Code:

mount -v -t ext4 /dev/sdb1 /boot
mkdir /boot/grub
grub-mkconfig -o /boot/grub/grub.cfg
grub-install /dev/sdb

Your Slackware entry in Grub.cfg should read somewhat(?) similar to this:

Code:

menuentry "Slackware64 14.0 GNU/Linux" {
  set root=(hd0,3)
  linux /boot/vmlinuz root=/dev/sda3 ro
}

Note that the root= entry will have to be checked before you run grub-install. Make sure all the variables are set to ensure that it specifically reads correctly.

For further security you should also comment out the entry in fstab for your /boot partition as well so that the /boot partition and device /dev/sdb remains hidden. Be warned that udisks and udev could automount the device as well.

By enforcing the boot to the USB device you shouldn't require anything else... at least I hope so. Grub-2.00 is very tricky to work with at times and I'm still having issues with certain functions of it.

slack_ 10-17-2013 09:48 PM

Thank you so much for your replies, you've been immensely helpful. I'll be sure to take your advice and I'll let you know if it works out well.

colorpurple21859 10-17-2013 09:51 PM

This is the better way
Quote:

If you are using Slackware 14.0 distribution you should get the packages from SlackBuilds.org, not the -current repository.
I just gave it a try using current, one can get it work if just the grub package is installed, but just because I got it to work on my system doesn't mean it will work on a different system. The os-prober from current will cause Slackware 14.0 to lock-up hard.

slack_ 10-17-2013 11:04 PM

Well the packages from SlackBuilds worked out for me...I think. I'm very new to Slackware and I'm still getting the hang of installing packages and things like that. I extracted and built it using ./configure, make, and make install. Then I ran the commands I was told to run earlier:

Code:

mount -v -t ext4 /dev/sdb1 /boot
mkdir /boot/grub
grub-mkconfig -o /boot/grub/grub.cfg
grub-install /dev/sdb

However, when I got to grub-mkconfig, it said that the command grub-mkconfig doesn't exist.

ReaperX7 10-17-2013 11:15 PM

Technically using ./configure, make, make install isn't needed as often you end up installing packages inside /usr/local and lack management of those packages in pkgtool.

Most SlackBuilds are installed using this similar methodology:

Code:

tar -xzf grub2.tar.gz
mv -v grub-2.00.tar.xz grub2
cd grub2
ARCH=x86_64 ./grub2.SlackBuild
installpkg /tmp/grub-2.00-x86_64-SBo.tgz

This builds packages in a fakeroot-like environment, then fakeroot-installs, and repackages them, and all necessary files into their proper directories so that the pkgtool system can install them to their correct directories in /(root) or /usr.

slack_ 10-17-2013 11:54 PM

This method worked for me up until the second to last step. After building the package the last message I see is:

find: '/tmp/grub-2.00-x86_64-SBo.tgz' file not found

So obviously when I ran the installpkg command nothing installed.. I'm sorry I can't be more helpful with my error messages. It's hard to get error messages into a .txt from my chrooted environment in a LiveCD to my shared partition to windows in order to copy/paste them here.

ReaperX7 10-18-2013 12:04 AM

Check the /tmp directory for what files it lists:

Code:

ls /tmp
Often it can be labeled as -SBo and _SBo as well. Don't follow the example exactly though as I haven't been working with a Slackware system actively for a while now except on my laptop which hasn't been updated in a while now.

What LiveCD are you using? SalixOS, Gentoo, or one of the Debian/Ubuntu based Live disks?

slack_ 10-18-2013 12:37 AM

Hmm. Interestingly enough, the /tmp directory looked like this:

/tmp/SBo/grub-2.00/..

Then there was a bunch of files and an install file and such. I couldn't really install it will installpkg because there was no .tgz or txz files. So the only thing I could have done was ./configure, make, make install...

Either way grub-mkconfig still doesn't exist. Grub has proven to be notoriously hard to try to install in Slackware 64.

I'm just using a slackware iso I downloaded from the website and burned to a dvd. Not sure if I understood your question properly.

colorpurple21859 10-18-2013 05:38 AM

The package should be in this directory.
Quote:

/tmp/SBo/grub-2.00/
These
Quote:

locale-gettext-1.05
help2man-1.40.11
gnu-unifont-5.1
os-prober-1.63
need to be installed first before installing grub2 to keep from getting errors.

slack_ 10-18-2013 12:28 PM

Ah I see. I figured I didn't install them right. Well, whenever I figure out how to install those packages I guess this will work. I don't know what I did wrong but only one of the packages installed. One said, ./configure no such file or directory, and the other wouldn't let me run make install. I can't remember the error.

EDIT: By the way according to Slackbuilds, grub doesn't require the locale-gettext package.

La VloZ 10-18-2013 12:58 PM

You just have to download Grub2 source and compile it :)
All dependecies are available in slackware :)
I already did it :) i hate lilo :)

slack_ 10-18-2013 01:51 PM

Ok, so I've successfully installed all packages, including grub2. Well, all except the gnu-unifont package. I can't figure out how to download the pcf.gz package, and it's necessary for the slackbuild.

Captain Pinkeye 10-18-2013 02:16 PM

This is hopefully a total miss, but i shall ask anyway.

Quote:

Originally Posted by slack_ (Post 5047648)
After I configure the system, instead of starting over. I open up a new TTY ...

Did you reboot the system after install, or are you hanging right after the "exit and reboot" message in another terminal? Because in that case you should chroot the system.

ReaperX7 10-18-2013 03:25 PM

I often use wget to download stuff if I'm running a terminal outside of X11. Just cd to the directory you want it in, like /root/Downloads and then type in wget plus the url of the file. If I'm in X11, I just use Midori or Firefox depending on what's installed.

Locale-gettext is a recommended dependency for help2man.

La VloZ 10-19-2013 07:26 AM

You don't need SlackBuild to build Grub2

Note: YOU HAVE TO BE ON ROOT TO DO THIS, YOU CAN USE SU TO GAIN ROOT PRIVILIEGES.
download Grub2 from ftp://ftp.gnu.org/gnu/grub/grub-2.00.tar.gz
Then go to the directory where you've downloaded it Then run these commands
Code:

tar xfz grub-2.00.tar.gz
cd grub-2.00
./configure
make
make install
grub-install /dev/sda # I don't know what is your hard disk, probably is /dev/sda :)
grub-mkconfig -o /boot/grub/grub.cfg

You don't need to change the prefix on configure script :), Don't complicate it :)

On Slackware 14 you don't need to care about dependecies because its already installed :)
And i already did these steps because i hate Lilo :)

Good luck ^__^.

NOTE: If you do a kernel update probably grub won't find the new kernel image so you have just to run again the last command :
Code:

grub-mkconfig -o /boot/grub/grub.cfg

slack_ 10-20-2013 02:16 AM

Thanks, but I'm pretty sure I've successfully installed grub using the other method that was mentioned. I just need to start over fresh and verify that it works...

And hope that Grub will install to my USB :/

slack_ 10-20-2013 04:11 AM

Ok, thus far I've successfully installed Slackware, chrooted into the system, installed all the requred packages succesfully, the mounted /dev/sdb1 on /boot, created a /boot/grub directory and grub.cfg, then ran grub-install /dev/sdb.

I've also tried running grub-install --recheck /dev/sdb, as well as grub-install --target=i386-pc --recheck /dev/sdb. Here's the error I get:

Code:

/usr/sbin/grub-bios-setup: warning: attempting to install GRUB to a disk with multiple partition labels. This is not supported yet..
/usr/sbin/grub-bios-setup: warning: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged.
/usr/sbin/grub-bios-setup: error: will not proceed with blocklists

EDIT: Sorry, I thought I was editing, I did not mean to double post.

colorpurple21859 10-20-2013 08:22 AM

Try grub-install --force /dev/sdb may have to use grub-install --force --boot-directory=<directory that sdb1 is mounted on>/boot /dev/sdb for things to work right.

slack_ 10-20-2013 11:14 AM

This worked for me: grub-install --force /dev/sdb. Once I changed settings in the BIOS to boot from USB, and made a few small changes in /etc/fstab, then I tested it out. It works, so this is solved AFAIK. Now I can only boot into linux from USB. Can't remember but I'm pretty sure that if I have the key unplugged it just boots straight into Windows. Thanks for the help and input everyone. Cheers.

La VloZ 10-20-2013 05:33 PM

Slack_ please make the thread as solved :)

slack_ 10-20-2013 11:33 PM

Ok I will. But I have one last question first. For some reason none of the changes I make to grub.cfg actually take effect in grub. Not only that, but in grub.cfg there is only a menuentry for Windows, none for Slackware or Advanced options. And in grub, I only see Slackware and the Advanced options entry and not the one for Windows. Did I mess something up?

colorpurple21859 10-21-2013 06:40 AM

My guess is that your dealing with two grub.cfg, one in /boot/grub on Slackware root partition and one in /boot/grub on the usb key.

slack_ 10-21-2013 12:50 PM

Turns out you were right. Once I mounted my flashdrive after starting X there was, infact, a different grub folder with the grub.cfg. Thanks for the help everyone it's much much appreciated.

/


All times are GMT -5. The time now is 09:48 PM.