selfjungle Just another WordPress weblog


zfs and portage’s var directories

While /var is usually for non-crucial content, caches, pid files, etc, portage has a different idea [1]:

/var/db/pkg Portage stores the state of your system
/var/lib/portage The versions for the applications you have explicitly installed

These directories store the current tree state, there is no way recreating them if they are deleted.

So if you plan to use ZFS with separate / and /var to take a snapshot of /, install some packages and then rollback the snapshot as you changed your mind, your / and /var will be out of sync!

/var/db/pkg and /var/lib/portage has to be on /.

cp -r /var/lib/portage /usr/portage/var_lib_portage
cp -r /var/db/pkg /usr/portage/var_db_pkg
rm -rf /var/lib/portage /var/db/pkg
ln -s /usr/portage/var_lib_portage /var/lib/portage
ln -s /usr/portage/var_db_pkg /var/db/pkg


Tagged as: , No Comments

zfs set ditto blocks after file system creation

"The copies property works for all new writes, so I recommend that you set that policy when you create the file system or immediately after you create a zpool." [1]

So how can you force a complete reread-rewrite?
With (non-incremental) backup and restore:

# settings properties won't work:
zfs set copies=2 POOL/FS
zfs snapshot SNAPSHOT
zfs send SNAPSHOT | xz --threads=12 --verbose > FILE.img.xz
zfs destoy POOL/FS
xz --threads=12 --decompress --verbose  FILE.img.xz -c | zfs receive POOL/FS

# so you have to create & override a new FS with copies=2
zfs snapshot SNAPSHOT
zfs send SNAPSHOT | xz --threads=12 --verbose > FILE.img.xz
zfs destoy POOL/FS
zfs create ... -o copies=2  POOL/FS
xz --threads=12 --decompress --verbose  FILE.img.xz -c | zfs receive POOL/FS -F


Tagged as: No Comments


add -dpi 276 to /etc/X11/xinit/xserverrc

at firefox about:config set layout.css.devPixelsPerPx to 2

to be continued...

Filed under: Uncategorized No Comments

c++ for_each on multiple ranges

‚Ä©template<typename InputIter1, typename InputIter2, typename BinaryFunction>
BinaryFunction for_each_on_two_ranges(InputIter1 first1, InputIter1 last1, InputIter2 first2, BinaryFunction f) {
  for (; first1 != last1; ++first1, ++first2) {
    f(*first1, *first2);
  return f;

or with variadic templates:

void increment_iterator() {}
template<typename Arg1, typename... Args>
void increment_iterator(Arg1& arg1, Args&... args)

template<typename InputIter1, typename Function, typename... InputIters>
Function for_each_N(InputIter1 first1, InputIter1 last1, Function f, InputIters... iters) {
  for (; first1 != last1; ++first1) {
    f(*first1, *iters...);
  return f;

the following functor can take any parameter:

template<typename T>
struct Add {
  Add() : value() {}

  void operator()() {}
  template<typename U=T, typename... Args>
  void operator()(const U& arg1, const Args&... args) {
    value+= arg1;
  T value;

std::vector<int> a = { 1, 2, 3, 4, 5 };
std::vector<int> b = { 1, 2, 3, 4, 5 };
std::vector<int> c = { 1, 2, 3, 4, 5 };
std::vector<int> d = { 1, 2, 3, 4, 5 };

Add<int> sum2 = for_each_N(a.begin(), a.end(), Add<int>(), b.begin());
Add<int> sum4 = for_each_N(a.begin(), a.end(), Add<int>(), b.begin(), c.begin(), d.begin());
Tagged as: No Comments

use’s documentation in kdevelop

# from, download the Qt format: qch
# unzip it and copy to the dir, returned by:
qmake -query QT_INSTALL_DOCS
Filed under: Uncategorized No Comments

generic linux youcompleteme install

# install vundle[1]
mkdir -p ~/.vim/bundle
cd  ~/.vim/bundle
git clone ~/.vim/bundle/Vundle.vim
# edit your ~/.vimrc [2]
# open vim, and enter :PluginInstall
# YCM will be pulled but not installed:
cd ~
mkdir ycm_build
cd ycm_build
cmake -G "Unix Makefiles" . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp -DUSE_SYSTEM_BOOST=ON -DUSE_SYSTEM_LIBCLANG=ON
make ycm_support_libs

# edit your global ~/.vim/ [3]

[1] vundle:

Original YCM guide:

Filed under: Uncategorized No Comments

gdb command line history

edit ~/.gdbinit and add:

set history save
set history filename ~/.gdb_history
Filed under: Uncategorized No Comments


# usual gcov run:
lcov --directory BUILD_DIR -z
lcov --directory BUILD_DIR --capture -b SOURCE_DIR -o
genhtml --frames --legend -o COVERAGE_DIR

# gcc  & gcov version mismatch:
geninfo: ERROR: PATH/FILE.gcno: reached unexpected end of file

# executable and *.gcda files are created in the different build runs
# graph file has been compiled again after binaries built.
Processing FILE.gcda
PATH/FILE.gcda:stamp mismatch with graph file

$ hexdump -e '"%x\n"' -s8 -n4 myclass.gcda
$ hexdump -e '"%x\n"' -s8 -n4 myclass.gcno

Filed under: Uncategorized No Comments

format drive

parted -a optimal DEV
  rm NUM
  mkpart primary 0 -1
  set 1 boot on

mkfs.ext3 DEV1
Filed under: Uncategorized No Comments

nvidia libGL trouble

ldd $(which glxinfo) => /usr/lib/ (0x00007f3dd494f000)

instead of
ldd $(which glxinfo) => /usr/lib64/opengl/nvidia/lib/ (0x00007f2fbc62a000)

rm /usr/lib/
ln -s /usr/lib64/opengl/nvidia/lib/ /usr/lib/

Filed under: Uncategorized No Comments