User Tools

Site Tools


linux:scribble

Scribble

Autotools

$ libtoolize --force
$ aclocal
$ autoheader
$ automake --force-missing --add-missing
$ autoconf
$ ./configure && make && make install

OR

$ autoreconf -vi

C

How to initialize structures and arrays properly?

I always keep forgetting about this one. Let's hope I won't keep forgetting since I'm going to write it down:

uint8_t data[50];
for (i = 0; i < 50; i++) {
  data[i] = 0;
}
/* memset() works as well */
memset(data, 0, sizeof(data));

struct time_t tm_tmp;
memset(&tm_tmp, 0, sizeof(tm_tmp));

same isn't always the same

Just a bit of example when the same isn't actually the same.

char *string = "foo\0";
char string[] = "foo\0";
char string[4] = "foo\0";

Actually, the first one is a const. Of course, fun begins when you try to modify it in any way 8-) Me fayled miserably today.

Returned pointer, stack and "fun"

Pitfall in 3 … 2 … 1 …

#include <stdlib.h>
#include <stdio.h>

int *
bar(int k)
{
        int l = 20;
        int *m = NULL;
        l = 20 + k;
        m = &l;
        return m;
}

int
main()
{
        int *i;
        int *j;
        i = bar(20);
        printf("i: %i\n", *i);
        j = bar(30);
        printf("i: %i, j: %i\n", *i, *j);
        return 0;
}

Results in printing 'i: 50, j: 50'. This has to do with stack. Just remember, if you don't want to lose it, dereference it(= make a copy). It was a nice pitfall for me, don't let it be yours :-)

printf stdint.h types

#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>

[...]
uint8_t myvar = 5;
printf("myvar: %" PRIu8 "\n", myvar);
[...]

Some reference at wiki.

shifts

Not exactly as I expected, but remember to shift from N to M as shown below otherwise you'll end up with completely different number. I'm wondering, though, whether this is MS case, because LS case seems to be exactly M to N.

uint16_t number = 305;
uint8_t data[2];

data[0] = number >> 8;
data[1] = number >> 0;

Cisco IOS notes

It doesn't belong here at all, but I didn't want to start new page just because of couple lines of text. Just some notes worth to remember; especially if you don't have Cisco certification nor too much experience managing Cisco switches :-)

telnet <switch ip>
switch> enable
switch# configure terminal

Now, you can configure hell out of that switch.

How-to core dump/segfault

I've collected the following information from couple sites, although everything is summarised here.

# sysctl -p fs.suid_dumpable=1 ; 
# sysctl -p kernel.core_uses_pid=1 ;
# ulimit -c unlimited ;

And small code to check whether core dumping works. Calling _assert()_ should work as well.

#include <signal.h>

void
main()
{
  raise(6);
}

And check-out core dump with gdb:

# gdb <program> <core-dump> ;

Git

99.9999% scraped from Intranets.

New branch from tag

git checkout -b newbranch v1.0

Fetch remote branch

git checkout –track origin/daves_branch

Go

Aka golang

JSON

Remember that struct attributes/members must begin with capital letter/character. Otherwise you'll get an empty JSON. It took me very long time to figure this one out :-(

json_test.go
package main
 
import (
  "encoding/json"
  "fmt"
)
 
// Attributes, eg. Name, must begin with capital letter/character, otherwise it won't work.
// Also, JSON mapping is shown.
type Message struct {
    Name string `json:"name"`
    Body string `json:"body"`
    Time int64  `json:"unix_time"`
}
 
func main() {
  m := Message{"Alice", "Hello", 1294706395881547000}
  b, err := json.Marshal(m)
  fmt.Println(err)
  fmt.Println(string(b))
}

iconv

Sharp LC-32FB500E displays properly only subtitles encoded as UNICODE.

iconv --from-code=cp1250 --to-code=UNICODE -o $out_file $in_file

Jenkins

