How to Burn a Bootable ISO Image to Disc in a Linux Terminal

How to Burn a Bootable ISO Image to Disc in a Linux Terminal:

There are many good free GUI apps to burn bootable linux iso images to disc in linux like k3b, brasero, xfburn and even the many free GUI burner apps for windows such as CdBurnerXP, ImgBurn, Infrarecorder, Active ISO Burner, BurnCDCC,  Free ISO Burner, ISOBurn, ISO Recorder, Passcape ISO Burner, ISO Workshop, Free Any Burn, Windows 7 Built-in Disc Image Burner etc etc, and even free linux CLI apps like cdrecord and many others, in this article however I will just mention 3 quick command line apps that are most common in linux distributions and mention an extra 4th choice, thats a menu driven linux CLI burning app for last

In the examples used here the default internal burner of the laptop is set as /dev/sr0, If your burner is not /dev/sr0, replace the device with the one your system uses.

Insert your blank CD/DVD/BD-R/RW then choose a method below

1.) wodim, issue command at terminal:

# wodim -v -eject -data -dao dev=/dev/sr0 speed=4 /path-to-bootable-linux-iso/foo.iso

- It is recommended to run wodim as root even if you can run it as a normal user to avoid errors and instability, read more about it in the notes below, and check the link provided there for further reading.
- For choosing Write Modes use DAO as primary choice or as a secondary choice use SAO for burning bootable ISO to disc, when using wodim anyways if you issue -dao as an option and for some reason its not possible to use DAO, wodim will automatically switch to using SAO, so to be safe just use the option DAO as -dao
- For wodim if the typical format of /dev/<foo> (/dev/sr0 here), doesnt work, issue the command:

# wodim  --devices

- A sample output of a laptop say for example with an internal DVD writer and another external USB DVD Writer drive plugged in will show:

wodim: Overview of accessible drives (2 found) :
 0  dev='/dev/sg1'    rwrw-- : 'HL-DT-ST' 'DVDRAM GUD0N'
 1  dev='/dev/sg4'    rwrw-- : 'Optiarc' 'DVD RW AD-7560S'

- Note how /dev/sr0 is referenced as /dev/sg1 with wodim and /dev/sr1 referenced as /dev/sg4 with wodim, but when you use lsblk command the output would show:

sr0     11:0    1  20.5M  0 rom
sr1     11:1    1  1024M  0 rom

- Both devices as /dev/sr0 as the internal laptop dvd writer and /dev/sr1 as the 2nd burner device as a usb plugged in external dvd writer
- So in this case if you want to use sr0 or sr1 devices for burning you can try:

(1st device, /dev/sr0)
# wodim -v -eject -data -dao dev=/dev/sg1 speed=4 /path-to-bootable-linux-iso/foo.iso


(2nd device, /dev/sr1)
# wodim -v -eject -data -dao dev=/dev/sg4 speed=4 /path-to-bootable-linux-iso/foo.iso

- A sample verbose output of a successful DVD iso burn with wodim in terminal, using a gentoo linux live iso for example:

# wodim -v -eject -data -dao dev=/dev/sg1 speed=4 /home/lowfatdaemon/Downloads/Gentoo/livedvd-amd64-multilib-20160514.iso

