Guix

Setup / install

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
gpg --keyserver keys.gnupg.net --recv-keys 3D9AEBB5

wget ftp://alpha.gnu.org/gnu/guix/guix-binary-0.10.0.i686-linux.tar.xz
wget ftp://alpha.gnu.org/gnu/guix/guix-binary-0.10.0.i686-linux.tar.xz.sig
gpg --verify guix-binary-0.10.0.i686-linux.tar.xz.sig

su

cd /tmp
tar --warning=no-timestamp -xf /home/pl/guix-binary-0.10.0.i686-linux.tar.xz
mv var/guix /var/ && mv gnu /

ln -sf /var/guix/profiles/per-user/root/guix-profile \
~root/.guix-profile


cp ~root/.guix-profile/lib/systemd/system/guix-daemon.service \
/etc/systemd/system/
systemctl start guix-daemon && systemctl enable guix-daemon

mkdir -p /usr/local/bin
cd /usr/local/bin
ln -s /var/guix/profiles/per-user/root/guix-profile/bin/guix

mkdir -p /usr/local/share/info
cd /usr/local/share/info
for i in /var/guix/profiles/per-user/root/guix-profile/share/info/* ;
do ln -s $i ; done

guix archive --authorize < ~root/.guix-profile/share/guix/hydra.gnu.org.pub


Install (and start) the nscd name service recommended for foreign distro use of guix

\#apt-get install nscd

# to upgrade the system daemon on foreign distro

https://guix.gnu.org/manual/en/html_node/Upgrading-Guix.html#Upgrading-Guix

\#guix pull
\#systemctl restart guix-daemon.service


# groupadd --system guixbuild
for i in `seq -w 1 10`;
do
useradd -g guixbuild -G guixbuild \
-d /var/empty -s `which nologin` \
-c "Guix build user $i" --system \
guixbuilder$i;
done


# export PATH="/root/.guix-profile/bin:/root/.guix-profile/sbin"


As a user

$ guix package -i glibc-locales
$ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
$ guix package -i font-adobe-source-han-sans:cn


# guix-daemon --build-users-group=guixbuild

EMACS

1
2
3
guix package -i emacs.
guix package -i geiser
guix package -i guix

~/.bashrc

.bashrc
1
2
3
4
5
6
7
8

export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale"
export GUILE_LOAD_COMPILED_PATH="/home/pl/.guix-profile/lib/guile/2.0/ccache:/home/pl/.guix-profile/share/guile/site/2.0"
export INFOPATH="/home/pl/.guix-profile/share/info"
export LC_ALL="en_US"
export PATH="/home/pl/.guix-profile/bin:/home/pl/.guix-profile/sbin:$PATH"
export GUILE_LOAD_PATH="/home/pl/.guix-profile/share/guile/site/2.0"
export R_LIBS_SITE="/home/pl/.guix-profile/site-library/"

Note that the PATH must start with /home/pl/.guix-profile/bin

Purge the system Guile with:

.bashrc
1
2
3
$ export PATH=/home/mbc/.config/guix/current/bin:$PATH
$hash guix ;;to invalidate your shell's cache for the guix binary location.
$type guix ;;must return ~/.config/guix/current/bin/guix

An example .scm for packaging guile-json:

guile-json.scm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
(use-modules (guix packages)
(guix download)
(guix build-system gnu)
(guix licenses)
(gnu packages pkg-config)
(gnu packages guile) )


(package
(name "guile-json")
(version "4.3.2")
(home-page "https://github.com/aconchillo/guile-json")
(source (origin
(method url-fetch)
(uri (string-append "mirror://savannah/guile-json/guile-json-"
version ".tar.gz"))
(sha256
(base32
"0255c7f053z4p9mqzhpxwbfx3y47j9nfvlgnm8xasdclyzmjl9y2"))))
(build-system gnu-build-system)
(native-inputs `(("pkg-config" ,pkg-config)
))
(inputs `(("guile" ,guile-3.0)))
(synopsis "JSON module for Guile")
(description
"Guile-JSON supports parsing and building JSON documents according to the
specification. These are the main features:

@itemize
@item Strictly complies to @uref{http://json.org, specification}.
@item Build JSON documents programmatically via macros.
@item Unicode support for strings.
@item Allows JSON pretty printing.
@end itemize\n")

;; Version 1.2.0 switched to GPLv3+ (from LGPLv3+).
(license gpl3+))

To get some recipes of use from store:

.bashrc
1
2
3
4
5
$guix edit guile-json

$guix package --install-from-file=./Downloads/guile-json/guile-json.scm
$guix package -s guile-json

Configure EMACS/Geiser

look at the file ~/.configure/guix/current/bin which will provide you with the guix/guile binary path and the recipe for %load-path.

In EMACS configure Geiser with the above executable, and for the load path entry (which requests a file) use the ~/.configure/guix/current/bin file.

Share

linux-commands

Mostly for Debian, some Arch

Packages

To see all the files the package installed onto your system, do this:
dpkg-query -L

To see the files a .deb file will install
dpkg-query -c <package_name.deb>

To see the files contained in a package NOT installed, do this once (if you haven’t installed apt-file already:
sudo apt-get install apt-file
sudo apt-file update

then
apt-file list ‘package_name’

to find a file:

1
2
3
4
5
$ find / -name 'program.c' 2>/dev/null
$ find / -name 'program.c' 2>errors.txt

#find -mtime -3 (last 3 days)
#du | less to see size of all directories
/ Start searching from the root directory (i.e / directory)}
-name Given search text is the filename rather than any other attribute of a file
‘program.c’ Search text that we have entered. Always enclose the filename in single quotes.. why to do this is complex.. so simply do so.

Package manager hierarchy on Debian:
dpkg –> apt-get, aptitude –> Synaptic

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# dpkg -i DEB_PACKAGE
# dpkg -r PACKAGE_NAME

;;To List all Installed Packages
# dpkg -l *.deb | less

;;To Remove a Package and its Configuration files
# sudo dpkg -P {package_name}

;;To check Wether the package installed are not
# dpkg -l {package_name}

;;show the Location
# sudo dpkg -S {package_name}

# man dpkg

# dpkg -x {package_name} {location_were_to_extract}

Debian installation of a package

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

;;----install sources-----
;; Now, first get the source package:
apt-get source foo
;;and change to the source tree:
cd foo-*
;;Then install needed build-dependencies (if any):
sudo apt-get build-dep foo
;;Then create a dedicated version of your own build (so that you won't get confused later when Debian itself releases a new version)
dch -l local 'Blah blah blah'
;;And finally build your package
debuild -us -uc
;;If everything worked out fine, you should now be able to install your package by running
sudo dpkg -i ../*.deb



$ tar zxf file.tar.gz
$ tar zxf file.tgz
$ tar jxf file.tar.bz2
$ tar jxf file.tbz2
$ tar xf file.tar.xz

;;Now change directory
$ ls
$ cd path-to-software/
# ./configure
# make
# make install

dpkg-source -x foo_version-revision.dsc

will extract the package into a directory called foo-version.

If you want just to compile the package, you may cd into foo-version directory and issue the command

 dpkg-buildpackage -rfakeroot -b

to build the package (note that this also requires the fakeroot package), and then

 dpkg -i ../foo_version-revision_arch.deb

to install the newly-built package(s).

Mail

$mail

To delete message 21
& d 21

To delete messages 1-10
& d 1-10

Only works if you exit properly:

& quit OR
& q

Share

Cloud backup

Introduction

In the past I have used Ubuntu One until it went out of business, then ownCloud, until it went out of business. I have been looking for a method to perform bidirectional backup to a directory on my Hostgator shared server. Osync initially looked promising, but SSHs into the server too many times, exceeding the 12 allowable attempts per IP per 90 seconds imposed by Hostgator. I fell back to rsync, and had to hack the “bidirectional” feature in an unsatisfactory way.

Rsync

See here for setting up SSH keys. The command to upload from a local directory ~/syncd/ to Hostgator, preserving directory structure:

1
2
3
4
5
cd ~/syncd/
rsync -avzP --delete --rsh='ssh -p2222' /home/mbc/syncd mbcladwell@123.123.123.123:/home2/mbcladwell/public_html/

;;for test
rsync -avzP --delete --rsh='ssh -p2222' mbcladwell@123.123.123.123:/home2/mbcladwell/public_html/lnsDFoKytr /home/mbc/

for cron edit the file using the command crontab:

1
2
3
#crontab -e

0,15,30,45 * * * * rsync -azp --delete --rsh='ssh -p2222' /home/mbc/syncd mbcladwell@123.123.123.123:/home2/mbcladwell/public_html/

\$ps aux to list PIDs
\$kill

crontab -l to see crons

flags

-q quiet - use with cron
-v verbose
-r recursive
-R relative
-t times must be used to transfer only modified files in future backups
-a equivalent to -rlptgoD
-o owner
-g group
-p permissions
-D devices - transfer char and block device info
-z compress
-P same as -partial -progress
-partial retain partially transferred files
-progress show progress (should also use -v )

Create 2 batch files, one for upload and one for download.
I will use the upload syntax to register a cron job. The job will run every 15 minutes and back up to the cloud.

rsync-upload.sh
1
2
3

#!/bin/bash
rsync -avzP --delete --rsh='ssh -p2222' /home/mbc/syncd mbcladwell@123.123.123.123:/home2/mbcladwell/public_html/
rsync-download.sh
1
2
3
#!/bin/bash
rsync -avzP --delete --rsh='ssh -p2222' mbcladwell@123.123.123.123:/home2/mbcladwell/public_html/syncd /home/mbc/

If I use a second computer, manually run rsync-download.sh upon login. When returning to the primary computer, again manually run rsync-download.sh to capture any changes made on the auxilliary machine. As a reminder, I created a batch file that will prompt me on login. Add a new autostart with the Applications / Settings / Settings manager / Session and startup / Application autostart dialog with the command: xfce4-terminal -e “bash /home/pl/check-for-download.sh” –hold

check-for-download.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash

## xfce4-terminal -e "bash /home/pl/check-for-download.sh" --hold
## by default input assigned to the variable REPLY
echo "Run download script? [Y|n]:"
read

if [[ ("$REPLY" == "Y") || ( "$REPLY" == "" ) ]];
then
echo "starting download!"
./rsync-download.sh
else
echo "Download canceled."
fi

Backup to USB

I don’t want private keys in the cloud so I backup personal directories and files to a local USB.

keys-backup.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

#!/bin/bash
rm -r /media/mbc/vol1/bin
rm -r /media/mbc/vol1/.electrum
rm -r /media/mbc/vol1/.electrum-ltc
rm -r /media/mbc/vol1/.gnupg
rm -r /media/mbc/vol1/.keystorefiles
rm -r /media/mbc/vol1/.password-store
rm -r /media/mbc/vol1/.ssh

cp -r /home/mbc/bin /media/mbc/vol1
cp -r /home/mbc/.electrum /media/mbc/vol1
cp -r /home/mbc/.electrum-ltc /media/mbc/vol1
cp -r /home/mbc/.gnupg /media/mbc/vol1
cp -r /home/mbc/.keystorefiles /media/mbc/vol1
cp -r /home/mbc/.password-store /media/mbc/vol1
cp -r /home/mbc/.ssh /media/mbc/vol1

lsyncd

http://blog.acipo.com/using-rsync-to-transfer-files-to-your-hostgator-account/

username: syncd@granitemtn.net
password: EW27&v&cd)z+

We can now restart the lsyncd service by issuing the following command:
sudo service lsyncd restart

sudo su
ssh remote_mirror_ip_address
ls /remotesync

http://www.cerebralmastication.com/2011/04/fast-two-way-sync-in-ubuntu/

Osync

https://github.com/deajan/osync

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ git clone https://github.com/deajan/osync
$ cd osync
# sh install.sh
[root@xps osync]# ./install.sh
Created directory [/etc/osync].
Copied osync.sh to [/usr/local/bin].
Copied osync-batch.sh to [/usr/local/bin].
Copied ssh_filter.sh to [/usr/local/bin].
Created osync-srv service in [/lib/systemd/system] and [/etc/systemd/user].
Can be activated with [systemctl start osync-srv@instance.conf] where instance.conf is the name of the config file in /etc/osync.
Can be enabled on boot with [systemctl enable osync-srv@instance.conf].
In userland, active with [systemctl --user start osync-srv@instance.conf].
osync installed. Use with /usr/local/bin/osync
In order to make install statistics, the script would like to connect to http://instcount.netpower.fr?program=osync&version=1.2-beta3&os=Linux%20unknown%20unknown%20GNU%2FLinux
No data except those in the url will be send. Allow [Y/n]

Test that I can SSH into my server:

1
mbc@dc7700s:~$ ssh -p 2222 mbcladwell@123.123.123.123

Now perform a test transfer before using the configuration file:

1
./osync/osync.sh --initiator="/home/mbc/syncd/" --target="ssh://123.123.123.123:2222//public_html" --rsakey=/home/mbc/.ssh/id_rsa

Set up the configuration file sync.conf with the following variables:

INITIATOR_SYNC_DIR=”/home/mbc/lnsDFoKytr”
TARGET_SYNC_DIR=”ssh://mbcladwell@123.123.123.123:2222//home2/mbcladwell/public_html”
SSH_RSA_PRIVATE_KEY=”/home/mbc/.ssh/id_rsa”

As mentioned above, osync repeatedly confirms SSH accessibility, exceeding the login limits allowed by my provider. Insert a sleep statement in the
CheckConnectivityRemoteHost function to slow the script down. Hostgator allows 12 SSH logins per 90 seconds, with a fresh allocation of logins every 90 seconds.

osync.sh
1
2
3
4
5
6
7

function CheckConnectivityRemoteHost {
sleep 10
local retval

.....etc.

Share

Leaf statistics

Electricity costs

October – May

Peak Off-peak discount
Distribution charge 0.08692 0.05353 0.38415
Transition charge 0.00224 0.00224
Transmission charge 0.07884 0
Energy conservation charge 0.0025 0.0025
Renewable energy charge 0.0005 0.0005
Totals 0.171 0.05877 0.65632

June – September

||||
|—|—-|—|—|
|Distribution charge |0.14089| 0.05456| 0.61275|
|Transition charge| 0.00224 |0.00224 ||
|Transmission charge| 0.10412| 0 ||
|Energy conservation charge |0.0025| 0.0025||
|Renewable energy charge| 0.0005| 0.0005| |
|Totals| 0.25025| 0.0598| 0.76104|

Efficiency of transferring energy to forward motion:
electric vehicle: 60%
gasoline vehicle: 20%

http://ev-sales.blogspot.com/2016/11/fast-charging-september-2016.html

Share

Window Managers

Xfce4

A debian image contains Xfce4 as the default, so installation is easy. Good selection of software without all the crapware that comes with Gnome. If you prefer Arch, Manjaro Arch using Xfce4 as the default window manager. More comprehnsive utilities than stripped down WMs like I3.

When installing Debian, there is a special image for automatically installing Xfce4 (instead of Gnome).
downloaded torrent from http://cdimage.debian.org/debian-cd/7.4.0/i386/bt-cd/
use sha256sum debian-7.4.0-i386-xfce-CD-1.iso to verify

debian-7.4.0-i386-xfce-CD-1.iso.torrent 660 MB

Do not use unetbootin. Instead:

1
2
3
# fdisk -l   ;;to identify USB drive
# cp debian.iso /dev/sdb1
# sync

elect special installation to be able to install with Xfce
Selecting encrypted hard drive will start a >10 hour random write to disk which you can cancel out of and continue the install.

Select “Guided – use entire disk and set up LVM”; this is for the xfce window manager installation
Partition all files in one partition.
Once installed, modify the sources and UPGRADE to the latest packages.

1
#nano /etc/apt/sources.list

comment out the line referring to a cd and add:

deb http://http.debian.net/debian/ wheezy main contrib non-free
deb http://ftp.us.debian.org/debian/ sid main #for electrum

1
#apt-get update && apt-get dist-upgrade

From the documentation:

upgrade: used to install the newest versions of all packages currently installed on the system.
dist-upgrade: in addition to performing the function of upgrade, also intelligently handles changing dependencies with new versions of packages.

Add to startup

Go into settings > settings manager > session and startup > application autostart > add
name: MyStartItem
command: bash /home//mystartupscript.sh

Another option is to modify /etc/lightdm/lightdm.conf to add the following options:

display-setup-script > calls your mycustomloginvideo.sh before the login screen appears
session-setup-script > calls your mycustomdesktopvideo.sh before the user desktop session starts

[SeatDefaults]
greeter-session=unity-greeter
user-session=ubuntu
;;for your login screen, e.g. LightDM (Ubuntu 11.10) or GDM (11.04 or earlier)
display-setup-script=/usr/share/mycustomloginvideo.sh
;;for your desktop session
session-setup-script=/usr/share/mycustomdesktopvideo.sh

Repair shutdown button

Need to make the following 2 files and paste in contents

/etc/polkit-1/localauthority/50-local.d/consolekit.pkla
1
2
3
4
5
6
7
8
9
10

[restart]
Identity=unix-user:*
Action=org.freedesktop.consolekit.system.restart
ResultAny=yes

[stop]
Identity=unix-user:*
Action=org.freedesktop.consolekit.system.stop
ResultAny=yes
/etc/polkit-1/localauthority/50-local.d/udisks.pkla
1
2
3
4
5

[udisks]
Identity=unix-user:*
Action=org.freedesktop.udisks*
ResultAny=yes

http://unix.stackexchange.com/questions/76308/xfce-upgrade-from-squeeze-to-wheezy-broke-xfces-user-policies


i3

A robust, lightweight tiling window manager.

pacman -S dmenu

config in ~/.i3/config

set $mod Mod4
bindsym $mod+c exec ~/conkeror.sh

exec –no-startup-id i3-msg ‘workspace 2; exec emacs; workspace 1, exec ~/conkeror.sh’

~/.xinitrc has exec i3
~/.bash_profile has startx (Important- not .bashrc which is activated with each new console)

/etc/i3status.conf


StumpWM

Written in LISP. Memory intensive.

/stumpwm/configure to reconfigure and get things running

~/.stumpwmrc

man ./stumpwm makeinfo stumpwm.texi
info stumpwm

Share

Bitcoin

Fort Galt, a libertarian utopia in Chile that accepts Bitcoin.

Bitcoin’s rise driven by disgust with fiat’s and their management.

Bitcoin’s killer apps

Blockchain apps are deficient in all respects except that they can’t be censored.

The energy costs of bitcoin

When Bitcoin Grows Up

A list of all cryptocurrencies - https://coinmarketcap.com/

Share

blue-state-model

Innovation, tech incubators, winner take all, Boston,…

Share

arbital

Arbital is an ambitious effort to solve online discussion. 

https://arbital.com/ Arbital
Share