Month: March 2017

Top Resources For Distro Maintainers

Top Resources For Distro Maintainers

Distro Maintainer
Distro Maintainers looking serious….

    There are great resources for a Linux distribution maintainer and here are a few of my favorite. Most sources are geared towards Ubuntu based systems but a few like the Themes and Window Managers links are more or less universal.

Window Managers

The first site deals with the plethora of window managers that are out there. XWinMan lists many managers ranging from session and full desktop managers to just the bare windows themselves. There are some that are deprecated so be weary; but, it still has many that are not!
              Link:  http://www.xwinman.org/

Source List Generator

The next is a site that generates source list files for Ubuntu. This is really awesome for a number of reasons but the biggest for me is recovering from a bad dependency hell scenario. While it is rare, it is something that a maintainer and even a user needs to be aware of. Adding too many PPAs (which generally isn’t recommended) can cause loops and other strange and unexpected behavior from a package manager. In addition, the generator gives PPA info on a number of popular software this is not necessarily shipped with the system. It is well worth keeping in ones developer/user arsenal.
              Link:  https://repogen.simplylinux.ch/index.php

Themes

This third link deals with themes, icons, backgrounds, etc. Who doesn’t like themes? Anyway, it has many of these to spruce up the system and make it less boring. I started using Gnome-Look early on in my Linux experience and it has yet to fail to find me something cool or aesthetically pleasing.
              Link:  http://www.gnome-look.org/

Debootstrap Versions

This fourth link is geared towards building a Debian based distribution. Debootstrap is a great peace of software but needs the PPAs of the system it will setup in a subdirectory of ones system. This links provides the needed information.
              Link:  http://packages.ubuntu.com/search?keywords=debootstrap&searchon=names&suite=all&section=all

Ubuntu-Mini-Remix

This fifth link goes to a website that has minified Ubuntu ISOs. These are phenomenal for creating new distributions from pretty much scratch. It isn’t LFS kinda scratch but it’s as close as it’s likely to get.
              Link:  http://www.ubuntu-mini-remix.org/

Chrooting in and building up is the best way to do this. I have a video of the steps too:

Package List

This last link is great for doing source compiling. This can be used to find the install name of a package when an error output doesn’t give much of a hint. I must admit I only just recently heard of this page after attempting to compile a installer package. Going to the IRC of the developer was where I learned of this. It’s a bit embarrassing for not having known of this given how long I’ve been using various *nix systems. Still, I guess the old adage, “you can’t teach an old dog new tricks”, is proven wrong.
              Link:  http://packages.ubuntu.com/

Quick Test Server

Quick Test Server

Server

    There are times when I need a server in order to test some feature or bit of code. I don’t like spooling up a Linux, Apache, Mysql, and PHP (LAMP) or Linux, Nginx, Mysql, and PHP (LEMP) stack because it’s tedious. Notice what I did there? I made the whole sentence tedious to get you to think it really is tedious. It really isn’t but frankly, I needed a reason to write this. Anyway, so, what is one to do? Well, there are two option that come to mind and those are Python, Php, or Netcat. One might ask, “Whaaat? Rly?” Yup. Really. All one needs to do is open up a terminal/cli and get ta hackin.

    Python call up the Python module SimpleHTTPServer using the switch -m and then give it a port. Make the port greater than 1024 since those are reserved and require root to use. BAM! Open your browser of poison and go to localhost:portNumber or 127.0.0.1:portNumber.

Python Server

python -m SimpleHTTPServer 1337

I did not need to insert any index.html files to the directory. Python automatically gives a list of the directory contents when no index file is found. As a side note, Python doesn’t seem to read Php properly. I have yet to get it to work.

    For Php all one does is use the switch -S and then give it an address (127.0.0.1) and port. Again, make the port greater than 1024 since those are reserved and require root to use. BAM! Once more, open your browser of poison and go to localhost:portNumber or 127.0.0.1:portNumber.

Php Server

php -S 127.0.0.1:1337

It is worth noting that with Php I had to insert an index.php file into the directory I ran the command from. It doesn’t generate any list but does throw an error when no index is found. Additionally, this method seems to only work with Php files. To test if the Php server works, simply insert in the index.php :

<?php
    phpinfo();
?>

    For the last one we will look at Netcat. Netcat is the swiss army knife of the networking tools and has an interesting way of creating a kind of server. To start off, simply create a file called serve.sh. The name is arbitrary but that’s what we will use for this example. Then, in the file add

Netcat Server

#!/bin/bash

    echo "`cat index.html`"

When this is done, simply create an index.html as you would any other. In my case, I did:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Google Link</title>
</head>
<body>
    <h1><a href="http://www.google.com">Google</a></h1>
</body>
</html>

After all this prep, which isn’t much we simply run in the terminal where serve.sh and index.html is:

while true; \
do { \
    echo -e 'HTTP/1.1 200 OK\r\n'; sh serve.sh; \
} | nc -l 1337; \
done

One might need to press enter again to actually run it because of the \’s stating “look to next line for rest of command”. One can also just remove the \’s and put the whole command like so:

while true; do { echo -e 'HTTP/1.1 200 OK\r\n'; sh serve.sh; } | nc -l 1337; done

One can use Php with this by the way. All one does is rename index.html to index.php. Then one adds some code like in the Php example above. After that, in the serve.sh, edit the cat index.php to be php index.php. This has Php interpret the file which then has its output gets echoed back to the requester.
All of this needs some explaining. So what is happening is that the while loop is checking to see if there is anything left to run. Note that the first part before the semicolon tells the browser that there is a server where one requested one. IE, it confirms the request. Then, the serve.sh is ran. In serve.sh it echos out what cat prints from index.html or what Php prints from index.php. This is essentially sent as the file back to the requester. Thus, we can see the h1 sized Google anchor link in this example.

    Voila! A nice juicy server is ready for use in any project that needs one. If one is adventurous, one can use these simple servers to serve files on the local network. To do this, all you have to do is allow the port to accept connections using UFW and then change the address “127.0.0.1” to “0.0.0.0”. This isn’t recommended for long term use but can be useful when needing to transfer something or using an app that’s for the local network. Even then, one might be better off just using ssh or email! Still, in those rare times, all one does is allow the port to be open by using ufw.

ufw allow portNumber/tcp

To remove the rule:

ufw status numbered
ufw delete "the number associated with ones portNumber"
Schools Should Teach Kids Scripting

Schools Should Teach Kids Scripting

    Schools should teach kids scripting. When I say kids I am thinking of those old enough to be in grades 5-8. Forget actual programming (though one may argue scripting is programming) and get them into Bash. I say Bash because it’s already installed on most major platforms with Microsoft finally coming around in Windows 10. One may ask why and the answer is simple. It is simple. There is no need to install compilers and there is no need to worry about includes or imports or whatever else others have cleverly implemented to create despair in a programmer. Not only that, it gets the core ideas of programming down. Sure, it isn’t Object Oriented Programming (OOP) but that is a minor issue when we are talking about kids. The gist of programming is understanding iterations, functions, variables, assignment, general maths, and other bits and bobs. Once these are down, it is relatively easy to learn most languages. As an example of how easy it is to get started, I will show an example that prints to the terminal screen “Hello World!” and the current user that is logged in with a separate function for each: main and showUser.

Bash Example

#!/bin/bash

function main() {
    echo "Hello World!"; // Prints to the terminal Hello World.
    showUser;            // Calls showUser function
}

function showUser() {
    me=`whoami`;  // Runs a command and assigns the output to me
    echo $me;     // calls the variable me and prints to the terminal.
}
main; // Calls main function

When in a Linux environment this can be made more advanced with simple GUIs through zenity, yad, or dialog.
I wont show an example for those but one should get the drift.

    From the established core, one will then focus their attention on concepts like encapsulation, obfuscation, polymorphism, etc. Getting core concepts involving imperative statements and logical procedure is the hardest part. Having had my programming career start off this way makes me biased but it seems to me to be a more logical flow. Schools covering grades 9-12 should cover concepts of OOP by using Java which is a proper programming language. I advocate for Java because of its FX library and the tools that allow one to create full fledged programs. As case and point, let’s look at how easy it is to create a window with a button. To see how easy it is I will use an analogy of a play being setup.

Java Example

import javafx.application.Application;  // The building where the play is
import javafx.stage.Stage;              // The stage in the building
import javafx.scene.Scene;              // The scene of the play. Ie, are we in a city, park, house
import javafx.scene.layout.AnchorPane;  // The confinement of the objects in the scene. Like a house or ally with walls.
import javafx.scene.control.Button;     // The actual objects of the play. Plants, pots, food, etc.

public class Main extends Application {
    @Override
    public void start(Stage stage) {
        // define what is going to be in the scene
        AnchorPane pane = new AnchorPane();    // Create the confinement of where objects go.
        Button closeBttn = new Button("Close Stage Curtain");  // Create an object for our world. A button called Close Stage Curtain.

        pane.getChildren().add(closeBttn);            // Add to the confinement
        Scene scene = new Scene(pane, 800, 600);      // Determin what the scene is comprised of. Ie, dogs and cats with plants?

        stage.setTitle("The Phantome of the Opera");  // Tell the world what play we are seeing
        stage.setResizable(false);    // Limit the stage size to what size the scene says and no more or less
        stage.setScene(scene);        // Set our scene onto the stage
        stage.show();                 // Open the curtains

        closeBttn.setOnAction(e -> {
            stage.close();  // Close the stage curtain
        });
    }

    public static void main(String[] args) { launch(args); }
}

Excluding the fluff of importing the needed libraries and calling main, one can with nine to ten meaningful commands setup a window with a proper title and a button. Not only that, the button closes the window. Amazing! I also like using the play analogy because it gives the top to bottom logic of how Java operates to setup a window. In addition, Java uses HTML and CSS for styling windows. This is awesome because it adds another useful tool were one to get further along in learning all there is to know about tech. So what are your thoughts? Should schools teach kids in this order and with these selected languages? Comment below or Message me through email.