Jenkins.instance.getItemByFullName("JobName").getBuildByNumber(JobNumber).finish(hudson.model.Result.ABORTED, new java.io.IOException("Aborting build"));
Thread.getAllStackTraces().keySet().each() {
    if (it.name.contains('YOUR JOBNAME')) {  
      println "Stopping $it.name"
      it.stop()
    }
}

libvirt

Priceless

bash-3.1# ./configure
[...]
checking for ebtables... /sbin/ebtables
checking for xdrmem_create in -lportablexdr... no
checking for library containing xdrmem_create... no
configure: error: Cannot find a XDR library
bash-3.1# # OK
bash-3.1# installpkg /tmp/portablexdr-4.9.1-x86_64-1.txz
bash-3.1# ./configure
[...]
checking for ebtables... /sbin/ebtables
checking for xdrmem_create in -lportablexdr... yes
checking for xdr_u_int64_t... no
checking where to find <rpc/rpc.h>... missing
configure: error: Unable to find <rpc/rpc.h>
bash-3.1# # WTF?
bash-3.1# ls -la /usr/include/rpc/rpc.h 
-rw-r--r-- 1 root root 64 Mar  8 06:13 /usr/include/rpc/rpc.h
bash-3.1#
bash-3.1# cat > test.c<< EOF
#include <rpc/rpc.h>
int
main()
{
  ;
  return 0;
}
EOF
bash-3.1# gcc -Wall test.c
In file included from test.c:1:0:
/usr/include/rpc/rpc.h:1:20: fatal error: config.h: No such file or directory
compilation terminated.
bash-3.1# # There you go ...
bash-3.1# cat -n /usr/include/rpc/rpc.h 
     1	#include "config.h"
     2	#include <rpc/types.h>
     3	#include <rpc/xdr.h>
bash-3.1# # And line No.1 is the winner. 

Note: I found out later my system got “corrupted” along(as it happens with compat32 and multilibs from time to time), so that might be the issue behind error above. But libvirt is long gone, replaced and forgotten now.

loop-AES

Resize encrypted LVM backed partition

root@foo:# umount /encrypted

root@foo:# lvextend -L +1T /dev/mapper/encrypted

root@foo:# losetup -F /dev/loop3
Password: 

root@foo:# fsck -f /dev/loop3
fsck from util-linux 2.22.1
e2fsck 1.42.6 (21-Sep-2012)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure                                           
Pass 3: Checking directory connectivity                                        
Pass 4: Checking reference counts                                              
Pass 5: Checking group summary information                                     
/dev/loop3: 1065215/59539456 files (1.9% non-contiguous), 218308597/238138368 blocks

root@foo:# resize2fs /dev/loop3 
resize2fs 1.42.6 (21-Sep-2012)
Resizing the filesystem on /dev/loop3 to 506573824 (4k) blocks.
The filesystem on /dev/loop3 is now 506573824 blocks long.

root@foo:# mount /encrypted

Funny thing is, it seems much harder to resize encrypted partition via cryptsetup/dm-crypt.

MySQL

Convert database to UTF-8 encoding

Originally found at a2hosting.com

Run mysql and check the encoding:

SELECT default_character_set_name FROM information_schema.SCHEMATA S WHERE schema_name = "DBNAME";
SELECT CCSA.character_set_name FROM information_schema.`TABLES` T,information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA WHERE CCSA.collation_name = T.table_collation AND T.table_schema = "DBNAME" AND T.table_name = "TABLENAME";

Change encoding of tables:

cat > ~/.my.cnf <<EOF
[client]
user=USER
password=PASSWORD
EOF
mysql --database=DBNAME -B -N -e "SHOW TABLES" | awk '{print "SET foreign_key_checks = 0; ALTER TABLE", $1, "CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; SET foreign_key_checks = 1; "}' | mysql --database=DBNAME

Change encoding of DB itself:

ALTER DATABASE DBNAME CHARACTER SET utf8 COLLATE utf8_general_ci;

Remove ~/.my.cnf or edit out username and password.

OpenOffice/LibreOffice

Convert documents to PDF from command line

Found at askubuntu.com. Note that LibreOffice didn't like UTF-8 characters in file names, resp. non-ASCI chars(I'm not sure if those actually were in UTF-8 or not). Also, you don't have to specify full path to document you want to convert. On the contrary, actually.

libreoffice --headless --invisible --convert-to pdf --outdir ~/dir  ~/dir/file_to_convert.pptx

Open Sound System (OSS) - license expired

You've updated your OSS for whatever reason, but you get the following notice:

****************************************************************
* NOTE! Your Open Sound System evaluation license has expired  *
****************************************************************

Ok. You've done # soundoff; soundon; and still get the note and your sound still doesn't work. What you might want to try is to:

bash-4.2# soundoff

bash-4.2# echo "Given the changes in GNU/Linux distrubutions, it's possible"
bash-4.2# echo "you'll have to change your path. Also, change kernel version!"
bash-4.2# find /lib/modules/3.4.49/ -name \*oss\*
/lib/modules/3.4.49/kernel/oss
/lib/modules/3.4.49/kernel/oss/oss_cs4281.ko
/lib/modules/3.4.49/kernel/oss/oss_envy24ht.ko
/lib/modules/3.4.49/kernel/oss/oss_trident.ko
/lib/modules/3.4.49/kernel/oss/osscore.ko
/lib/modules/3.4.49/kernel/oss/oss_usb.ko
/lib/modules/3.4.49/kernel/oss/oss_hdaudio.ko
/lib/modules/3.4.49/kernel/oss/oss_emu10k1x.ko
/lib/modules/3.4.49/kernel/oss/oss_ich.ko
/lib/modules/3.4.49/kernel/oss/oss_ymf7xx.ko
/lib/modules/3.4.49/kernel/oss/oss_atiaudio.ko
/lib/modules/3.4.49/kernel/oss/oss_audioloop.ko
/lib/modules/3.4.49/kernel/oss/oss_sbpci.ko
/lib/modules/3.4.49/kernel/oss/oss_madi.ko
/lib/modules/3.4.49/kernel/oss/oss_sbxfi.ko
/lib/modules/3.4.49/kernel/oss/oss_audigyls.ko
/lib/modules/3.4.49/kernel/oss/oss_digi96.ko
/lib/modules/3.4.49/kernel/oss/oss_imux.ko
/lib/modules/3.4.49/kernel/oss/oss_via823x.ko
/lib/modules/3.4.49/kernel/oss/oss_sblive.ko
/lib/modules/3.4.49/kernel/oss/oss_fmedia.ko
/lib/modules/3.4.49/kernel/oss/oss_cmi878x.ko
/lib/modules/3.4.49/kernel/oss/oss_userdev.ko
/lib/modules/3.4.49/kernel/oss/oss_audiopci.ko
/lib/modules/3.4.49/kernel/oss/oss_cs461x.ko
/lib/modules/3.4.49/kernel/oss/oss_ali5455.ko
/lib/modules/3.4.49/kernel/oss/oss_cmpci.ko
/lib/modules/3.4.49/kernel/oss/oss_via97.ko
/lib/modules/3.4.49/kernel/oss/oss_midimix.ko
/lib/modules/3.4.49/kernel/oss/oss_envy24.ko
/lib/modules/3.4.49/kernel/oss/oss_midiloop.ko
/lib/modules/3.4.49/kernel/oss/oss_solo.ko
/lib/modules/3.4.49/kernel/oss/oss_geode.ko
/lib/modules/3.4.49/kernel/oss/oss_hdsp.ko

bash-4.2# echo "Check the list of files above, resp. make sure"
bash-4.2# echo "these are really and only OSS modules!"
bash-4.2# find /lib/modules/3.4.49/ -name \*oss\* -delete

