Monday 29 June 2015

Booting from a USB stick via grub2

I made a USB stick using unetbootin, on a Linux machine, booted up, changing the boot setting in BIOS to boot from the stick, and yet no luck. The system booted off disk instead.

Thanks to others who have posted on this topic, I was able to boot from the USB stick using grub2. I’m recording what I did here for reference. The first section below gives the commands once I was in the grub2 command line. Below that is information about how to figure out the partition to boot from and what the commands are doing.

The grub2 commands

Using (hd1, mdsdos1) as the example partition, the summary of commands once you are in the grub2 command line:
  • root=(hd1, mdsdos1)
  • chainloader +1
  • boot

The general overview

  • boot up and launch the command mode of grub2
  • figure out what partition represents the bootable USB drive
  • set that partition as the root
  • load the bootloader of the USB stick so it will be used to boot from
  • boot from this loaded bootloader, i.e. the one on the USB stick

The grubby details

  • When you get to the grub2 screen on booting up, press c to get into command mode.
  • Type ls to list the partitions on the system.
  • List the files on the partitions to figure out which one is the USB stick. Your internal system will usually be (hd0,0), so try one of the others first. e.g. ls (hd1, mdsdos1)
  • When you figure out which partition is the one you want to boot from, set it as the root for example root=(hd1, mdsdos1)
  • Then load up the boot loader by typing chainloader +1. This allows the current bootloader (grub2 in this instance) to boot a second bootloader (here, the one you want on your USB stick). See: http://www.linux.com/learn/answers/view/919-what-is-chainloading-and-how-do-it-do-it
  • Type boot to boot from the USB stick.

Sunday 24 May 2015

Where is java on Mac Mavericks?

Sometimes you just need to know where java is on the system. I still struggle with this sort of thing on a Mac. So, for my own sanity in future, here is what I found:

Java seems to be put in different places depending on whether you've installed the JRE or the JDK, and also depending on what version you are looking for.

JRE

I recently installed just the JRE for java 1.8.0_40 using the dmg from Oracle. (Ye olde double-click and install method.) This placed java under:

/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/

JDK

Find the jdks on the system with:

/usr/libexec/java_home

or

/usr/libexec/java_home -v 1.8

found a directory where my jdks (previously installed) were located. These were under:

/Library/Java/JavaVirtualMachines/

Meanwhile, java 1.6 sdk is sitting under

/System/Library/Java/JavaVirtualMachines/

Setting the default jdk system wide

 (Answer provided by Hughes M. on https://stackoverflow.com/questions/21964709/how-to-set-or-change-the-default-java-jdk-version-on-os-x)
  • leave all JDKs at their default location, under /Library/Java/JavaVirtualMachines. The system will pick the highest version by default.
  • To exclude a JDK from being picked by default, rename its Contents/Info.plist to Info.plist.disabled. That JDK can still be used when $JAVA_HOME points to it, or explicitly referenced in a script or configuration. It will simply be ignored by system's java command.
System launcher will use the JDK with highest version among those that have an Info.plist file.
When working in a shell with alternate JDK, pick your method among existing answers (jenv, or custom aliases/scripts around /usr/libexec/java_home, etc).

 

Setting the default jdk - in a one-off sense

Locate the java versions on the system (see above).

export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_121`

 or, if the version is unique, you could use

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

But don't do that second version if you are planning on having later versions installed but not the default.


Sunday 15 March 2015

Using the alternatives system (update-alternatives, /etc/alternatives)

Yes, it’s basic. However, I found it challenging to find a page with exactly the info I was looking for. So I’m recording the things I wanted in a single page here.

General Background

The alternatives system is a way for several programs that are installed on your system and that carry out the same, or similar, functions to be listed as alternatives (for each other). One of the installed programs will be designated as the default for this set of alternative programs. Examples where this may be used would be text editors or java versions.

Management of what alternatives are listed and which is set as the default is handled by the update-alternatives command. (On some systems, the alternatives command could be used.) Each of the programs in a set of alternatives is assigned a priority level. The alternative with the highest priority level determines the default chosen when running in auto mode.

The update-alternatives command creates, removes, maintains and displays information about the symbolic links that make up the alternatives system.

More details

For systems supporting the alternatives feature, symlinks are created from
/usr/bin/ to /etc/alternatives/ . This latter link is a symlink to the real program, which is determined by the priorities of the alternatives available.

On a package-based system (e.g. Debian, Ubuntu), a package creator sets the priority level. So you have to hope that the creator of a package considers the impact of the priority they set.

Downsides

One downside to the use of alternatives is probably mostly felt by old-schoolers (aka me) who really want to know what it is that is launched when we launch a program. For example, “vi”. If I type “vi”, am I getting vi or vim or something else? In olden days, I could just see if there were symlinks, if so follow them, and I’d know. Now, you’d have to access the alternatives system and puzzle it out via priorities.*

*Well, take that with a pinch of salt! That is my understanding and could be wrong. Leave a comment if it’s wrong and you know it, please. :-)

Working with alternatives

  • update-alternatives
  • alternatives
  • galternatives - a graphical system on Debian for working with the alternatives system. (I have not tried this.)


Working with alternatives - java from scratch

The notes below were from a point in time where I had just installed a new jdk (jdk1.7.o_71) on a machine. I then needed to register java in the alternatives system, and then add other java functionality into alternatives.

I cannot guarantee all the information below is strictly correct, as I’m writing this from my notes made at the time I did this, but the general pattern is as it happened. Please refer to the man page for update-alternatives for the ultimate truth.
  • Enter the new jdk into the alternatives system:

     sudo update-alternatives --install /usr/bin/java java /opt/jdk1.7.o_71/bin/java 2
    
  • If java was not already in your alternatives system, you set up a new configuration for java by running:

    sudo update-alternatives --config 
    
    If java is already there, then use --set not --config. See bullet point below. 
    
  • Include jar processing and the java compiler in the alternatives system in a similar way to the above.

    sudo update-alternatives --install /usr/bin/jar jar /opt/jdk1.7.0_71/bin/jar  2
    sudo update-alternatives --install /usr/bin/javac javac /opt/jdk1.7.0_71/bin/javac 2
    
  • Set these as the defaults in the (existing) alternatives setup using –set

    sudo alternatives --set jar /opt/jdk1.7.0_71/bin/jar
    sudo alternatives --set javac /opt/jdk1.7.0_71/bin/javac
    

For java, you may then wish to set up some environmental variables as per usual. If you were just to do this for a given session (probably not what you want to do long term though), then you could just run these commands in the case of the java discussed in this section:

export JAVA_HOME=/opt/jdk1.7.0_71/
export JRE_HOME=/opt/jdk1.7.0_71/jre
export PATH=$PATH:/opt/jdk1.7.0_71/bin:/opt/jdk1.7.0_71/jre