selfjungle Just another WordPress weblog


openwrt post-flash

# set root password

# install web UI
ssh root@
  opkg update
# if you'll get 404 errors, edit /etc/opkg.conf and change the package paths:
  opkg install luci-ssl
# if you have default_postinst: not found, script returned status 127 errors, check if the package version is ok: maybe?
# remove & try again:
opkg remove --force-remove luci-ssl px5g libustream-polarssl libpolarssl luci luci-proto-ppp luci-mod-admin-full luci-base luci-lib-nixio  uhttpd-mod-ubus  uhttpd lua luci-app-firewall  luci-theme-bootstrap libiwinfo-lua liblua libuci-lua rpcd luci-lib-ip libubus-lua

# start web server
/etc/init.d/uhttpd start
/etc/init.d/uhttpd enable

# enable wifi
uci set wireless.@wifi-device[0].disabled=0; uci commit wireless; wifi
uci show wireless | grep disabled

login to and do the rest...

Tagged as: No Comments

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