bash-4.2# soundon
Relinking OSS kernel modules for "3.4.49 SMP mod_unload "
This may take few moments - please stand by...
Relinking OSS kernel modules finished
[...]

And you should be all set up and running.

PXE

“Initial menu has no LABEL entries!” - some files are missing on your PXE server. It's not (that) easy to find out which ones though. Just make sure you have everything there. If you have two, or more, PXE servers, then make sure they're synchronized(they have the same set of files).

Puppet

Generate graph/PNG from dot file

/usr/bin/dot /tmp/cycles.dot -Tpng -o cycles.png

List all facts on Node

facter -p

Test puppet on Node

puppet agent --test <ADDITIONAL_PARAMS>

Treatchery and trickery

Let's say you write something like this:

class foo {
  package { 'apache2': }
  service { 'apache2': }
}

Now, if you've thought these are just abstracts and you're going to work with them later, you were wrong and might be unpleasantly surprised later. What it means is: Puppet, be a good chap, and install apache2 for me and make sure it's up and running. Yep, you're reading that right. Obvious, you say? Well, not really, it isn't. If I declare something like this I expect nothing to happen because I didn't say what should've happen. Obvious, now, is there are some defaults that apply and Puppet will act whether you like it or not.

Oh, and btw, it seems like require ⇒ Package['apache2'] won't fix this. You must do in order to have package installed:

Package['apache2'] {
  ensure => 'installed',
}

"no certificate found and waitforcert is disabled"

# On client
puppet cert clean
service puppet stop
rm -rf /var/lib/puppet/ssl/
# and get a new SSL cert - d'oh!

QEMU

Bigger resolutions via VNC, vga std, X11

All you need is to configure your monitor properly. Really. Too bad DDC(?) is not implemented which would make it easier. Anyway, if you're lazy you can use any of monitor definitions below or any other monitor, if you know the specifications. I figured it doesn't matter what you put in since it's VNC/virtual.

One more thing. Prior to correct configuration of Monitor, I've noticed messages in /var/log/Xorg.0.log about insufficient memory for resolutions higher than 800×600. So I've used VideoRAM option(described here), but it seems it is not needed at all and VideoRAM gets increased “on demand” in correlation with resolutions used.

[...]
Section "Device"
    Identifier     "Card0"
    Driver         "vesa"
    VendorName     "Unknown Vendor"
    BoardName      "Unknown Board"
    VideoRAM       8192
EndSection

Section "Monitor"
    Identifier     "Monitor0"
    VendorName     "Unknown"
    ModelName      "HP ZR24w"
    HorizSync       24.0 - 80.0
    VertRefresh     59.0 - 61.0
    Option         "dpms" "true"
    Option         "StandbyTime" "10"
    Option         "SuspendTime" "15"
    Option         "Off" "10"
EndSection

Section "Monitor"
    Identifier     "Monitor1"
    VendorName     "Neovo"
    ModelName      "F-419"
    HorizSync       24.0 - 80.0
    VertRefresh     49.0 - 75.0
    Option         "dpms" "true"
    Option         "StandbyTime" "10"
    Option         "SuspendTime" "15"
    Option         "Off" "10"
EndSection
[...]

Kernel panic when booting off virtio-blk-pci

I've encountered this “strange” kernel panic when installing/updating LILO under kernel 2.6.37.6 and then booting into newer kernel. Now, I don't remember which “newer” kernel exactly, there were a few for sure, but it is 3.0.23 now.

I assume device type of virtio-blk-pci got changed, as shown below using # stat;, with (some) kernel version from fc to fd and LILO doesn't like it.

