netsh winhttp reset proxy
About Me
Thursday, September 24, 2015
Windows update error 8024402C
Friday, August 14, 2015
Updating to Windows 10 when having GRUB 2 bootloader installed in MBR.
Usually when having dualboot of Windows and Linux the GRUB 2 bootloader is installed in MBR. When trying to update to Windows 10 it fails with the following error "We Can't Tell if your PC has enough space to continue".
Well the solution for updating to Windows 10 is simple - restore the hardisk Master Boot Record (MBR) using Windows installation disc (it can be also created via Microsoft's MediaCreationTool - the same tool used for updating to Windows 10. Just on the first screen choose not to update, but "Create installation media for another PC" and write it to DVD/USB).
Boot from the Windows installation DVD/USB and follow instruction until screen that allows you to install windows or "Repair your computer". Choose to "Repair your computer" / "Troubleshoot" / "Advanced options" / "Command prompt"
Execute following command:
bootrec.exe /fixmbrReboot and start the update process again. Now the update should be successful.
Now Windows boots successfully but Linux is no longer accessible. One way to make Linux bootable again is to use Windows bootloader to load Linux. I prefer this method because I don't want to face any future problems with windows updates.
We need a copy of the GRUB2 exported as file. For that reason we will install GRUB on Partition Boot Record (PBR) and copy the boot sector to file. First we must access the installed Linux partitions. Create a "Live CD" on DVD/USB and boot from it. The from the shell mount your existing linux installation. Let's assume that /dev/sda3 is the linux boot partition, /dev/sda4 is the root partition. Now mount the volumes:
mount /dev/sda4 /mnt mount /dev/sda3 /mnt/boot mount --bind /dev /mnt/dev mount --bind /proc /mnt/proc mount --bind /sys /mnt/sysOptionally you may mount home directory
mount /dev/sdaX /mnt/home
Now do chroot:
chroot /mntReinstall grup 2 on boot partition
grub2-install /dev/sda3You may receive following error:
"warning: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged.
error: will not proceed with blocklists"
Then just use --force
grub2-install --force /dev/sda3Once the installation complets create a dump of the bootsector:
dd if=/dev/sda3 of=/tmp/linux.bootsector.bin bs=512 count=1copy the /tmp/linux.bootsector.bin to some partition accessible by Windows.
mkdir /mnt/cNow reboot and start Windows and we need to create a new BCD entry for Linux
mount /dev/sda2 /mnt/c
cp /tmp/linux.bootsector.bin /mnt/c
umount /mnt/c
Open administrative command prompt (right click on "command prompt" and choose run as administrator)
bcdedit /create /d “Linux” /application BOOTSECTORThe command will return GUID e.g. {5474794d-1fe8-4008-a0ae-d10210214f2a}
That GUID will be use in next commands.
Configure new BCD entry's partition and path to the location where linux.bootsector.bin is copied
bcdedit /set {5474794d-1fe8-4008-a0ae-d10210214f2a} device partition=C:
bcdedit /set {5474794d-1fe8-4008-a0ae-d10210214f2a} PATH \linux.bootsector.bin
Then configure the new entry to be shown last, and the OS selection menu timeout to be 5 seconds.bcdedit /displayorder {5474794d-1fe8-4008-a0ae-d10210214f2a} /addlast
bcdedit /timeout 5
Reboot and now you will be able to boot either Windows or Linux.Tuesday, August 04, 2015
Windows 10/8/7/Vista administrative shares are not accessible (from linux / windows)
Typical error is :
mount -t cifs -o username=superman,password=secret //192.168.22.14/c$ /mnt/c mount error(13): Permission denied Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)The reason is that described in KB951916 Microsoft introduced as part of UAC a little known feature called “UAC remote restrictions”. It filters the access token for connections made with local user accounts or Microsoft accounts (the latter typically have the format MicrosoftAccount\EMailAddress). In other words it removes the SID for “Administrators”. Connections made with domain accounts remain unchanged. From KB951016:
If the user wants to administer the workstation with a Security Account Manager (SAM) account, the user must interactively log on to the computer that is to be administered with Remote Assistance or Remote Desktop, if these services are available.UAC remote restrictions can be disabled by setting the DWORD registry value LocalAccountTokenFilterPolicy to 1:
Key: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System Value: LocalAccountTokenFilterPolicy Data: 1 (to disable, 0 enables filtering) Type: REG_DWORD (32-bit)Reboot is not required on Windows 8/10
Thursday, July 23, 2015
OpeneElec Kodi hacking - creating music catalog
Systemd CIFS mount
/storage/.config/system.d/storage-music-rock.mount[Unit] Description=cifs mount script Requires=network-online.service After=network-online.service Before=kodi.service [Mount] What=//192.168.0.31/MusicRock Where=/storage/music/rock Options=username=myusername,password=mypassword,rw Type=cifs [Install] WantedBy=multi-user.targetImportant: this file must be renamed to mountpoint.mount where mountpoint, is the FULL path where the share will be mounted. Slashes "/" MUST BE REPLACED with dashes "-" with .mount as extension. This means, if we want mount to "/storage/music/rock" (see above "Where=/storage/music/rock") then this file must be renamed to 'storage-music-rock.mount'. This is only for the filename! not for the What= and Where= sections!
Script that maps file by the first two letters
/storage/.config/create_symb_links.sh chmod +s /storage/.config/create_symb_links.sh#!/bin/bash
displayUsage() {
echo "Scans source directory and create symbolic links based on the file first two letters"
echo -e "\nUsage:\n$0 [src-dir] [links-dir]\n src-dir\tsource directory to be scanned\n links-dir\tfull path to target directory where symbolic links will be created\n\n"
echo -e "e.g.:\n $0 /storage/music/rock /storage/music/rock_links/\n\n"
echo -e "Let's have 3 files:\n /storage/music/rock/rock1\n /storage/music/rock/rock2\n /storage/music/rock/metal\n"
echo -e "then inside /storage/music/rock_links/ you will have following files:\n"
echo -e " /storage/music/rock_links/RO/rock1\n /storage/music/rock_links/RO/rock2\n /storage/music/rock_links/ME/metal\n"
}
if [[ -z $1 ]]; then
displayUsage
exit 1
fi
if [[ -z $2 ]]; then
displayUsage
exit 1
fi
dir=$1
links=$2
currdir=`pwd`
rm -Rf $links
cd $dir
mkdir -p $links
for f in *
do
prefix=`echo $f | cut -c 1,2 | tr [:lower:] [:upper:]`
mkdir -p $links/$prefix
ln -s "$dir/$f" "$links/$prefix/$f"
done
cd $currdir
Service for creating music catalog
/storage/.config/system.d/catalog-music-rock.service[Unit] Description=Create musics catalog Requires=storage-music-rock.mount After=storage-music-rock.mount Before=kodi.service [Service] Type=oneshot ExecStartPre=/bin/bash -c 'echo "Creating music catalog ..."' ExecStart=/bin/bash -c '/storage/.config/create_symb_links.sh /storage/music/rock /storage/music/rock_links' StandardOutput=tty [Install] WantedBy=multi-user.target
Enabling mount and services
systemctl enable storage-music.mount systemctl enable storage-music-rock.mount systemctl enable catalog-music-rock.service
Friday, May 08, 2015
Glassfish 2.1: Using Local EJB interface in WAR's POJO
Base interface for local and remote interfaces
public interface HelloEjb extends Serializable {
public String hello();
}
Define local interface
@Local
public interface HelloEjbLocal extends HelloEjb {
}
Define remote interface
@Remote
public interface HelloEjbRemote extends HelloEjb {
}
Define EJB implementation
//@Local(HelloEjbLocal.class) // not needed
//@Remote(HelloEjbRemote.class) // not needed
@Stateless
public class HelloEjbImpl extends HelloEjbLocal, HelloEjbRemote {
public String hello() { return "hello world!"; }
}
Using EJB in POJO
Please note that the POJO must be called from a class that is part of the WAR (either servlet, webservice, etc.)
// Notes: POJO must be called by class from the WAR
@EJB(name="helloEjbJndi", beanInterface=HelloEjbLocal.class)
public class HelloClient {
public HelloEjb getEjb() throws NamingException {
final InitialContext ctx = new InitialContext();
return (HelloEjb)ctx.lookup("java:comp/env/helloEjbJndi");
}
}
Wednesday, April 22, 2015
Read time and battery status from bluetooth device
Pair with the device
[root@laptop ~]$ bluetoothctl [NEW] Controller AA:BB:CC:DD:EE:FF laptop [default] [bluetooth]# power on Changing power on succeeded [bluetooth]# scan on Discovery started [CHG] Controller AA:BB:CC:DD:EE:FF Discovering: yes [NEW] Device F1:F2:F3:F4:F5:F6 CHRONOS ECO XXXX [bluetooth]# info F1:F2:F3:F4:F5:F6 Device F1:F2:F3:F4:F5:F6 Name: CHRONOS ECO XXXX Alias: CHRONOS ECO XXXX Appearance: 0x1234 Paired: no Trusted: no Blocked: no Connected: no LegacyPairing: no UUID: Vendor specific (6e400001-b5a3-f393-e0a9-e50e24dcca9e) [bluetooth]# trust F1:F2:F3:F4:F5:F6 [CHG] Device F1:F2:F3:F4:F5:F6 Trusted: yes Changing F1:F2:F3:F4:F5:F6 trust succeeded [bluetooth]# agent on Agent registered [bluetooth]# default-agent Default agent request successful [bluetooth]# pair F1:F2:F3:F4:F5:F6 Attempting to pair with F1:F2:F3:F4:F5:F6 [CHG] Device F1:F2:F3:F4:F5:F6 Connected: yes [CHG] Device F1:F2:F3:F4:F5:F6 UUIDs: 00001800-0000-1000-8000-00805f9b34fb 00001801-0000-1000-8000-00805f9b34fb 00001805-0000-1000-8000-00805f9b34fb 0000180a-0000-1000-8000-00805f9b34fb 0000180f-0000-1000-8000-00805f9b34fb 6e400001-b5a3-f393-e0a9-e50e24dcca9e [CHG] Device F1:F2:F3:F4:F5:F6 Paired: yes Pairing successful [bluetooth]# paired-devices Device F1:F2:F3:F4:F5:F6 CHRONOS ECO XXXX [bluetooth]# info F1:F2:F3:F4:F5:F6 Device F1:F2:F3:F4:F5:F6 Name: CHRONOS ECO XXXX Alias: CHRONOS ECO XXXX Appearance: 0x1234 Paired: yes Trusted: yes Blocked: no Connected: no LegacyPairing: no UUID: Generic Access Profile (00001800-0000-1000-8000-00805f9b34fb) UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb) UUID: Current Time Service (00001805-0000-1000-8000-00805f9b34fb) UUID: Device Information (0000180a-0000-1000-8000-00805f9b34fb) UUID: Battery Service (0000180f-0000-1000-8000-00805f9b34fb) UUID: Vendor specific (6e400001-b5a3-f393-e0a9-e50e24dcca9e) [bluetooth]# quit
We will read the information from the "Current Time Service" and "Battery Service"
Connect to the device and list services with handles[root@laptop ~]$ gatttool -t random -I -b F1:F2:F3:F4:F5:F6 [F1:F2:F3:F4:F5:F6][LE]> connect Attempting to connect to F1:F2:F3:F4:F5:F6 Connection successful [F1:F2:F3:F4:F5:F6][LE]> primary attr handle: 0x0001, end grp handle: 0x0007 uuid: 00001800-0000-1000-8000-00805f9b34fb attr handle: 0x0008, end grp handle: 0x000b uuid: 00001801-0000-1000-8000-00805f9b34fb attr handle: 0x000c, end grp handle: 0x0011 uuid: 6e400001-b5a3-f393-e0a9-e50e24dcca9e attr handle: 0x0012, end grp handle: 0x0015 uuid: 0000180f-0000-1000-8000-00805f9b34fb attr handle: 0x0016, end grp handle: 0x0020 uuid: 0000180a-0000-1000-8000-00805f9b34fb attr handle: 0x0021, end grp handle: 0xffff uuid: 00001805-0000-1000-8000-00805f9b34fbConnect to handle of "Current Time Service" (00001805-0000-1000-8000-00805f9b34fb).
Use the handle and the grp handle values.
[F1:F2:F3:F4:F5:F6][LE]> characteristics 0x0021 0xffff handle: 0x0022, char properties: 0x12, char value handle: 0x0023, uuid: 00002a2b-0000-1000-8000-00805f9b34fbNote the "char value handle" and use it for reading characteristics data.
[F1:F2:F3:F4:F5:F6][LE]> char-read-hnd 0x0023 Characteristic value/descriptor: df 07 04 1A 16 0e 00 00 03 00 00 00the first two bytes are the year: 07df = 2015
the thrid byte is the month: 04 = April
the fourth byte is the date: 1A = 26
the fifth byte is the hour: 16 = 22
the sixth byte is the minutes: 0e = 14
So the date is: 26.April.2015 22:14
More information about the format could be found here
Now let's read the battery status from Battery Service (0000180f-0000-1000-8000-00805f9b34fb)
[F1:F2:F3:F4:F5:F6][LE]> characteristics 0x0012 0x0015 handle: 0x0013, char properties: 0x12, char value handle: 0x0014, uuid: 00002a19-0000-1000-8000-00805f9b34fb [F1:F2:F3:F4:F5:F6][LE]> char-read-hnd 0x0014 Characteristic value/descriptor: 5aThis is the battery status (in percentage): 5a = 90
So the battery level is 90%.
More information about the format could be found here
Friday, January 02, 2015
Bluetooth COM port in Linux
Pairing
Powering the bluetooth adapter and making it pairableuser@workstation:~$ bluetoothctl [bluetooth]# power on Changing power on succeeded [bluetooth]# pairable on Changing pairable on succeededSearch for new bluetooth devices - note the btaddress of the device (00:06:66:04:9E:4A). It is needed for all bluetooth commands
[bluetooth]# scan on Discovery started [CHG] Controller aa:bb:cc:dd:ee:ff Discovering: yes [NEW] Device 00:06:66:04:9E:4A FireFly-9E4A [bluetooth]# scan off Discovery stopped [CHG] Controller aa:bb:cc:dd:ee:ff Discovering: noRetrieve some information about the device
[bluetooth]# info 00:06:66:04:9E:4A Device 00:06:66:04:9E:4A Name: FireFly-9E4A Alias: FireFly-9E4A Class: 0x001f00 Paired: no Trusted: no Blocked: no Connected: no LegacyPairing: yesOptionally configure the device to be trusted - so if it automatically accepts generated PINs. However for legacy pairing manually entered PIN is required.
[bluetooth]# trust 00:06:66:04:9E:4A [CHG] Device 00:06:66:04:9E:4A Trusted: yes Changing 00:06:66:04:9E:4A trust succeededConfigure the bluetoothctl to be default agent for dealing with PIN code.
[bluetooth]# agent on Agent registered [bluetooth]# default-agent Default agent request successfulNow pair with the device
[bluetooth]# pair 00:06:66:04:9E:4A Attempting to pair with 00:06:66:04:9E:4A [CHG] Device 00:06:66:04:9E:4A Connected: yes Request PIN code [agent] Enter PIN code: 1234 [CHG] Device 00:06:66:04:9E:4A UUIDs: 00001101-0000-1000-8000-00805f9b34fb [CHG] Device 00:06:66:04:9E:4A Paired: yes Pairing successfulDouble check the pairing and quit
[bluetooth]# paired-devices Device 00:06:66:04:9E:4A FireFly-9E4A [bluetooth]# quit
Discovering services and RFCOMM channels
For devices that support SDP - Service Discovery Protocol (UUID: 00000001-0000-1000-8000-00805F9B34FB) the following command will show available protocols and RFCOMM channels. The XX:XX:XX:XX:XX:XX is the btaddress of the device. Note that in the previos example the device 00:06:66:04:9E:4A do not support SDP protocol, so the sdptool command will produce empty result.
user@workstation:~$ sdptool browse XX:XX:XX:XX:XX:XX
Service Name: Object Push Profile
Service RecHandle: 0x1000f
Service Class ID List:
"OBEX Object Push" (0x1105)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 2
"OBEX" (0x0008)
Profile Descriptor List:
"OBEX Object Push" (0x1105)
Version: 0x0100
Creating links to the remote COM port
Retrieving the bluetooth adapter name on the local machine.
user@workstation:~$ hcitool dev
Devices
hci0 aa:bb:cc:dd:ee:ff
The adapter is called hci0
Optionally the connection could be tested with the following command
user@workstation:~$ sudo rfcomm connect hci0 00:06:66:04:9E:4A 1Creating symlink to bluetooth serial port
user@workstation:~$ sudo rfcomm bind hci0 00:06:66:04:9E:4A 1Verifying that the connection is established
user@workstation:~$ sudo rfcomm -a rfcomm0: 00:06:66:04:9E:4A channel 1 connected [tty-attached]The serial (COM) port is available as /dev/rcomm0 Any terminal program can use it. With following command will configure rootooth bluetooth device to communicate with Roomba 520 at baud rate 115200
user@workstation:~$ sudo minicom -D /dev/rfcomm0 $$$ >CMD U,115K,N >AOK --- >END
Removing the symlink
In order to remove the symbolic link to the serial port the following command must be executed:user@workstation:~$ sudo rfcomm release hci0
Unpairing the device and removing pairing configuration
user@workstation:~$ bluetoothctl [bluetooth]# disconnect 00:06:66:04:9E:4A Attempting to disconnect from 00:06:66:04:9E:4A Successful disconnected [bluetooth]# remove 00:06:66:04:9E:4A [DEL] Device 00:06:66:04:9E:4A FireFly-9E4A Device has been removed [bluetooth]# power off Changing power off succeeded
Tuesday, November 04, 2014
Jenkins deployment script with VPN establishment and SSH port forwarding
Here is a deployment script that can be run from Jenkins.
It establishes VPN connections, creates SSH tunnels and copies the WAR file to remote server. At the end the WAR is verified and a deployment script is executed.
The 192.168.0.2 is the server that gives access to other machines. The target tomcat server is 192.168.0.3, but it can be accessed only from 192.168.0.2.
The deploy.sh is responsible to stop tomcat server, delete the old artifact and start the tomcat server.
#!/bin/bash
now="$(date +'%Y%m%d%H%M')"
yes | cp /opt/hudson/jobs/WAR/lastSuccessful/archive/target/app.war ./app.war
cksumline=`cksum ./app.war`
fileChkSum=$(echo "$cksumline" | awk '{print $1}')
fileSize=$(echo "$cksumline" | awk '{print $2}')
#echo "Local Checksum:$fileChkSum"
#echo "Local FileSize:$fileSize"
sudo pon vpn-conn1
echo VPN connected
sleep 10
echo Creating tunnel
sshpass -p $pass ssh -f -o ExitOnForwardFailure=yes -o StrictHostKeyChecking=no user@192.168.0.2 -L 1234:192.168.0.3:22 'sleep 30' &
sleep 10
echo Tunnel created
echo Copyng WAR file...
sshpass -p $pass scp -oStrictHostKeyChecking=no -P 1234 ./app.war user@localhost:webapps/app.war.$now
echo WAR file copied.
cksumline2=`sshpass -p $pass ssh -oStrictHostKeyChecking=no -p 1234 user@localhost cksum webapps/app.war.$now`
echo "Checksum execution on remote machine: $cksumline2"
fileChkSum2=$(echo "$cksumline2" | awk '{print $1}')
fileSize2=$(echo "$cksumline2" | awk '{print $2}')
if [[ "$fileChkSum" != "$fileChkSum2" ]]; then
echo "Checksum differs! local: $fileChkSum, remote: $fileChkSum2"
sudo poff vpn-conn1
echo VPN disconnected
exit -1
fi
if [[ "$fileSize" != "$fileSize2" ]]; then
echo "Size differs! local: $fileSize, remote: $fileSize2"
sudo poff vpn-conn1
echo VPN disconnected
exit -1
fi
sshpass -p $pass ssh -oStrictHostKeyChecking=no -p 1234 user@localhost cp webapps/app.war.$now webapps/app.war
sshpass -p $pass ssh -oStrictHostKeyChecking=no -p 1234 user@localhost ./deploy.sh
sudo poff vpn-conn1
echo VPN disconnected
Resizing VirtualBox HDD
Steps:
- Resize the Virutalbox HDD VBoxManage modifyhd <absolute path to file> --resize <size in MB>>
- Use GParted liveCD to resize the partition http://sourceforge.net/projects/gparted/
Thursday, May 22, 2014
Reverse proxy with apache
Listen 80 #Listen 1080 LogLevel debug #ProxyHTMLLogVerbose On LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule authz_core_module modules/mod_authz_core.so LoadModule xml2enc_module modules/mod_xml2enc.so LoadModule proxy_html_module modules/mod_proxy_html.so LoadModule deflate_module modules/mod_deflate.so <VirtualHost *> ProxyRequests OFF ProxyPreserveHost On ProxyPass / ajp://127.0.0.1:8009/ ProxyPassReverse / ajp://127.0.0.1:8009/ #ProxyPass /app/ ajp://127.0.0.1:8009/app/ #ProxyPass /app/ ajp://127.0.0.1:8009/app/ #ProxyHTMLURLMap / /app/ </VirtualHost>3) On the application server (Tomcat/JBoss) deploy your app in the root context. For JBoss use jboss-web.xml with following content:
<?xml version="1.0" encoding="UTF-8"?> <jboss-web> <context-root>/</context-root> </jboss-web>Also do not forget to disable the default root application from JBOSS_HOME/standalone/configuration/ set enable-welcome-root to false
<virtual-server name="default-host" enable-welcome-root="false">
Friday, April 11, 2014
UPS under Linux
Step1. Install NUT
yum install nut*
Step2. Configure UPS
Executenut-scannerIt should output something like this:
[nutdev1] driver = "blazer_usb" port = "auto" vendorid = "0001" productid = "0000" product = "STD UPS MON V1.0" bus = "006"
Add the nut-scanner output to the end of /etc/ups/ups.conf file. You can change the [nutdev1] to something more meaningful e.g. [myUps1] or [InformGuardUPS]. In the examples bellow we will use the default name [nutdev1].
Change /etc/ups/upsd.conf and add "LISTEN 127.0.0.1 3493" (without quotes)
Change /etc/ups/upsd.users and add a new admin user
[admin] password = mypassword actions = SET instcmds = ALL
Change /etc/ups/upsmon.conf and add following lines:
RUN_AS_USER root MONITOR nutdev1@localhost 1 admin mypassword master
Step3. Manually test everything
upsdrvctl startThe command should output something similar to:
Network UPS Tools - Generic HID driver 0.34 (2.4.1) USB communication driver 0.31 Using subdriver: MGE HID 1.12 Detected EATON - Ellipse MAX 1100 [ADKK22008]If you face a problem like "libusb couldn't open usb device /dev/usb/XXXXXX: permission denied", then use google to find a way how to solve it nicely. I used very brutal method:
chmod -R 777 /dev/bus/usb/Then try to start UPS driver again Start the upsd:
upsdAnd the result should be similar to:
Network UPS Tools upsd 2.4.1 listening on 127.0.0.1 port 3493 listening on ::1 port 3493 Connected to UPS [eaton]: usbhid-ups-eatonList your ups names with
upsc -LTry to query the UPS status with.
upsc nutdev1@localhostor just
upsc nutdev1Depending on your UPS capabilities it should return various variables and their values. See http://www.networkupstools.org/docs/user-manual.chunked/apcs01.html for more details. If you want to check if is it working on battery right now execute
upsc nutdev1 ups.statusand the output should be OL (online) or OB (on battery), LB (low battery), etc. You can also play around with some of the UPS commands/settings
upscmd nutdev1 beeper.toggle
After that reboot the system (or stop all daemons)
Step4. Starts UPS daemons automatically
Execute following commands:systemctl enable nut-server systemctl start nut-server systemctl enable nut-monitor.service systemctl start nut-monitor.serviceRestart the system, and if check if everything is ok, by executing the UPS status with upsc command. Now the UPS monitoring system is configured and in case of power loss, the computer will shutdown, when the UPS battery is low. If you don't want to shutdown the computer before the 'battery low' signal follow proceed with the step
Step5. Fine tuning
This step is optional, but gives you more control over the UPS events handling. If you want to trunoff the computer before the low battery signal, then use following steps:1. Edit /etc/ups/upsmon.conf and add following lines:
NOTIFYCMD /usr/sbin/upssched NOTIFYFLAG ONLINE EXEC NOTIFYFLAG ONBATT EXEC NOTIFYFLAG LOWBATT EXEC NOTIFYFLAG FSD EXEC NOTIFYFLAG COMMOK EXEC NOTIFYFLAG COMMBAD EXEC NOTIFYFLAG SHUTDOWN EXEC NOTIFYFLAG REPLBATT EXEC NOTIFYFLAG NOCOMM EXEC NOTIFYFLAG NOPARENT EXEC2. Edit /etc/ups/upssched.conf and add following lines (it will allow you shutdown the computer after 15 seconds, after working on battery)
PIPEFN /var/run/nut/upssched.pipe LOCKFN /var/run/nut/upssched.pipe AT ONBATT * START-TIMER executeShutdown 15 AT ONLINE * CANCEL-TIMER executeShutdown AT ONBATT * EXECUTE onBattery AT ONLINE * EXECUTE onLine AT NOCOMM * EXECUTE noComm AT COMMBAD * EXECUTE commBad AT COMMOK * EXECUTE commOk3. Edit /usr/bin/upssched-cmd (see the exact file name from /usr/bin/upssched-cmd variable CMDSCRIPT) and add executeShutdown section similar to:
case $1 in
upsgone)
logger -t upssched-cmd "The UPS has been gone for awhile"
;;
executeShutdown)
shutdown -h now
;;
onBattery)
logger -t upssched-cmd "UPS is on battery!"
;;
onLine)
logger -t upssched-cmd "UPS is back online!"
;;
noComm)
logger -t upssched-cmd "No communication with the UPS device"
;;
commBad)
logger -t upssched-cmd "Communication with UPS device lost"
;;
commOk)
logger -t upssched-cmd "Communication with UPS device restored"
;;
*)
logger -t upssched-cmd "Unrecognized command: $1"
;;
esac
Tuesday, April 08, 2014
PermGen space leaks
- Thread left running after web-app undeployment - the context class loader of the thread is usually the class loader of the web application, so it contains all webapp classes.
- Using ThreadLocal with thread created by the web server - web app class is assigned to web server thread (e.g. HTTP worker thread) - the web app class holds a reference to the classloader, even if the web app is undeployed.
- Database driver leak - every database driver should register in java.sql.DriverManager
the web-app must deregister it from the there, otherwise it hold a reference to the web-app class loader, if the web app is undeploye
Wednesday, February 26, 2014
Fedora 20 remote desktop (vncserver)
yum install vino
gsettings list-recursively org.gnome.VinoWill give you all available vino configurations Not all VNC clients supports encrypted connections, so you may need to disable it.
gsettings set org.gnome.Vino require-encryption falseAlso disable the prompt when somebody tries to connect
gsettings set org.gnome.Vino prompt-enabled falseLogin in gnome shell go to Settings > Share and enable Screen sharing
Thursday, December 05, 2013
Establishing VPN connection under Linux
Installation
You need to install the packagesudo apt-get install pptp-linux
Configuration
Create new VPN connection:sudo pptpsetup --create <tunnel> --server <my-vpn-server-ip> --username <vpn-user-name> --encryptCreate routing for the connection - you need to create a new file in the directory /etc/ppp/ip-up.d/ that contains the route. The content of the file should looks similar to:
#!/bin/bash # This script is called with the following arguments: # Arg Name # $1 Interface name # $2 The tty # $3 The link speed # $4 Local IP number # $5 Peer IP number # $6 Optional ``ipparam'' value foo ip route add 10.42.0.0/16 dev $1You can take a look of the parameters in /etc/ppp/ip-up script
Establishing connection
sudo pon <tunnel>
Disconnecting
sudo poff <tunnel>
Debugging issues
Start the connection in debug modesudo pon <tunnel> debug dump logfd 2 nodetachShow pon/poff log:
sudo plog
Manually adding route
sudo ip route add 10.42.0.0/16 dev ppp0
Adding new user from shell
Creates the new user
sudo adduser <username>
Add the user to existing group
sudo usermod -aG <groupname> <username>
Create new group
sudo addgroup <groupname>
Sunday, September 15, 2013
F19 post installation steps
Gnome shell 3
Tweak tool
Install gnome-tweak-toolsudo yum install gnome-tweak-toolThen start it, go to Desktop and enable "Have file manager handle the desktop" Go to Shell and select "Show date in clock", and for "Arrangement of buttons on the titlebar" choose "All"
Themes
sudo yum install gnome-shell-extension-user-theme.noarch
sudo yum install gnome-themesThen logout, login start gnome-tweak-tool go to Themes tab and select Crux for "Icon theme". Go to Shell extensions and enable "User themes". Close and open the gnome-tweak-tool. Now under Theme tab you have the "Shell theme" enabled.
Nautilus
Show hidden files
gsettings set org.gnome.nautilus.preferences show-hidden-files true
Show address bar instead of buttons for file path
gsettings set org.gnome.nautilus.preferences always-use-location-entry true
Ask what to do with executable files
gsettings set org.gnome.nautilus.preferences executable-text-activation 'ask'
Configuration
Admin rights
Add sudo capabilities to current user:usermod -a -G wheel MY_USER
Transparent terminal
sudo yum install terminator
Grub theme
sudo yum install grub2-starfield-themeOpen /etc/default/grub file sudo gedit /etc/default/grub Make entry in /etc/default grub GRUB_THEME="/boot/grub2/themes/starfield/theme.txt" Update grub sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Additional software
RPMfusion repos
Go to http://rpmfusion.org/ and download corresponding versionMusic player - XMMS
sudo yum install xmms xmms-faad2 xmms-mp3 xmms-pulse xmms-skins
Video players
mplayyer
sudo yum install mplayer gecko-mediaplayer mplayer-gui mencoder
VLC
sudo yum install vlc
Thursday, April 11, 2013
Error occurred during initialization of VM java/lang/NoClassDefFoundError: java/lang/Object
C:\>java -version Error occurred during initialization of VM java/lang/NoClassDefFoundError: java/lang/ObjectFirst thing is to find out which java is used
c:\>where java.exe C:\Windows\System32\java.exeOk this is the java wrapper that reads the registry and sets the JAVA_HOME from there. Open registry editor and go to the keys (replace 1.7 with the latest major version) HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.7 HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.7.0_17
Change the JavaHome to point to correct path.
Currently it is pointing to C:\Program Files\java\jre7. Alternativly you can use C:\Program Files\java\jdk1.7.0_17\jre
You can create a java.reg file and import it into registry.
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.7] "JavaHome"="C:\\Program Files\\Java\\jdk1.7.0_17\\jre"In my case the problem was faulty installation of the JRE.
I have two options:
- either live with alternative path C:\Program Files\java\jdk1.7.0_17\jre
- I can repair the JRE installation.
I choose option 2, so I copied everything from C:\Program Files\Java\jdk1.7.0_17\jre to C:\Program Files\java\jre7 (overriding the files).
Tuesday, November 22, 2011
Toplink throws NullPointerException in method _toplink.getXXX_vh()
Caused by: javax.persistence.EntityExistsException: Exception Description: The method [_toplink_getscore_vh] on the object [com.mycompany.data.GameEntity] triggered an exception. Internal Exception: java.lang.reflect.InvocationTargetException Target Invocation Exception: java.lang.NullPointerException Mapping: oracle.toplink.essentials.mappings.OneToOneMapping[score] Descriptor: RelationalDescriptor(com.mycompany.data.GameEntity --> [DatabaseTable(GAME_TABLE)]) at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerImpl.persist(EntityManagerImpl.java:224) at com.sun.enterprise.util.EntityManagerWrapper.persist(EntityManagerWrapper.java:440) at com.mycompany.MyEjbBean.create(MyEjbBean.java:1647) ... 26 more Caused by: Exception [TOPLINK-99] (Oracle TopLink Essentials - 2.1 (Build b31g-fcs (10/19/2009))): oracle.toplink.essentials.exceptions.DescriptorException Exception Description: The method [_toplink_getscore_vh] on the object [com.mycompany.data.GameEntity] triggered an exception. Internal Exception: java.lang.reflect.InvocationTargetException Target Invocation Exception: java.lang.NullPointerException at oracle.toplink.essentials.exceptions.DescriptorException.targetInvocationWhileGettingValueThruMethodAccessor(DescriptorException.java:1598) at oracle.toplink.essentials.internal.descriptors.MethodAttributeAccessor.getAttributeValueFromObject(MethodAttributeAccessor.java:98) at oracle.toplink.essentials.mappings.DatabaseMapping.getAttributeValueFromObject(DatabaseMapping.java:372) at oracle.toplink.essentials.mappings.ForeignReferenceMapping.getAttributeValueFromObject(ForeignReferenceMapping.java:322) at oracle.toplink.essentials.mappings.ObjectReferenceMapping.cascadeRegisterNewIfRequired(ObjectReferenceMapping.java:676) at oracle.toplink.essentials.internal.descriptors.ObjectBuilder.cascadeRegisterNewForCreate(ObjectBuilder.java:1294) at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:3228) at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerImpl.persist(EntityManagerImpl.java:221) ... 28 more Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at oracle.toplink.essentials.internal.security.PrivilegedAccessHelper.invokeMethod(PrivilegedAccessHelper.java:322) at oracle.toplink.essentials.internal.descriptors.MethodAttributeAccessor.getAttributeValueFromObject(MethodAttributeAccessor.java:91) ... 34 more Caused by: java.lang.NullPointerException at com.mycompany.data.GameEntity._toplink_getscore_vh(GameEntity.java) ... 40 more javax.ejb.EJBException: nested exception is: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: java.rmi.RemoteException: null; nested exception is: java.lang.RuntimeException: at com.mycompany._MyEjbBean_Wrapper.create(com/mycompany/_MyEjbBean_Wrapper.java) at com.mycompany.GameTest.testGameScores(GameTest.java:62) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41) at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) at org.junit.runners.ParentRunner.run(ParentRunner.java:220) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)The solution I found is to change the score property to be eager "@ManyToOne(fetch = FetchType.EAGER)" What I belive happens beneath is that Toplink uses bytecode to creates some additional methods for entity classes - see oracle.toplink.essentials.internal.weaving.TopLinkClassWeaver. For each field that is in relation, Toplink creates a new method called _toplink.getFIELDNAME_vh() and a class field called _toplink.getFIELDNAME_vh. VH stands for ValueHolder. I guess this additional methods/fields are used for fetching related objects later. If you examine the exception more closely it is thrown from inside _toplink.getscore_vh() which according to the javadoc in TopLinkClassWeaver should looks like:
public WeavedAttributeValueHolderInterface _toplink_getscore_vh(){
if (_toplink_score_vh.isCoordinatedWithProperty() || _toplink_score_vh.isNewlyWeavedValueHolder()){
EntityC object = getScore();
if (object != _toplink_score_vh.getValue()){
setScore(object);
}
}
return _toplink_score_vh;
}
Obviously the only way to throw an exception is if _toplink_score_vh is null which after debuging is confirmed to be null.
My guess is that because this is entity is transferred from another JVM (the JUnit test) and you are persisting it inside server JVM the value of _toplink_score_vh is not correctly transfered, which causes the above exception.
I didn't dig up too much into the problem but the solution I found is - just make the field (in my case the "score") eager and the exception will go away.
Thursday, September 15, 2011
Forget to add administrators group to SQL server 2008
If you forget to add the administrator group (or at least the current user) to admin groups, and do not know the SA password then you have only two options
- reinstall SQL server
- use single-user-mode to add the accounts
Ok now the single-user-mode procedure.
0) login with Administrator (exactly the Administrator user, with another administrator account there will be problems)
1) open services.msc
2) go the "SQL Server (xxx)" service and stop it
3) open "Sql server configuration manager" from the start menu and make sure that the protocols "Shared memory", "Named pipes", "TCP/IP" are enabled
4) Go back to the services console right click "SQL Server (xxx)" and select properties and then enter "-m" as parameter. Click start
5) Now the server is started in single-user mode
6) Open command prompt and execute following command "sqlcmd -S
sqlcmd -S MYMACHINE\SQLEXPRESS -E
7) Execute following commands for each windows account that you want to add
CREATE LOGIN [MYMACHINE\Administrator] FROM WINDOWS
GO
exec sp_addsrvrolemember @loginame='MYMACHINE\Administrator', @rolename = 'sysadmin'
GO
8) Stop the SQL service and restart it without -m parameter.
9) Now you are able to log-in with Administrator user and you do have administrator rights on SQL server
Monday, September 12, 2011
Using older Java on Windows
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\CurrentVersion to 1.6 you will get the following error:
C:\Windows\System32>java -help
Error: Registry key 'Software\JavaSoft\Java Runtime Environment'\CurrentVersion'
has value '1.6', but '1.7' is required.
Error: could not find java.dll
Error: Could not find Java SE Runtime Environment.
I found two solutions on this problem:
1) use -version:1.6 as parameter
java -version:1.6 -jar myprogram.jar
It will run the jar with version 1.6
Of course you can set it into some system property like JAVA_OPT (for tomcat)
2) Add JAVA_HOME environment variable, and put %JAVA_HOME%\bin before %SystemRoot%\system32.
So the JAVA_HOME\bin\java.exe will be found before the c:\windows\system32\java.exe wrapper.