TOC Type: 1 = CD-ROM
scsidev: '/dev/sg1'
devname: '/dev/sg1'
scsibus: -2 target: -2 lun: -2
Linux sg driver version: 3.5.36
Wodim version: 1.1.11
SCSI buffer size: 64512
Device type    : Removable CD-ROM
Version        : 5
Response Format: 2
Capabilities   :
Vendor_info    : 'HL-DT-ST'
Identification : 'DVDRAM GUD0N    '
Revision       : '1.00'
Device seems to be: Generic mmc2 DVD-R/DVD-RW.
Current: 0x0011 (DVD-R sequential recording)
Profile: 0x0012 (DVD-RAM)
Profile: 0x002B (DVD+R/DL)
Profile: 0x001B (DVD+R)
Profile: 0x001A (DVD+RW)
Profile: 0x0016 (DVD-R/DL layer jump recording)
Profile: 0x0015 (DVD-R/DL sequential recording)
Profile: 0x0014 (DVD-RW sequential recording)
Profile: 0x0013 (DVD-RW restricted overwrite)
Profile: 0x0011 (DVD-R sequential recording) (current)
Profile: 0x0010 (DVD-ROM)
Profile: 0x000A (CD-RW)
Profile: 0x0009 (CD-R)
Profile: 0x0008 (CD-ROM)
Profile: 0x0002 (Removable disk)
Using generic SCSI-3/mmc DVD-R(W) driver (mmc_mdvd).
Supported modes: PACKET SAO
Drive buf size : 294912 = 288 KB
Beginning DMA speed test. Set CDR_NODMATEST environment variable if device
communication breaks or freezes immediately after that.
FIFO size      : 12582912 = 12288 KB
Track 01: data  2839 MB      
Total size:     3261 MB (323:05.10) = 1453883 sectors
Lout start:     3261 MB (323:07/08) = 1453883 sectors
Current Secsize: 2048
HINT: use dvd+rw-mediainfo from dvd+rw-tools for information extraction.
Blocks total: 2298496 Blocks current: 2298496 Blocks remaining: 844613
Speed set to 5540 KB/s
Starting to write CD/DVD at speed   4.0 in real SAO mode for single session.
Last chance to quit, starting real write in    0 seconds. Operation starts.
Waiting for reader process to fill input buffer ... input buffer ready.
Performing OPC...
Sending CUE sheet...
Starting new track at sector: 0
Track 01: 2839 of 2839 MB written (fifo 100%) [buf  60%]   3.9x.
WARNING: padding up to secsize.
Track 01: Total bytes read/written: 2977551360/2977552384 (1453883 sectors).
Writing  time:  594.333s
Average write speed   3.7x.
Min drive buffer fill was 55%
Fixating time:   35.103s
wodim: fifo had 46900 puts and 46900 gets.
wodim: fifo was 0 times empty and 26857 times full, min fill was 97%.

- Upon finishing the burning process, with the command using the option -eject, the system will automatically eject the disc, so you know its done.
- The successful iso burn result, was a bootable gentoo live DVD disc.

Troubleshooting Wodim:
- If  command "wodim  --devices" doesnt work or you get some error (being root), you can also try one of the following:

# wodim -scanbus


# wodim dev=help --devices

- If you get issues or an error saying: cannot open SCSI driver, try using the command lsblk, and look for the corresponding rom devices, if you see sr(n) where n is a number like for example sr0 listed as rom, if so then, try using these commands:

# wodim dev=/dev/sr0 --devices 


# wodim dev=/dev/sr0 --scanbus

- If you get output similar to these below, from the above commands that means you're all good and the device/s work, just use the sr(n) label for devices in this case sr0 for burning:

wodim: Overview of accessible drives (1 found) :
 0  dev='/dev/sr0'      rwrw-- : 'HL-DT-ST' 'DVDRAM GUD0N'


        2,0,0   200) 'HL-DT-ST' 'DVDRAM GUD0N    ' '1.00' Removable CD-ROM
        2,1,0   201) *
        2,2,0   202) *
        2,3,0   203) *
        2,4,0   204) *
        2,5,0   205) *
        2,6,0   206) *
        2,7,0   207) *

- You can also check to see if your kernel has support for burning or the proper kernel modules are loaded, Use lsmod command to check for modules named "sr_mod" and "sg", issue command:

$ lsmod | grep sr_mod


$ lsmod | grep sg

- If it is built into kernel then check output command of dmesg.
- You could also check permissions for device at /dev/sr0, issue command:

$  ls -l /dev/sr0

- Make sure to be root user when using wodim, to avoid errors and complications


2.) geniosimage, issue command at terminal:

$ genisoimage -r -J -o /path-to-bootable-linux-iso/foo.iso /dev/sr0


3.) growisofs, issue command at terminal:

(for CD)

$ growisofs -speed=4 -use-the-force-luke=dao -Z /dev/sr0=/path-to-bootable-linux-iso/foo.iso


(for DVD)

$ growisofs -speed=4 -dvd-compat -use-the-force-luke=dao -Z /dev/sr0=/path-to-bootable-linux-iso/foo.iso

- The -dvd-compat option is also used so that a complete lead-out is written to the media for maximum compatibility.
- The option -use-the-force-luke sets the write mode in this example DAO is used (and it is recommended for burning bootable ISO files to discs), as -use-the-force-luke=dao, see notes below for some information about write modes


4.) bashburn, install bashburn and run it in command line:

$ bashburn

- Go through the menus to edit configurations and burn your iso