[... LILO ... boot/kernel messages and such ... ]
[    0.705349] VFS: Cannot open root device "fc01" or unknown-block(252,1)
[    0.705887] Please append a correct "root=" boot option; here are the availab
le partitions:
[    0.706802] fd00         6291456 vda  driver: virtio_blk
[    0.707390]   fd01         2816351 vda1 00000000-0000-0000-0000-000000000000
[    0.707991]   fd02          256032 vda2 00000000-0000-0000-0000-000000000000
[    0.708642] 0b00         1048575 sr0  driver: sr
[    0.709204] Kernel panic - not syncing: VFS: Unable to mount root fs on unkno
wn-block(252,1)
[    0.710315] Pid: 1, comm: swapper Not tainted 3.0.23 #1
[    0.710829] Call Trace:
[    0.711283]  [<ffffffff817640a4>] panic+0x8c/0x197
[    0.711770]  [<ffffffff817641eb>] ? printk+0x3c/0x3e
[    0.712311]  [<ffffffff81cacf95>] mount_block_root+0x149/0x1e9
[    0.712825]  [<ffffffff81cad224>] mount_root+0xe0/0xeb
[    0.713375]  [<ffffffff81179c11>] ? sys_unlink+0x11/0x20
[    0.713871]  [<ffffffff81cad39f>] prepare_namespace+0x170/0x19d
[    0.714437]  [<ffffffff81caccf0>] kernel_init+0x130/0x13c
[    0.714934]  [<ffffffff8176fa24>] kernel_thread_helper+0x4/0x10
[    0.715488]  [<ffffffff81cacbc0>] ? start_kernel+0x36c/0x36c
[    0.715993]  [<ffffffff8176fa20>] ? gs_change+0x13/0x13
/ # uname -a
Linux none 2.6.37.6 #3 SMP Sat Apr 9 22:49:32 CDT 2011 x86_64 GNU/Linux
/ # stat /dev/vda
  File: /dev/vda
  Size: 0               Blocks: 0          IO Block: 4096   block special file
Device: 5h/5d   Inode: 3295        Links: 1     Device type: fc,0
Access: (0660/brw-rw----)  Uid: (    0/    root)   Gid: (    6/    disk)
Access: 2012-03-30 06:36:03.000000000
Modify: 2012-03-30 06:36:03.000000000
Change: 2012-03-30 06:36:03.000000000
/ # uname -a
Linux none 3.0.23 #1 SMP Tue Mar 6 16:35:46 CDT 2011 x86_64 GNU/Linux
/ # stat /dev/vda
  File: /dev/vda
  Size: 0               Blocks: 0          IO Block: 4096   block special file
Device: eh/14d  Inode: 2063        Links: 1     Device type: fd,0
Access: (0660/brw-rw----)  Uid: (    0/    root)   Gid: (    6/    disk)
Access: 2012-03-30 06:39:11.000000000
Modify: 2012-03-30 06:39:11.000000000
Change: 2012-03-30 06:39:11.000000000

Mouse pointer problems via VNC

tags: kvm, qemu, mouse, pointer, vnc, problem, imprecision

I have a Debian as a VM and had problems with mouse pointer not aligning properly. It was just way off. At first, I thought it might be a X.org driver issue, but it isn't. I even compared X.org log to some Fedora(in VM as well) which works properly. Nothing. I've tried different VNC client. Still nothing. Then I've set on to search. I found a clue related to non-Linux OS - “Enhance Pointer Position”. Thus I set off to experiment a bit.

