Suppose I'm on machine DESKTOP and I want to copy files from
server APPLE to server BANANA. DESKTOP has access to both, but
firewalls and/or missing ssh keys prevent direct access between APPLE and
BANANA.
Regular scp(1) will now fail. It will attempt to do a direct copy
and then give up. This is where this
indirect scp wrapper
(view) comes in:
- First, it tries to do the direct copy.
- If that fails, it uses the local machine as an intermediary.
In this example you'll see it fail twice for the two source files and
then ...
So, hardware trouble caused a VPS to go down. This VPS was running a
MySQL server in a slave setup. Not surprisingly, the unclean shutdown
broke succesful slaving.
There are several possible causes for the slave setup breakage. This time it
was the local relay log file (mysqld-relay-bin.xxxx)
that was out of sync.
SHOW SLAVE STATUS\G looked like this:
...
Master_Log_File: mysql-bin.001814 <-- remote/master file (IO thread)
Read_Master_Log_Pos: 33453535 <-- remote/master pos (IO thread)
Relay_Log_File: mysqld-relay-bin.001383 <-- local/slave file (SQL thread)
Relay_Log_Pos: 34918332 <-- local/slave pos (SQL thread)
Relay_Master_Log_File: mysql-bin.001812 <-- remote/master file (SQL thread)
...
Last_Errno ...
Sometimes you're in a situation where you know that a database is
more heavily loaded than it should be. Time to figure out which queries
are stressing it the most.
The standard thing to do with a MySQL database would be to enable
query logging with general_log_file. Or, to get only slow
queries and those not using indexes, the log_slow_queries.
But, if this is a mission critical and heavily loaded database, adding
expensive logging may be just enough to give it that final push to
become overloaded.
Perhaps taking just a sample of queries is good enough too. In ...
The current django-mongodb-engine doesn't seem to ship with a working
manage dbshell command yet. Right now it returns this:
$ ./manage.py dbshell
...
File "/home/walter/.virtualenvs/myproject/lib/python2.6/site-packages/django/core/management/commands/dbshell.py", line 21, in handle
connection.client.runshell()
File "/home/walter/.virtualenvs/myproject/lib/python2.6/site-packages/django_mongodb_engine/base.py", line 108, in __getattr__
raise AttributeError(attr)
AttributeError: client
The fix is simple, patch your django_mongodb_engine with this:
--- django_mongodb_engine/base.py.orig 2011-11-15 11:53:47.000000000 +0100
+++ django_mongodb_engine/base.py 2011-11-15 11:54:07.000000000 +0100
@@ -7,6 +7,7 @@
from pymongo ...
So. SSL certificates are still black magic to me. Especially when they cause trouble.
Like when one of the sysadmins has forgotten to add the certificate bundle to the
apache2 config.
Then you get stuff like this:
$ hg pull -u
abort: error: _ssl.c:503: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Most web browsers do not notice this as they already have the intermediate CA files,
but /etc/ssl/certs/ca-certificates.crt seemingly doesn't.
The problem in this case was not that I was missing any certificates
locally. The problem was that the web server was not ...
You may not always have gdb(1) at hand. Here are a couple of other options
at your disposal.
#1 Use addr2line to get the crash location
$ cat badmem.c
void function_c() { int *i = (int*)0xdeadbeef; *i = 123; } // <-- line 1
void function_b() { function_c(); }
void function_a() { function_b(); }
int main() { function_a(); return 0; }
$ gcc -g badmem.c -o badmem
$ ./badmem
Segmentation fault
No core dump? You can still get some info.
$ tail -n1 /var/log/syslog
... badmem[1171]: segfault at deadbeef ip 00000000004004da sp 00007fff8825dcd0 error 6 in badmem[400000+1000]
$ echo 00000000004004da | addr2line -Cfe ./badmem
function_c
/home/walter/srcelf/bt/badmem ...
Sometimes you want a backtrace or a core dump from a process that you do not
want to stall. This could concern a multithreaded application of which some
threads are still doing important work (like handling customer calls).
Firing up gdb would halt the process for as long as you're
getting info, and raising a SIGABRT to get a core dump has
the negative side-effect of killing the process. Neither is acceptable in
a production environment.
In comes the handy gdb(1) option -ex. See this
hanging.c example that we will examine while leaving it running.
int c ...
While looking through opensips logs of a customer,
sometimes we would see the following:
ERROR:core:parse_via: invalid port number <110900>
ERROR:core:parse_via: <SIP/2.0/UDP 1.2.3.4:110900;branch=z9hG4bKabcdef...
ERROR:core:parse_via: parsed so far:<SIP/2.0/UDP 1.2.3.4:110900;branch=z9hG4bKabcdef...
ERROR:core:get_hdr_field: bad via
As you can see, that 6-digit port number is invalid. Furthermore, when sniffing this
traffic, we could see that the port number is almost right. The traffic came from
port 11090 (one less zero at the end).
Not only the Via header, the ...
If you want to be able to sniff your IPsec traffic with OpenSwan,
you'll need to get KLIPS instead of the default NETKEY
IPsec protocol stack.
Installing that on Ubuntu/Karmic should be a matter of:
~# apt-get install openswan-modules-source
~# cd /usr/src
/usr/src# tar jxvf openswan-modules.tar.bz2
/usr/src# cd modules/openswan
/usr/src/modules/openswan# make KERNELSRC=/lib/modules/`uname -r`/build module module_install
But it's not.
Right now, we're running the default Linux kernel 2.6.31-23-server on this Karmic machine.
And as it happens, in 2.6.31 they removed networking compatibility ...
After disk failure on our company music server, I lost my enqueue-some-random-music-script.
That shan't happen again. So here, for my own enjoyment: autoenq.sh
#!/bin/sh
enqueue_app="mocp -a"
music_glob="*.mp3"
music_path="`dirname "$0"`"
list_path="$music_path/.autoenq.list"
if [ "$*" = "-c" ]; then
# Create list of all files
find . -type f -iname "$music_glob" > "$list_path.tmp" 2>/dev/null # no lost+found
# Create list of all dirs that have files
cat "$list_path.tmp" | sed -e 's/\/[^\/]*$//' | sort | uniq > "$list_path"
exit 0
fi
args="`echo "$*" | sed -e "s/['\\\\]//g"`" # no backslashes and single quotes please
args="`echo "$args" | sed -e 's/[[:blank:]]\+/.*/g ...