- Make sure the apps you use here are installed in your system, if not then install them the way you would as your other apps in your chosen linux distribution
- Before burning downloaded bootable linux ISO file make sure the ISO file has been verified with its indicated checksum, from the upstream source where you got it from
- When burning bootable linux iso to disc (or even any data like audio files), its better to use a slower burning speed, safe choices are speeds of 2 or 4, slow burning is less error prone and allows the burning process to be done correctly and puts less stress on the CPU, burn in slow speeds to avoid making coasters (useless discs or a non-rewritable disc whose burn failed for any reason and cannot be repaired.).
- About Write Modes 101 (TAO, DAO, SAO, RAW, IPW):

    CD content is subdivided into consecutive sets of sectors known as tracks. In Track-At-Once (TAO) mode the laser stopped and restarted between each track. This delay causes transitional areas, known as pre-gaps between the tracks. These cannot be avoided, but recorders which support Variable-Gap Track-At-Once can adjust the size of the pre-gap to a minimum of 2 sectors (2/75 of a second).
    With most drives TAO mode is required for multi-session recording.

    In Disc-At-Once (DAO) mode disc contents are recorded in a single pass without stopping the laser. This allows data to be written to the the pre-gap areas to avoid them altogether.

    In Session at Once (SAO) mode multiple sessions can be recorded and finalized on a single disc. The resulting disc can be read by computer drives, but sessions after the first are generally not readable by CD Audio equipment.
    In Wodim, the DAO and SAO modes are synonymous. While most drives require multi-session discs to be authored in TAO mode, Wodim also has support for creating multi-session discs in SAO mode, assuming the underlying disc drive supports this.

    Raw Mode
    Disc images of CD-ROMs can be created either in raw mode (extracting 2,352 bytes per sector independent of the sector mode) or by obtaining only the actual data in the sector (2,048/2,336/2,352/2,324 bytes depending on the sector mode).The file size of raw mode disc images is always a multiple of 2,352 bytes. When such disc images are written to an optical media in raw mode, the 2,352 byte sectors, which already include the synchronization pattern and possibly error detection and correction data, are written to the disc as they are.

    Packet Writing
    Incremental Packer Writing (IPW) allows optical discs to be used in a manner similar to a writable block devices, i.e. it allows files to be created, modified or deleted on demand. This is achieved by writing a series of short (32k-256k) tracks on the disk in packet mode. CD-R/RW discs can be formatted into such packets, and the kernel pktcdvd module (packet writing driver) buffers up writes to the disk and transparently handles erasing and rewriting a whole packet at a time.

*In short when burning bootable linux ISO to disc, especially if its a DVD ISO it is best to just use DAO or as a secondary use SAO if DAO is not in the choices available for you, for writing audio CDs and you want a gap in between songs, use TAO.
- It is recommended to run wodim as root, as it says in (""), excerpt "In any case, the user running wodim needs read and write access to the particular device file on a Linux system. It is recommended to be root or install the application as suid-root, because certain versions of Linux (kernel) limit the set of SCSI commands allowed for non-root users. Even if usage without root identity is possible in many cases, some device drivers still may fail, show unexplainable problems and generally the problems become harder to debug. The risk for buffer-underruns is also increased. See the PROCESS SCHEDULING PRIORITY section below for more details. " I've actually tried using it on a non-root user and it does give errors and problems, to avoid coasters and wasting your time just run it as root user.
- If for some reason you can't eject it with the button on your cd/dvd drive, or you just want to eject with a terminal command, you can eject it with the following commands:

$ eject

/or (to eject a specific rom device, especially if you have several rom devices plugged in where your rom is sr0 here if it isnt, replace the device with the one your system uses.)

$ eject /dev/sr0

  Reference Links:
- ""
- ""

How to find out what device name in /dev directory is my DVD/CD Writer/Burner in the Linux Terminal

How to find out what device name in /dev directory is my DVD/CD Writer/Burner in the Linux Terminal

Best 3 ways on how to find out what device name in /dev directory is your DVD/CD Writer/Burner in the Linux Terminal: 

1.) By checking /proc/sys/dev/cdrom/ , issue command in terminal:

        $ cat  /proc/sys/dev/cdrom/


        $ less  /proc/sys/dev/cdrom/


        $ more  /proc/sys/dev/cdrom/

- a sample output in a laptop can look like this (showing other data including other device functions and even the drive speed):

drive name:        sr0
drive speed:        24
drive # of slots:    1
Can close tray:        1
Can open tray:        1
Can lock tray:        1
Can change speed:    1
Can select disk:    0
Can read multisession:    1
Can read MCN:        1
Reports media changed:    1
Can play audio:        1
Can write CD-R:        1
Can write CD-RW:    1
Can read DVD:        1
Can write DVD-R:    1
Can write DVD-RAM:    1
Can read MRW:        1
Can write MRW:        1
Can write RAM:        1

- The device name is: sr0
- So the device is in /dev/sr0

2.) With lsblk, issue command in terminal:

$ lsblk

- a sample output in a laptop can look like this:

sda      8:0    0 111.8G  0 disk
├─sda1   8:1    0   300M  0 part
├─sda2   8:2    0   128M  0 part
├─sda3   8:3    0 110.5G  0 part
└─sda4   8:4    0   900M  0 part
sr0     11:0    1   4.4G  0 rom
loop0    7:0    0   765M  1 loop /lib/live/mount/rootfs/filesystem.squashfs
zram0  254:0    0  1002M  0 disk
zram1  254:1    0  1002M  0 disk
zram2  254:2    0  1002M  0 disk
zram3  254:3    0  1002M  0 disk
zram4  254:4    0  1002M  0 disk
zram5  254:5    0  1002M  0 disk
zram6  254:6    0  1002M  0 disk
zram7  254:7    0  1002M  0 disk

- In the TYPE Column look for ROM, so the device name here is sr0
- So the device is in /dev/sr0

3.) With inxi, issue command in terminal, make sure to type is as you see it, that O in Optical has to be capitalized, or just copy and paste it:

$ inxi -d | grep Optical

- a sample output in a laptop can look like this:

Optical: /dev/sr0 model: HL-DT-ST DVDRAM GUD0N dev-links: N/A

- The device name is sr0, in /dev as /dev/sr0

Where Best to Put your Local User Scripts in a GNU/Linux system?

Where Best to Put your Local User Scripts in a GNU/Linux system?

In General its best to put it in /usr/local/bin/

If you have to ask then Don't use these directories to store your user scripts:

/usr/bin, /sbin and /bin

Leave them for package-managed executables.

If you need the script for all users on your system (but you can also use this for one user), stick it in /usr/local/bin/. An advantage to this is that the directory is already in your PATH so there is no need to edit files.

But it can also depend in who will use the scripts

It depends on who will use your script:

    Yourself only - $HOME/bin 
    You and other local users - /usr/local/bin
    Root only - /usr/local/sbin

That way you have your own scripts separated from the distribution-provided binaries.

Extract Files from Archived Tarballs at the Terminal in Linux

Extract Files from Archived Tarballs at the Terminal in Linux

Modern tar recognizes the format by itself! One command works with any supported compression method.

$ tar xf archive.tar.xz
$ tar xf archive.tar.gz

$ tar xf archive.tar.bz2

$ tar xf archive.tar

Adding a v will make the output verbose (ex: tar xvf or tar xfv actually the order doesnt really matter)

(Legacy Support: For the older versions for tar.gz its $ tar xvfz somefilename.tar.gz but still applicable though like it mentions above xf is enough in most cases)

For the Bunzip2 or bzip2 or bz2 or tar.bz2 file in a single step, add the j switch:

$ tar xfj somefilename.tar.bz2 or $ tar xvfj somefilename.tar.bz2

Take not that its using a lowercase j as a capital J is for a different option switch as mentioned below

$ tar -xJf file.pkg.tar.xz

(The -J is the flag that specifically deals with .xz files.)

(For basic unzipping)
$ unzip


(to extract to a certain directory)

$ unzip -d destination_directory/

In 7zip:

This command lists the contents of the zip:
$ 7z l

This command extracts the contents of the zip:
$ 7z x

To unrar, within the directory (the e option extracts):
$ unrar e foo_file.rar

To unrar to a specified directory:
$ unrar e foo_file.rar destination_directory/

To unrar with its own original directory structure
$ unrar x foo_file.rar

How to Change Ownership of a Directory in Linux

How to Change Ownership of a Directory in Linux:

- This  is the format for the command:
    # chown -Rv username:group directory
(-R switch is to make it recursive that means to change the permissions for all files and directories inside of the directory)
(-v switch makes it verbose, its optional)

For Example:

- Say your using semplice linux (a debian sid based distro) in a live session and used # apt-get source foo to download and unpack the source code of a package, then you notice that you cant access the files or change the contents of that folder, because in live sessions semplice uses luckyuser as the normal user and the usergroup as well for that user, but to use apt-get source you have to be root, therefor downloading source with apt-get will make that directory under the group ownership of root, and when you check
file details you will see it listed with root:root meaning root user on root group, while any file made with luckyuser is normal user

- So lets say the source package was emacs-defaults-46.1 it was also unpacked from the package.tar.xz, but you cannot change the contents of the directory in anyway, despite even trying to change user rights on it, you have to change the group ownership

- To do that you look at the emacs-defaults_46.1.tar.xz ownership it says root:root meaning it belongs to root user as owner and group, to change it you need to make it luckyuser:luckyuser, so issue the command:

(the command format is: # chown -R username:group directory)

# chown -Rv luckyuser:luckyuser emacs-defaults-46.1

- This changes ownership to luckyuser from root, now all the settings allowed to root is allowed to luckyuser user and group
- You can now edit the directory and all of its contents or even delete it completely

How to Upgrade a Specific Package and Nothing Else in Debian:

How to Upgrade a Specific Package and Nothing Else in Debian:

# apt-get install --only-upgrade <packagename>


# apt-get install --only-upgrade htop

- This command will only upgrade the already installed htop package in your debian system, and not upgrade anything else

Install Asian CJK Langauge Font Character Support in Debian (in this case Japanese, Chinese, Korean)

Install Asian CJK Langauge Font Character Support in OpenSUSE (in this case Japanese, Chinese, Korean):

Issue command at terminal:

# apt-get install fonts-arphic-ukai fonts-arphic-uming fonts-ipafont-mincho fonts-ipafont-gothic fonts-unfonts-core xfonts-intl-asian fonts-noto-cjk


- List fonts with this command:

$ fc-list

- Rebuilds cached list of fonts (after installing fonts and it doesnt work, run this command):

$ fc-cache -fv

-  So a better way to install it all and rebuild the cache list of fonts after in one command:

# apt-get install fonts-arphic-ukai fonts-arphic-uming fonts-ipafont-mincho fonts-ipafont-gothic fonts-unfonts-core xfonts-intl-asian fonts-noto-cjk && fc-cache -fv

How to Fix Common Broken Dependencies Problem with APT in Debian Linux

How to Fix Common Broken Dependencies Problem with APT in Debian Linux:
Example with Google Chrome

*Fixing Dependencies with apt-get -f install After installing a .deb Binary with dpkg

*After downloading Google Chrome Debian from Google, then installe it with dpkg

# dpkg -i google-chrome-*.deb

Selecting previously unselected package google-chrome-stable.
(Reading database ... 118596 files and directories currently installed.)
Preparing to unpack google-chrome-stable_current_amd64.deb ...
Unpacking google-chrome-stable (52.0.2743.82-1) ...
dpkg: dependency problems prevent configuration of google-chrome-stable:
 google-chrome-stable depends on fonts-liberation; however:
  Package fonts-liberation is not installed.
 google-chrome-stable depends on libappindicator1; however:
  Package libappindicator1 is not installed.

dpkg: error processing package google-chrome-stable (--install):
 dependency problems - leaving unconfigured
Processing triggers for gnome-menus (3.13.3-6) ...
Processing triggers for desktop-file-utils (0.22-1) ...
Processing triggers for mime-support (3.59) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for menu (2.1.47) ...
Errors were encountered while processing:

*Google Chrome was installed but it had some errors with some missing dependencies, doing 
# apt-get -f install 
, fixes this

Reading package lists... Done
Building dependency tree      
Reading state information... Done
Correcting dependencies... Done
The following additional packages will be installed:
  fonts-liberation libappindicator1 libdbusmenu-gtk4 libindicator7
The following NEW packages will be installed:
  fonts-liberation libappindicator1 libdbusmenu-gtk4 libindicator7
0 upgraded, 4 newly installed, 0 to remove and 757 not upgraded.
1 not fully installed or removed.
Need to get 1,031 kB of archives.
After this operation, 2,566 kB of additional disk space will be used.
Do you want to continue? [Y/n]
Get:1 unstable/main amd64 fonts-liberation all 1.07.4-1 [835 kB]
Get:2 unstable/main amd64 libdbusmenu-gtk4 amd64 12.10.2-1 [90.8 kB]
Get:3 unstable/main amd64 libindicator7 amd64 0.5.0-3 [52.6 kB]                                                                                                
Get:4 unstable/main amd64 libappindicator1 amd64 0.4.92-4 [52.5 kB]                                                                                            
Fetched 1,031 kB in 7s (130 kB/s)                                                                                                                                                           
Selecting previously unselected package fonts-liberation.
(Reading database ... 118702 files and directories currently installed.)
Preparing to unpack .../fonts-liberation_1.07.4-1_all.deb ...
Unpacking fonts-liberation (1.07.4-1) ...
Selecting previously unselected package libdbusmenu-gtk4:amd64.
Preparing to unpack .../libdbusmenu-gtk4_12.10.2-1_amd64.deb ...
Unpacking libdbusmenu-gtk4:amd64 (12.10.2-1) ...
Selecting previously unselected package libindicator7:amd64.
Preparing to unpack .../libindicator7_0.5.0-3_amd64.deb ...
Unpacking libindicator7:amd64 (0.5.0-3) ...
Selecting previously unselected package libappindicator1:amd64.
Preparing to unpack .../libappindicator1_0.4.92-4_amd64.deb ...
Unpacking libappindicator1:amd64 (0.4.92-4) ...
Setting up libindicator7:amd64 (0.5.0-3) ...
Setting up fonts-liberation (1.07.4-1) ...
Setting up libdbusmenu-gtk4:amd64 (12.10.2-1) ...
Processing triggers for libc-bin (2.21-7) ...
Processing triggers for fontconfig (2.11.0-6.3) ...
Setting up libappindicator1:amd64 (0.4.92-4) ...
Setting up google-chrome-stable (52.0.2743.82-1) ...
update-alternatives: using /usr/bin/google-chrome-stable to provide /usr/bin/x-www-browser (x-www-browser) in auto mode
update-alternatives: using /usr/bin/google-chrome-stable to provide /usr/bin/gnome-www-browser (gnome-www-browser) in auto mode
update-alternatives: using /usr/bin/google-chrome-stable to provide /usr/bin/google-chrome (google-chrome) in auto mode
Processing triggers for libc-bin (2.21-7) ...
Processing triggers for menu (2.1.47) ...

*Google Chrome now works, broken dependency issue now fixed

Further Notes:
- The command # apt-get -f install is usually used for when troubleshooting debian based system when there are installation dependency issues or upgrade issues after

How to Install Google Chrome Web Browser in Debian

A) Install Google Chrome in Debian with apt-get:

1.) Issue command at terminal

$ wget -q -O - | sudo apt-key add -

2.) Then edit /etc/apt/sources.list with an editor

# emacs -nw /etc/apt/sources.list

paste the following: deb stable main

save and exit.

3.) Sync with repos

# apt-get update

4.) Install google chrome:

# apt-get install google-chrome-stable


*Actually you have a choice of different versions
        google-chrome-beta (for beta)
        google-chrome-stable (for stable)
        google-chrome-unstable (for unstable/bleeding edge

*Recent versions of apt-get will automatically attempt to verify packages on download. If an appropriate key is not found or if the package is corrupted, you will get a message like the following:
             WARNING: The following packages cannot be authenticated! packagename

If you see this using this method dont worry about it, just choose y to say yes, to install these packages without verification? [y/N] y and let it install


B) Downloading the binary from google and installing with dpkg manually:

1.) Open a terminal window.
2.) Type in the following commands then hit Enter after each.

For 32-bit systems:
$ wget -c
 # dpkg -i google-chrome-*.deb
 # apt-get install -f

For 64-bit systems:
$ wget -c wget
 # dpkg -i google-chrome-*.deb
 # apt-get install -f

*To avoid error messages and annoying authentication errors with debian sources.list and google repo, its better to just download the binary and install with dpkg manually, even with debian sid
*When upgrading to a newer version, just download it again, and repeat the procedure, dpkg -i actually installs and upgrades the package if there is already an older version
*Reference to dpkg cheatsheet - A dpkg Cheat Sheet

Enabling Normal Non-Root Users to Use Ping in Linux

Enabling Normal Non-Root Users to Use Ping in Linux

- Sometimes you just want to ping a remote site or server to test something like your connection:

$ ping

- but get this error:
ping: icmp open socket: Operation not permitted

- However ping works for the root user, just not non root users. To enable ping for normal users, issue command below as root or use sudo:

# chmod u+s `which ping`

(Those are backticks not single quotes)

# chmod u+s /bin/ping

- Now it should work.

How to Install the Java (JDK) in OpenSUSE

How to Install the real Java (JDK) in OpenSUSE

(Tested Working in OpenSUSE Tumbleweed)

The problem of installing openjdk in opensuse when you think you installed openjdk but when you do a javac -version or call javac from commandline it just doesnt work

Well if you think of quickly installing openjdk 8 with zypper like this in commandline is gonna be enough:

# zypper se java-1_8_0-openjdk

Your actually just installing the JRE despite the name of the package which is likely to confuse anyone not familiar with opensuse, as it did me earlier, in defense of opensuse though, you can see why this is a problem is if you do a search with zypper and pay close attention to the packages and their corresponding summary definitions

# zypper se opendjk

Loading repository data...
Reading installed packages...