Answer is - pointer acceleration is to blame. If you, resp. I did, turn it off, mouse imprecision is gone. The following should take care of it(some bits are courtesy of https://wiki.archlinux.org/

Section "InputDevice"
    Identifier     "Mouse0"
    Driver         "mouse"
    Option         "Protocol" "auto"
    Option         "Device" "/dev/input/mice"
    Option         "ZAxisMapping" "4 5 6 7"
    Option         "AccelerationProfile" "-1"
    Option         "AccelerationScheme" "none"
EndSection

It also is suggested to use “usbdevice='tablet'” in Xen. Perhaps QEMU equivalent is going to work as well, but I haven't tested it.

Segfaulting QEMU 3..2..1..now!

QEMU version 1.0.1 and -current as of now(~ 29.3.2012).

Now, this is probably very stupid thing to do with QEMU. Most likely the stupidest combination of options one could think of and come up with, but I did anyway. And QEMU segfaults and it segfaults hard. Yes, it killed all other QEMU processes as well. Combination of -curses and -vnc seems to be deadly after you try to connect to VNC server. Yes, I've tried to experiment with parameters and leaving out -curses doesn't cause segfault.

Problem seems to be in ./ui/vnc.c at line 670, resp. see below. No, I don't know how to patch it :-\

[...]
static void vnc_write_pixels_generic(VncState *vs, struct PixelFormat *pf,
                                     void *pixels1, int size)
{
[...]
    } else if (pf->bytes_per_pixel == 1) {
        uint8_t *pixels = pixels1;
        int n, i;
        n = size;
        for(i = 0; i < n; i++) {
            vnc_convert_pixel(vs, buf, pixels[i]);
            vnc_write(vs, buf, vs->clientds.pf.bytes_per_pixel);
        }
    } else {
        /* HERE */
        fprintf(stderr, "vnc_write_pixels_generic: VncState color depth not supported\n");
    }
}
[...]

Way to reproduce:

/usr/bin/qemu-system-x86_64 
-name my-vm 
-m 512 
-smp 1 
-netdev vde,id=hostnet0,sock=/var/run/vde2/vde.virswitch0 
-device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:11:22:33,multifunction=on 
-drive if=none,id=disk1,file=/mnt/qemu/my-vm.img,format=qcow2,media=disk 
-device ide-hd,drive=disk1 
-boot order=c 
-curses 
-monitor unix:/var/run/kvm-wrapper/monitor/my-vm.unix,server,nowait 
-serial unix:/var/run/kvm-wrapper/serial/my-vm.unix,server,nowait 
-pidfile /usr/share/kvm-wrapper/run/local:my-vm-vm.pid 
-balloon virtio-balloon-pci 
-vnc 127.0.0.1:1 
-enable-kvm 
-vga std

Segfault messages:

Mar 24 19:54:25 shodan kernel: [3202733.788054] qemu-system-x86[26012]: segfault at 0 ip 00007f3f7daeed1c sp 00007fff7e9238a0 error 4 in qemu-system-x86_64[7f3f7d97f000+311000]
Mar 24 19:54:43 shodan kernel: [3202750.854077] qemu-system-x86[25291]: segfault at 0 ip 00007fd2f2418d1c sp 00007fff0a1eee40 error 4 in qemu-system-x86_64[7fd2f22a9000+311000]
Mar 24 20:09:09 shodan kernel: [3203617.187186] qemu-system-x86[26857]: segfault at 0 ip 00007fdbc05c0d1c sp 00007ffff37d9fa0 error 4 in qemu-system-x86_64[7fdbc0451000+311000]
Mar 24 20:09:25 shodan kernel: [3203633.099067] qemu-system-x86[26925]: segfault at 0 ip 00007ff06f2b3d1c sp 00007fff45cfe530 error 4 in qemu-system-x86_64[7ff06f144000+311000]
Mar 24 21:10:50 shodan kernel: [3207318.819095] qemu-system-x86[14948]: segfault at 0 ip 00007f5ae9bccd1c sp 00007fff269a9fa0 error 4 in qemu-system-x86_64[7f5ae9a5d000+311000]
Mar 24 21:12:00 shodan kernel: [3207388.062952] qemu-system-x86[15081]: segfault at 4 ip 00007f3495c0f1e5 sp 00007fff51c52af0 error 4 in qemu-system-x86_64[7f3495a93000+311000]
Mar 24 21:12:56 shodan kernel: [3207444.254077] qemu-system-x86[15181]: segfault at 0 ip 00007f3722368d1c sp 00007fff36dc5b60 error 4 in qemu-system-x86_64[7f37221f9000+311000]
Mar 24 21:13:39 shodan kernel: [3207487.761077] qemu-system-x86[15270]: segfault at 0 ip 00007fa81fbbad1c sp 00007fff3550cf50 error 4 in qemu-system-x86_64[7fa81fa4b000+311000]
Mar 24 21:23:11 shodan kernel: [3208059.451072] qemu-system-x86[15610]: segfault at 0 ip 00007fe875b75cbe sp 00007fff6e84ff00 error 4 in qemu-system-x86_64[7fe875a06000+311000]
Mar 24 21:33:31 shodan kernel: [3208679.724095] qemu-system-x86[16130]: segfault at 0 ip 00007fdf670b5cbe sp 00007fff6fe73600 error 4 in qemu-system-x86_64[7fdf66f46000+311000]
Mar 24 21:53:26 shodan kernel: [3209874.497204] qemu-system-x86[22532]: segfault at 0 ip 00007fc5a73ae69e sp 00007fff7dadbee0 error 4 in qemu-system-x86_64[7fc5a7205000+34a000]

PostgreSQL

Convert ASCI encoding to UTF-8

If you need to convert your dumped PgSQL database from ASCII into UTF-8, then you can try to use following command. I found it somewhere and it worked for me:

recode ASCII-BS..u8 <FILE>

SSH

CVS via SSH behind Firewall-Proxy

So it happens. You're in corporate network sitting behind strong firewall and proxy, yet you are in need of CVS tunneled through SSH, because there is no way you're going to send your password in plain text.

SourceForge.net CVS access is used as an example.

Substitutes in examples bellow:

  • DEVNAME - your SF.net login
  • PROJECT - SF.net project name
  • PROXY_SRV - FQDN/IP of proxy server
  • PROXY_PORT - port at which proxy server is listening at

Standard procedure won't work:

export CVS_RSH=ssh

cvs -z3 -d:ext:DEVNAME@PROJECT.cvs.sourceforge.net:/cvsroot/PROJECT co -P modulename

What now? How about this:

% cat > ~/cvs-ssh-sfnet.sh <<EOF
#!/bin/sh
/usr/bin/ssh \
  -o 'ProxyCommand=/usr/bin/proxytunnel -p PROXY_SRV:PROXY_PORT -d PROJECT.cvs.sourceforge.net:22' \
  -p 22 $*
EOF

% chmod u+x,go-rwx ~/cvs-ssh-sfnet.sh
% export CVS_RSH=~/cvs-ssh-sfnet.sh
% cvs -z3 -d:ext:DEVNAME@PROJECT.cvs.sourceforge.net:/cvsroot/PROJECT co -P modulename

SVN

I had to move projectX from REPO1 to REPO2. Well, to make a copy, because I didn't want to remove it from REPO1. I wasn't sure whether % svn copy; retains all history which I think is good idea to keep. So I've written set of scripts to:

  1. get revision numbers
  2. get rX:rY → diffs
  3. get commit messages
  4. generate shell “fire-and-forget” shell script to commit into REPO2
  5. since full commit messages were kept, script to check whether rXXXX is in REPO2 % svn log; - imperfect solution though!

Lessons learned:

  • % svn add; is not recursive
  • files added to repository later in project cycle - this is actually unresolved and (proven to be) serious problem! Check diff file for '(revision 0)' text? FIXME
  • it's best to do fresh checkout of both repositories, remove '.svn' with % find ./ -name \.svn -type -d | xargs rm -vrf;, then do % diff -ur OLD_REPO NEW_REPO;
  • double triple check you have all files and changes in! Look for 'Only in …' in % diff; output

TAR

Create XZ archive

Works the same as if you were creating GZIP/BZIP2. Found on the intranet:

tar -cf out.tar.xz --use-compress-program=xz file-or-dir
linux/scribble.txt · Last modified: 2018/07/27 06:54 by stybla