S | Name                                  | Summary                                                          | Type 
  | java-1_7_0-openjdk                    | SUSE's implementation of the OpenJDK 7 runtime environment       | package                    <- (the Summary states its just the JRE7)
  | java-1_7_0-openjdk-accessibility      | Accessibility connector for OpenJDK 7                            | package
  | java-1_7_0-openjdk-bootstrap          | SUSE's implementation of the OpenJDK 7 runtime environment       | package
  | java-1_7_0-openjdk-bootstrap-devel    | SUSE's implementation of the OpenJDK 7 Development Environment   | package
  | java-1_7_0-openjdk-bootstrap-headless | OpenJDK 7 runtime environment without X, audio and video support | package
  | java-1_7_0-openjdk-demo               | OpenJDK 7 Demos                                                  | package
  | java-1_7_0-openjdk-devel              | SUSE's implementation of the OpenJDK 7 Development Environment   | package           <- (openJDK 7)
  | java-1_7_0-openjdk-headless           | OpenJDK 7 runtime environment without X, audio and video support | package
  | java-1_7_0-openjdk-javadoc            | OpenJDK 7 API Documentation                                      | package
  | java-1_7_0-openjdk-plugin             | Java Web Start and plugin implementation                         | package
  | java-1_7_0-openjdk-src                | OpenJDK 7 Source Bundle                                          | package
  | java-1_8_0-openjdk                    | OpenJDK 8 Runtime Environment                                    | package                                   <- (the Summary states its just the JRE8)*
  | java-1_8_0-openjdk-accessibility      | OpenJDK 8 accessibility connector                                | package
  | java-1_8_0-openjdk-demo               | OpenJDK 8 Demos                                                  | package
  | java-1_8_0-openjdk-devel              | OpenJDK 8 Development Environment                                | package                            <- (And this is the the true openJDK 8)*
  | java-1_8_0-openjdk-headless           | OpenJDK 8 Runtime Environment                                    | package
  | java-1_8_0-openjdk-javadoc            | OpenJDK 8 API Documentation                                      | package
  | java-1_8_0-openjdk-plugin             | Java Web Start and plugin implementation                         | package
  | java-1_8_0-openjdk-src                | OpenJDK 8 Source Bundle                                          | package
  | java-1_9_0-openjdk                    | OpenJDK Runtime Environment                                      | package                                   <- (the Summary states its just the JRE9)
  | java-1_9_0-openjdk-accessibility      | OpenJDK accessibility connector                                  | package
  | java-1_9_0-openjdk-demo               | OpenJDK Demos                                                    | package
  | java-1_9_0-openjdk-devel              | OpenJDK Development Environment                                  | package                            <-(openJDK 9)
  | java-1_9_0-openjdk-headless           | OpenJDK Runtime Environment                                      | package
  | java-1_9_0-openjdk-javadoc            | OpenJDK API Documentation                                        | package
  | java-1_9_0-openjdk-src                | OpenJDK Source Bundle                                            | package

So if you want to install the openjdk and develop java apps with it, you have to install the openjdk-devel package with the version you want to use, in this example its openjdk 8:

# zypper in java-1_8_0-openjdk-devel

now you can try: java -version and javac -version , and get output like this, whereas you would have gotten the cnf command not found if you tried javac -version if you installed just java-1_8_0-openjdk , as its just the JRE , anyways as with other java installs there is no need to install the JRE version as installing the openjdk-devel the true openjdk package in opensuse, already contains a JRE so you can just do the following commands

$ java -version
openjdk version "1.8.0_101"
OpenJDK Runtime Environment (IcedTea 3.1.0) (suse-1.1-x86_64)
OpenJDK 64-Bit Server VM (build 25.101-b13, mixed mode)

$ javac -version
javac 1.8.0_101

- Nevertheless the naming convention of the package is still confusing, especially for people new to opensuse, they should just rename the openjdk JRE to openJRE or something, so even on quick glance its self explanatory

Resource Links:

Tumbleweed Android Studio and Java JDK Thread in the OpenSUSE Forum
Trying to get Android Studio to start but I'm getting an error saying JAVA_HOME points to a jre not a jdk, a...
Others have complained of the confusing package naming of opensuse like in this blog: - A Quick Review of OpenSUSE Tumbleweed! (2015)
an excerpt from this blog
"My only MAJOR complaint is the package naming and development packages. It’s FRUSTRATING hunting down each package, truly a nightmare compared to other distributions."

NOTE: However if you have multiple implementations of Java, when you want to select your preferred java implementation or switch to the one you prefer.

Select which multiple implementations of JRE and JDK and even Java Web Browser Plug-in installed then you can select which one to use with the update-alternatives commands below:

Java application launcher (JRE)
# /usr/sbin/update-alternatives --config java

Java compiler (JDK)
# /usr/sbin/update-alternatives --config javac

Java Web Browser (Web browser plug-in)
# /usr/sbin/update-alternatives --config javaplugin

Easy Way to Install and Maintain Multilibs with Slackware (Updated Way)

How to Install and Maintain Multilibs in Slackware with slackpkg+ 

(Easy Updated Way, Tested working in Slackware Current, it should work for Stable as well, just make sure to track the repos for stable for stable and current for current)

- Install Multilib in Slackware Current, and Keep the Multilib Enabled Slackware - Current up-to-date with slackpkg+:

1.) Install the latest binary package from slackpkg+
2.) Edit slackpkg.conf file with your desired editor, for examples emacs and nano are used:

# emacs -nw /etc/slackpkg/slackpkgplus.conf 

you can also use vim or nano for example:

# nano /etc/slackpkg/slackpkgplus.conf

add this line to the mirrorplus list:


3.) Then in REPOPLUS array add the entry - multilib , typically best right after slackpkgplus entry so it would look like this:

REPOPLUS=( slackpkgplus multilib restricted alienbob ktown mate )
#priority repo list: order of left priority, right less priority                           

4.) Save, then exit and run these commands in order, line after line:
# slackpkg update gpg
# slackpkg update
# slackpkg upgrade-all
# slackpkg install multilib

(Optionally: Another way is to install slackpkg+ then run this command to automatically setup everything that is to be done with the instructions above:

# /usr/doc/slackpkg+-*/

To uninstall re-run the same command again)

To keep multilib up-to-date:
After that, you can keep multilib up-to-date by running these commands in order, line by line:
# slackpkg update
# slackpkg upgrade-all
# slackpkg install multilib

*To uninstall multilib, edit the slackpkgplus.conf file located in /etc/slackpkg/slackpkgplus.conf and remove 'multilib' from PKGS_PRIORITY and REPOPLUS arrays, but do NOT delete the related MIRRORPLUS line, then run the following commands:

# slackpkg update
# slackpkg remove multilib

Note: this does NOT remove the core multilib packages, because they affect the 64bit system. Remove these with the following commands:

# slackpkg upgrade-all

then delete or comment the related MIRRORPLUS line, then run:

# slackpkg update

NOTE: This is a very basic sample slackpkg+ config file could look like with multilib setup:

WGETOPTS="--timeout=20 --tries=2"

PKGS_PRIORITY=( restricted alienbob ktown mate )
REPOPLUS=( slackpkgplus multilib restricted alienbob ktown mate ) #priority repo list: order of left priority, right less priority                           


NOTE: Using this method with slackpkg+ to Install and Keep Multilib up-to-date in Slackware Current, this is definitely easier than the old way, and you can do the initial setup manually or with /usr/doc/slackpkg+-*/ script in slackpkg+

Tips and a Fix for Troubleshooting Common Problems with slackpkg/slackpkg+:

- When errors happen first check the slackpkg+ config file, and the mirror list at /etc/slackpkg/mirrors and /etc/slackpkg/slackpkgplus.conf , make sure there are no typos or using of capital letters in the urls and make sure its all setup as mentioned above.
- Before installing and upgrading with slackpkg/slackpkg+, issue these commands first: 

# slackpkg update gpg
# slackpkg update
- Sometimes the urls in the mirrors are not up-to-date in this case you have to check and find the right urls that work
- To avoid problems use urls that are the same version as the system you use, so use urls with current when using current, or 14.2 with 14.2
- If you run into an error that says you have duplicate packages that are conflicting in /var/log/packages, what you have to do is check that directory of any packages that have either a duplicate of the same package or
essentially 1 package with double or multiple versions like foo_ver1.1 and foo_ver1.2 , all you have to do is remove the problematic package in this case  the older one, and it should work.

example issue duplicate slackpkg version conflict:

- When running slackpkg upgrade-all as below you come into contact with such an error:

# slackpkg upgrade-all

NOTE: Remember to re-run 'slackpkg update' after modifying slackpkgplus.conf

Checking local integrity... DONE
You have a broken /var/log/packages - with two versions of the same package.
The list of packages duplicated in your machine are shown below, but don't
worry about this list - when you select your action, slackpkg will show a
better list:


You can (B)lacklist, (R)emove, or (I)gnore these packages.
Select your action (B/R/I): 

- Issuing the command removepkg on slackpkg will not fix this issue, even if you reinstall slackpkg, instead issue this command: 
# ls /var/log/packages | grep slackpkg
- Fortunately the error gave the hint of the program that is causing the problem, so you get a list that looks something like this for example where you see the duplicate issue


- So you just uninstall the older or problematic version with this command: 
# removepkg /var/log/packages/slackpkg-2.81.1-noarch-1
- Now things should be back to normal, run the # slackpkg upgrade command now and it should work

NOTE: Before installing STEAM and VirtualBox, Wine and PlayonLinux on Slackware make sure to setup and install multilib in slackware first

Reference Links:
- ""
- ""
- ""
- ""
- ""
- "" *Linux4UnMe Channel basically mentions he used slackpkg+ to install multilibs in his slackware linux system, but doesnt explain how he did it, anyways i have tried to explain how to do this in detail above