Copy 2D Axis system Display using script
Help.....Can we Copy all the selected entires of 2D axis system Dispaly using Diadem script for comparing data of two input file
Hi junkjunk,
I don't know of an easy way to copy curves. Could you make a version of the TDR file that has the curves manually copied and simply assign the correct X and Y channels to each curve programmatically? The only way I know to copy curves is to create new curves and laboriously assign all the curve properties (that you care about) of the new curves to be the same as those of the old curves, and there are easily 50 or more of those.
Brad Turpin
DIAdem Product Support Engineer
National Instruments
Similar Messages
-
Data copy B/W Essbase Applications using script
How to Data copy from one app to another app.
Server Name: Server1
Version: 9.3
Essbase App: App1
Data Bases: Db1, Db2,Db3
Server Name: Server1
Version: 9.3
Essbase App: App2
Data Bases: Db1, Db2,Db3
Note: App1 & App2 Applications are having similar outlines
Requirement: Copy Year 2012 Data from App1 to App2
I have come to know this is possible using Xref calc script.
Could some one please suggest the script.
Thanks in advance!Partitioning should be the best one as Glenn said, but see if you have licenses for that, as partitioning is licensed separately from essbase.
The alternatives could be:
* Data Export / Import: for exporting you could use DATAEXPORT command within a calcscript (see technical reference for details). Then importing the data with a rule file.
* XREF: this approach could give some headaches with block creation (see https://cn.forums.oracle.com/forums/thread.jspa?threadID=1010153). In general terms, try this one if the portion of data to copy is relatively small and well delimited.
Nacho.- -
Procedure for having two Y-Axis using scripts?
Hi all
I am planning to display two different channels on two differnt y-axis using VBscript....Like for example : i have two channels namely 1.Torque 2. Speed 3.Time, so i would like hav e this way, time on x-axis, speed on y-axis, And Torque on Y1-axis.......I would be very glad if some one could give me some example program or coding regarding this.....
With regards
KenniHi Kenni,
The easiest way to do this is to prepare a REPORT layout and to use a script assign the channel which should be drawn (see attachment).
To get the syntax to assign the channels please open the REPORT object (in your case the 2D axis system) and use CRTL-A. This copies the necessary commands to the clipboard and than you can paste it into your script (or use the teach-in mode than CTRL-A copies the commands directly into the script).
Greetings
Walter
Attachments:
Example1.zip 5 KB -
How to display several axis systems in one sheet
Hi all,
I want to use diadem script to display 4 axis systems in one sheet (top left, top right, bottom left and bottom right). Each system contains one curve. I have no idea which script command should I use. Would you like to give me some hints? Do I need to use the variable like "D2AxisLeft" ?
Thanks in advance
Kind regards
ZhiyaoHi Zhiyao,
I would recommend that you manually place 4 axis systems onto your REPORT sheet, in the orientation you prefer, then save this configuration as a *.TDR file, then programmatically load that *.TDR file with the PicLoad() command, followed with the PicUpdate() command. Ideally you would also configure each of the axis systems with one curve on them that pulls data from the correct group/channel names in the Data Portal, so that loading the *.TDR file will give you exactly the report you want with just those 2 script commands.
Please specify if you need to accomplish more than this programmatically,
Brad Turpin
DIAdem Product Support Engineer
National Instruments -
How to hide cut/copy/paste/Replace… menu on the UIWebView when it is being displayed over the keyboard.
Detail: I am having a HTML from, having text box, displayed using UIWebView. If user types in text box it shows the keyboard. Now If user tap and hold on text box it shows a popup menu. Now while keyboard and pop up are being displayed user scrolls the view. At this time it shows pop up over the keyboard which I need to hide.
I tried setMenuVisible of UIMenuController when popup rect and keyboard rect intersects each other on viewDidScroll but it didn't help me.
Any clues will help a lot.
Thanks.You are more likely to get an answer if you post programming problems to the Developer forum. This forum is intended for normal user level problems.
-
I used scripting brigde to add a movie that has size bigger than 5GB, exactly after two minutes iTunes return a failed, but the processing of the file is actually added to iTunes Library successfully. The copying take more than 5 minutes to complete. Why the iTunes Scripting Brigde returned failed when it is actually success? It occurred exactly 2 minutes after submit the request to Scripting Brigde. Is this 2 minutes related to the Apple Event time out? if it does, how do I get around this problem? thx
I can tell you that this is some of the absolutely worst customer service I have ever dealt with. I found out from a store employee that when they are really busy with calls, they have third party companies taking overflow calls. One of those companies is Xerox. What can a Xerox call center rep possibly be able to authorize on a Verizon account? I'm Sure there is a ton of misinformation out there due to this. They don't note the accounts properly or so everyone can see them. I have been transferred before and have asked if they work for Verizon or a third party also and was refused an answer so, apparently they aren't required to disclose that information. I spent a long time in the store on my last visit and it's not just customers that get the runaround. It happens to the store employees as well and it's beyond frustrating.
-
System Copy of our Production Server using orabrcopy method.
Hi
We are planning to do a System Copy of our Production Server using orabrcopy method.
But as the Production Server Java Version is below 1.4.1, Orabrcopy could not be executed.
As per the planned downtime of the Production Server, we have copied all the database offline. ( say 9th of August)
but we could not create the control , trace, init<sid>.ora files using ORABRCOPY.. during offline database copy.
Now the system is up and running.. We havent created the files yet.
I have 2 questions..
1. Is there any other method so that we can create the control , trace, and init<sid>.ora files.
2. If we create the control trace files now ( 13th of August ) can we use the offline backup that we took on (9th of August) to perform a System Copy..
Need your addvice..
Thanks and Regards
PagurasBasically, orabrcopy does (aside from other things) an
alter database backup controlfile to trace;
You can enter that manually (anytime) and use the resulting .trc file in saptrace directory as a base for control.sql, however, in this case you need to "know" what you're doing. ORABRCOPY is a "nice frontend" for this because it uses the same statement to create CONTROL.SQL, it just edits it appropriately which you will need to do manually.
Markus -
How to change the channels of an 2D-Axis report using script
D2ChnX(i),D2CChnX.... doesn't really work
Please a short example
Diadem 9.1 on WIN2000
Attachments:
Objektgruppe_aendern.VBS 3 KBHi PeterBR,
I hope the following script base functions may help you:
'-- VBS - Autosequenz - Datei
'-- Neu erstellt am 22/01/2002 11:26:43
'-- Ersteller:
'-- Kommentar:
Option Explicit
call SetNewParameter
Sub SetNewParameter
Dim iObjNo,sObjType
call NewParamFor_Main_Frame
For iObjNo = 1 To ObjectNoMax
if ( 0 < Len(PicObj(iObjNo)) ) Then
sObjType = Lcase(PicObjType(iObjNo))
Select Case sObjType
Case "freeframe"
Call NewParamFor_Frame_Obj(PicObj(iObjNo))
Case "textline"
Call NewParamFor_Text_Obj(PicObj(iObjNo))
Case "xy"
Call NewParamFor_XY_Obj(PicObj(iObjNo))
Case "xyz"
Call NewParamFor_XYZ_Obj(PicObj(iObjNo))
Case "xytab"
Call NewParamFor_XYTab_Obj(PicObj(iObjNo))
Case "xyztab"
Call NewParamFor_XYZTab_Obj(PicObj(iObjNo))
Case "polar"
Call NewParamFor_Polar_Obj(PicObj(iObjNo))
Case Else
End Select
End If
Next
End Sub
' Set for main frame to new colors
sub NewParamFor_Main_Frame
' do something
end sub
' Set for frame objects to new colors
Sub NewParamFor_Frame_Obj(sObjectName)
Call GRAPHObjOpen(sObjectName)
' do something
Call GRAPHObjClose(sObjectName)
End Sub
' Set for text objects to new colors
sub NewParamFor_Text_Obj(sObjectName)
Call GRAPHObjOpen(sObjectName)
' do something
Call GRAPHObjClose(sObjectName)
end sub
' Set for 2-D Axis system to new colors
Sub NewParamFor_XY_Obj(sObjectName)
call GraphObjOpen(sObjectName)
For iCurveNo = 1 To CurveNoMax
if D2CURVEOBJ(iCurveNo) <> "" then
call GraphObjOpen(D2CurveObj(iCurveNo))
' do something
call GraphObjClose(D2CurveObj(iCurveNo))
end if
Next
call GraphObjClose(sObjectName)
End Sub
' Set for 3-D Axis system to new colors
Sub NewParamFor_XYZ_Obj(sObjectName)
call GraphObjOpen(sObjectName)
For iCurveNo = 1 To CurveNoMax
if D3CURVEOBJ(iCurveNo) <> "" then
call GraphObjOpen(D3CurveObj(iCurveNo))
' do something
Call GRAPHObjClose(D3CurveObj(iCurveNo))
end if
next
call GraphObjClose(sObjectName)
End Sub
' Set for 2-D table system to new colors
Sub NewParamFor_XYTab_Obj(sObjectName)
call GraphObjOpen(sObjectName)
' do something
call GraphObjClose(sObjectName)
End Sub
' Set for 3-D table system to new colors
Sub NewParamFor_XYZTab_Obj(sObjectName)
call GraphObjOpen(sObjectName)
' do something
call GraphObjClose(sObjectName)
End Sub
' Set for Polar Axis system to new colors
Sub NewParamFor_Polar_Obj(sObjectName)
call GraphObjOpen(sObjectName)
For iCurveNo = 1 To CurveNoMax
If D2PolarCURVEOBJ(iCurveNo) <> "" Then
Call GRAPHObjOpen(D2PolarCURVEOBJ(iCurveNo))
' do something
Call GRAPHObjClose(D2PolarCURVEOBJ(iCurveNo))
end if
next
call GraphObjClose(sObjectName)
End Sub
Greetings
Walter Rick -
System encryption using LUKS and GPG encrypted keys for arch linux
Update: As of 2012-03-28, arch changed from gnupg 1.4 to 2.x which uses pinentry for the password dialog. The "etwo" hook described here doesn't work with gnupg 2. Either use the openssl hook below or use a statically compiled version of gnupg 1.4.
Update: As of 2012-12-19, the mkinitcpio is not called during boot, unless the "install" file for the hook contains "add_runscript". This resulted in an unbootable system for me. Also, the method name was changed from install () to build ().
Update: 2013-01-13: Updated the hook files using the corrections by Deth.
Note: This guide is a bit dated now, in particular the arch installation might be different now. But essentially, the approach stays the same. Please also take a look at the posts further down, specifically the alternative hooks that use openssl.
I always wanted to set up a fully encrypted arch linux server that uses gpg encrypted keyfiles on an external usb stick and luks for root filesystem encryption. I already did it once in gentoo using this guide. For arch, I had to play alot with initcpio hooks and after one day of experimentation, I finally got it working. I wrote a little guide for myself which I'm going to share here for anyone that might be interested. There might be better or easier ways, like I said this is just how I did it. I hope it might help someone else. Constructive feedback is always welcome
Intro
Using arch linux mkinitcpio's encrypt hook, one can easily use encrypted root partitions with LUKS. It's also possible to use key files stored on an external drive, like an usb stick. However, if someone steals your usb stick, he can just copy the key and potentially access the system. I wanted to have a little extra security by additionally encrypting the key file with gpg using a symmetric cipher and a passphrase.
Since the encrypt hook doesn't support this scenario, I created a modifed hook called “etwo” (silly name I know, it was the first thing that came to my mind). It will simply look if the key file has the extension .gpg and, if yes, use gpg to decrypt it, then pipe the result into cryptsetup.
Conventions
In this short guide, I use the following disk/partition names:
/dev/sda: is the hard disk that will contain an encrypted swap (/dev/sda1), /var (/dev/sda2) and root (/dev/sda3) partition.
/dev/sdb is the usb stick that will contain the gpg encrypted luks keys, the kernel and grub. It will have one partition /dev/sdb1 formatted with ext2.
/dev/mapper/root, /dev/mapper/swap and /dev/mapper/var will be the encrypted devices.
Credits
Thanks to the authors of SECURITY_System_Encryption_DM-Crypt_with_LUKS (gentoo wiki), System Encryption with LUKS (arch wiki), mkinitcpio (arch wiki) and Early Userspace in Arch Linux (/dev/brain0 blog)!
Guide
1. Boot the arch live cd
I had to use a newer testing version, because the 2010.05 cd came with a broken gpg. You can download one here: http://releng.archlinux.org/isos/. I chose the “core“ version. Go ahead and boot the live cd, but don't start the setup yet.
2. Set keymap
Use km to set your keymap. This is important for non-qwerty keyboards to avoid suprises with passphrases...
3. Wipe your discs
ATTENTION: this will DELETE everything on /dev/sda and /dev/sdb forever! Do not blame me for any lost data!
Before encrypting the hard disc, it has to be completely wiped and overwritten with random data. I used shred for this. Others use badblocks or dd with /dev/urandom. Either way, this will take a long time, depending on the size of your disc. I also wiped my usb stick just to be sure.
shred -v /dev/sda
shred -v /dev/sdb
4. Partitioning
Fire up fdisk and create the following partitions:
/dev/sda1, type linux swap.
/dev/sda2: type linux
/dev/sda3: type linux
/dev/sdb1, type linux
Of course you can choose a different layout, this is just how I did it. Keep in mind that only the root filesystem will be decrypted by the initcpio. The rest will be decypted during normal init boot using /etc/crypttab, the keys being somewhere on the root filesystem.
5. Format and mount the usb stick
Create an ext2 filesystem on /dev/sdb1:
mkfs.ext2 /dev/sdb1
mkdir /root/usb
mount /dev/sdb1 /root/usb
cd /root/usb # this will be our working directory for now.
Do not mount anything to /mnt, because the arch installer will use that directory later to mount the encrypted root filesystem.
6. Configure the network (if not already done automatically)
ifconfig eth0 192.168.0.2 netmask 255.255.255.0
route add default gw 192.168.0.1
echo "nameserver 192.168.0.1" >> /etc/resolv.conf
(this is just an example, your mileage may vary)
7. Install gnupg
pacman -Sy
pacman -S gnupg
Verify that gnupg works by launching gpg.
8. Create the keys
Just to be sure, make sure swap is off:
cat /proc/swaps
should return no entries.
Create gpg encrypted keys (remember, we're still in our working dir /root/usb):
dd if=/dev/urandom bs=512 count=4 | gpg -v --cipher-algo aes256 --digest-algo sha512 -c -a > root.gpg
dd if=/dev/urandom bs=512 count=4 | gpg -v --cipher-algo aes256 --digest-algo sha512 -c -a > var.gpg
Choose a strong password!!
Don't do this in two steps, e.g don't do dd to a file and then gpg on that file. The key should never be stored in plain text on an unencrypted device, except if that device is wiped on system restart (ramfs)!
Note that the default cipher for gpg is cast5, I just chose to use a different one.
9. Create the encrypted devices with cryptsetup
Create encrypted swap:
cryptsetup -c aes-cbc-essiv:sha256 -s 256 -h whirlpool -d /dev/urandom create swap /dev/sda1
You should see /dev/mapper/swap now. Don't format nor turn it on for now. This will be done by the arch installer.
Important: From the Cryptsetup 1.1.2 Release notes:
Cryptsetup can accept passphrase on stdin (standard input). Handling of new line (\n) character is defined by input specification:
if keyfile is specified as "-" (using --key-file=- or by positional argument in luksFormat and luksAddKey, like cat file | cryptsetup --key-file=- <action> ), input is processed
as normal binary file and no new line is interpreted.
if there is no key file specification (with default input from stdin pipe like echo passphrase | cryptsetup <action> ) input is processed as input from terminal, reading will
stop after new line is detected.
If I understand this correctly, since the randomly generated key can contain a newline early on, piping the key into cryptsetup without specifying --key-file=- could result in a big part of the key to be ignored by cryptsetup. Example: if the random key was "foo\nandsomemorebaratheendofthekey", piping it directly into cryptsetup without --key-file=- would result in cryptsetup using only "foo" as key which would have big security implications. We should therefor ALWAYS pipe the key into cryptsetup using --key-file=- which ignores newlines.
gpg -q -d root.gpg 2>/dev/null | cryptsetup -v -–key-file=- -c aes-cbc-essiv:sha256 -s 256 -h whirlpool luksFormat /dev/sda3
gpg -q -d var.gpg 2>/dev/null | cryptsetup -v –-key-file=- -c aes-cbc-essiv:sha256 -s 256 -h whirlpool -v luksFormat /dev/sda2
Check for any errors.
10. Open the luks devices
gpg -d root.gpg 2>/dev/null | cryptsetup -v –-key-file=- luksOpen /dev/sda3 root
gpg -d var.gpg 2>/dev/null | cryptsetup -v –-key-file=- luksOpen /dev/sda2 var
If you see /dev/mapper/root and /dev/mapper/var now, everything is ok.
11. Start the installer /arch/setup
Follow steps 1 to 3.
At step 4 (Prepare hard drive(s), select “3 – Manually Configure block devices, filesystems and mountpoints. Choose /dev/sdb1 (the usb stick) as /boot, /dev/mapper/swap for swap, /dev/mapper/root for / and /dev/mapper/var for /var.
Format all drives (choose “yes” when asked “do you want to have this filesystem (re)created”) EXCEPT for /dev/sdb1, choose “no”. Choose the correct filesystem for /dev/sdb1, ext2 in my case. Use swap for /dev/mapper/swap. For the rest, I chose ext4.
Select DONE to start formatting.
At step 5 (Select packages), select grub as boot loader. Select the base group. Add mkinitcpio.
Start step 6 (Install packages).
Go to step 7 (Configure System).
By sure to set the correct KEYMAP, LOCALE and TIMEZONE in /etc/rc.conf.
Edit /etc/fstab:
/dev/mapper/root / ext4 defaults 0 1
/dev/mapper/swap swap swap defaults 0 0
/dev/mapper/var /var ext4 defaults 0 1
# /dev/sdb1 /boot ext2 defaults 0 1
Configure the rest normally. When you're done, setup will launch mkinitcpio. We'll manually launch this again later.
Go to step 8 (install boot loader).
Be sure to change the kernel line in menu.lst:
kernel /vmlinuz26 root=/dev/mapper/root cryptdevice=/dev/sda3:root cryptkey=/dev/sdb1:ext2:/root.gpg
Don't forget the :root suffix in cryptdevice!
Also, my root line was set to (hd1,0). Had to change that to
root (hd0,0)
Install grub to /dev/sdb (the usb stick).
Now, we can exit the installer.
12. Install mkinitcpio with the etwo hook.
Create /mnt/lib/initcpio/hooks/etwo:
#!/usr/bin/ash
run_hook() {
/sbin/modprobe -a -q dm-crypt >/dev/null 2>&1
if [ -e "/sys/class/misc/device-mapper" ]; then
if [ ! -e "/dev/mapper/control" ]; then
/bin/mknod "/dev/mapper/control" c $(cat /sys/class/misc/device-mapper/dev | sed 's|:| |')
fi
[ "${quiet}" = "y" ] && CSQUIET=">/dev/null"
# Get keyfile if specified
ckeyfile="/crypto_keyfile"
usegpg="n"
if [ "x${cryptkey}" != "x" ]; then
ckdev="$(echo "${cryptkey}" | cut -d: -f1)"
ckarg1="$(echo "${cryptkey}" | cut -d: -f2)"
ckarg2="$(echo "${cryptkey}" | cut -d: -f3)"
if poll_device "${ckdev}" ${rootdelay}; then
case ${ckarg1} in
*[!0-9]*)
# Use a file on the device
# ckarg1 is not numeric: ckarg1=filesystem, ckarg2=path
if [ "${ckarg2#*.}" = "gpg" ]; then
ckeyfile="${ckeyfile}.gpg"
usegpg="y"
fi
mkdir /ckey
mount -r -t ${ckarg1} ${ckdev} /ckey
dd if=/ckey/${ckarg2} of=${ckeyfile} >/dev/null 2>&1
umount /ckey
# Read raw data from the block device
# ckarg1 is numeric: ckarg1=offset, ckarg2=length
dd if=${ckdev} of=${ckeyfile} bs=1 skip=${ckarg1} count=${ckarg2} >/dev/null 2>&1
esac
fi
[ ! -f ${ckeyfile} ] && echo "Keyfile could not be opened. Reverting to passphrase."
fi
if [ -n "${cryptdevice}" ]; then
DEPRECATED_CRYPT=0
cryptdev="$(echo "${cryptdevice}" | cut -d: -f1)"
cryptname="$(echo "${cryptdevice}" | cut -d: -f2)"
else
DEPRECATED_CRYPT=1
cryptdev="${root}"
cryptname="root"
fi
warn_deprecated() {
echo "The syntax 'root=${root}' where '${root}' is an encrypted volume is deprecated"
echo "Use 'cryptdevice=${root}:root root=/dev/mapper/root' instead."
if poll_device "${cryptdev}" ${rootdelay}; then
if /sbin/cryptsetup isLuks ${cryptdev} >/dev/null 2>&1; then
[ ${DEPRECATED_CRYPT} -eq 1 ] && warn_deprecated
dopassphrase=1
# If keyfile exists, try to use that
if [ -f ${ckeyfile} ]; then
if [ "${usegpg}" = "y" ]; then
# gpg tty fixup
if [ -e /dev/tty ]; then mv /dev/tty /dev/tty.backup; fi
cp -a /dev/console /dev/tty
while [ ! -e /dev/mapper/${cryptname} ];
do
sleep 2
/usr/bin/gpg -d "${ckeyfile}" 2>/dev/null | cryptsetup --key-file=- luksOpen ${cryptdev} ${cryptname} ${CSQUIET}
dopassphrase=0
done
rm /dev/tty
if [ -e /dev/tty.backup ]; then mv /dev/tty.backup /dev/tty; fi
else
if eval /sbin/cryptsetup --key-file ${ckeyfile} luksOpen ${cryptdev} ${cryptname} ${CSQUIET}; then
dopassphrase=0
else
echo "Invalid keyfile. Reverting to passphrase."
fi
fi
fi
# Ask for a passphrase
if [ ${dopassphrase} -gt 0 ]; then
echo ""
echo "A password is required to access the ${cryptname} volume:"
#loop until we get a real password
while ! eval /sbin/cryptsetup luksOpen ${cryptdev} ${cryptname} ${CSQUIET}; do
sleep 2;
done
fi
if [ -e "/dev/mapper/${cryptname}" ]; then
if [ ${DEPRECATED_CRYPT} -eq 1 ]; then
export root="/dev/mapper/root"
fi
else
err "Password succeeded, but ${cryptname} creation failed, aborting..."
exit 1
fi
elif [ -n "${crypto}" ]; then
[ ${DEPRECATED_CRYPT} -eq 1 ] && warn_deprecated
msg "Non-LUKS encrypted device found..."
if [ $# -ne 5 ]; then
err "Verify parameter format: crypto=hash:cipher:keysize:offset:skip"
err "Non-LUKS decryption not attempted..."
return 1
fi
exe="/sbin/cryptsetup create ${cryptname} ${cryptdev}"
tmp=$(echo "${crypto}" | cut -d: -f1)
[ -n "${tmp}" ] && exe="${exe} --hash \"${tmp}\""
tmp=$(echo "${crypto}" | cut -d: -f2)
[ -n "${tmp}" ] && exe="${exe} --cipher \"${tmp}\""
tmp=$(echo "${crypto}" | cut -d: -f3)
[ -n "${tmp}" ] && exe="${exe} --key-size \"${tmp}\""
tmp=$(echo "${crypto}" | cut -d: -f4)
[ -n "${tmp}" ] && exe="${exe} --offset \"${tmp}\""
tmp=$(echo "${crypto}" | cut -d: -f5)
[ -n "${tmp}" ] && exe="${exe} --skip \"${tmp}\""
if [ -f ${ckeyfile} ]; then
exe="${exe} --key-file ${ckeyfile}"
else
exe="${exe} --verify-passphrase"
echo ""
echo "A password is required to access the ${cryptname} volume:"
fi
eval "${exe} ${CSQUIET}"
if [ $? -ne 0 ]; then
err "Non-LUKS device decryption failed. verify format: "
err " crypto=hash:cipher:keysize:offset:skip"
exit 1
fi
if [ -e "/dev/mapper/${cryptname}" ]; then
if [ ${DEPRECATED_CRYPT} -eq 1 ]; then
export root="/dev/mapper/root"
fi
else
err "Password succeeded, but ${cryptname} creation failed, aborting..."
exit 1
fi
else
err "Failed to open encryption mapping: The device ${cryptdev} is not a LUKS volume and the crypto= paramater was not specified."
fi
fi
rm -f ${ckeyfile}
fi
Create /mnt/lib/initcpio/install/etwo:
#!/bin/bash
build() {
local mod
add_module dm-crypt
if [[ $CRYPTO_MODULES ]]; then
for mod in $CRYPTO_MODULES; do
add_module "$mod"
done
else
add_all_modules '/crypto/'
fi
add_dir "/dev/mapper"
add_binary "cryptsetup"
add_binary "dmsetup"
add_binary "/usr/bin/gpg"
add_file "/usr/lib/udev/rules.d/10-dm.rules"
add_file "/usr/lib/udev/rules.d/13-dm-disk.rules"
add_file "/usr/lib/udev/rules.d/95-dm-notify.rules"
add_file "/usr/lib/initcpio/udev/11-dm-initramfs.rules" "/usr/lib/udev/rules.d/11-dm-initramfs.rules"
add_runscript
help ()
cat<<HELPEOF
This hook allows for an encrypted root device with support for gpg encrypted key files.
To use gpg, the key file must have the extension .gpg and you have to install gpg and add /usr/bin/gpg
to your BINARIES var in /etc/mkinitcpio.conf.
HELPEOF
Edit /mnt/etc/mkinitcpio.conf (only relevant sections displayed):
MODULES=”ext2 ext4” # not sure if this is really nessecary.
BINARIES=”/usr/bin/gpg” # this could probably be done in install/etwo...
HOOKS=”base udev usbinput keymap autodetect pata scsi sata usb etwo filesystems” # (usbinput is only needed if you have an usb keyboard)
Copy the initcpio stuff over to the live cd:
cp /mnt/lib/initcpio/hooks/etwo /lib/initcpio/hooks/
cp /mnt/lib/initcpio/install/etwo /lib/initcpio/install/
cp /mnt/etc/mkinitcpio.conf /etc/
Verify your LOCALE, KEYMAP and TIMEZONE in /etc/rc.conf!
Now reinstall the initcpio:
mkinitcpio -g /mnt/boot/kernel26.img
Make sure there were no errors and that all hooks were included.
13. Decrypt the "var" key to the encrypted root
mkdir /mnt/keys
chmod 500 /mnt/keys
gpg –output /mnt/keys/var -d /mnt/boot/var.gpg
chmod 400 /mnt/keys/var
14. Setup crypttab
Edit /mnt/etc/crypttab:
swap /dev/sda1 SWAP -c aes-cbc-essiv:sha256 -s 256 -h whirlpool
var /dev/sda2 /keys/var
15. Reboot
We're done, you may reboot. Make sure you select the usb stick as the boot device in your bios and hope for the best. . If it didn't work, play with grub's settings or boot from the live cd, mount your encrypted devices and check all settings. You might also have less trouble by using uuid's instead of device names. I chose device names to keep things as simple as possible, even though it's not the optimal way to do it.
Make backups of your data and your usb stick and do not forget your password(s)! Or you can say goodbye to your data forever...
Last edited by fabriceb (2013-01-15 22:36:23)I'm trying to run my install script that is based on https://bbs.archlinux.org/viewtopic.php?id=129885
Decrypting the gpg key after grub works, but then "Devce root already exists." appears every second.
any idea ?
#!/bin/bash
# This script is designed to be run in conjunction with a UEFI boot using Archboot intall media.
# prereqs:
# EFI "BIOS" set to boot *only* from EFI
# successful EFI boot of Archboot USB
# mount /dev/sdb1 /src
set -o nounset
#set -o errexit
# Host specific configuration
# this whole script needs to be customized, particularly disk partitions
# and configuration, but this section contains global variables that
# are used during the system configuration phase for convenience
HOSTNAME=daniel
USERNAME=user
# Globals
# We don't need to set these here but they are used repeatedly throughout
# so it makes sense to reuse them and allow an easy, one-time change if we
# need to alter values such as the install target mount point.
INSTALL_TARGET="/install"
HR="--------------------------------------------------------------------------------"
PACMAN="pacman --noconfirm --config /tmp/pacman.conf"
TARGET_PACMAN="pacman --noconfirm --config /tmp/pacman.conf -r ${INSTALL_TARGET}"
CHROOT_PACMAN="pacman --noconfirm --cachedir /var/cache/pacman/pkg --config /tmp/pacman.conf -r ${INSTALL_TARGET}"
FILE_URL="file:///packages/core-$(uname -m)/pkg"
FTP_URL='ftp://mirrors.kernel.org/archlinux/$repo/os/$arch'
HTTP_URL='http://mirrors.kernel.org/archlinux/$repo/os/$arch'
# Functions
# I've avoided using functions in this script as they aren't required and
# I think it's more of a learning tool if you see the step-by-step
# procedures even with minor duplciations along the way, but I feel that
# these functions clarify the particular steps of setting values in config
# files.
SetValue () {
# EXAMPLE: SetValue VARIABLENAME '\"Quoted Value\"' /file/path
VALUENAME="$1" NEWVALUE="$2" FILEPATH="$3"
sed -i "s+^#\?\(${VALUENAME}\)=.*$+\1=${NEWVALUE}+" "${FILEPATH}"
CommentOutValue () {
VALUENAME="$1" FILEPATH="$2"
sed -i "s/^\(${VALUENAME}.*\)$/#\1/" "${FILEPATH}"
UncommentValue () {
VALUENAME="$1" FILEPATH="$2"
sed -i "s/^#\(${VALUENAME}.*\)$/\1/" "${FILEPATH}"
# Initialize
# Warn the user about impending doom, set up the network on eth0, mount
# the squashfs images (Archboot does this normally, we're just filling in
# the gaps resulting from the fact that we're doing a simple scripted
# install). We also create a temporary pacman.conf that looks for packages
# locally first before sourcing them from the network. It would be better
# to do either *all* local or *all* network but we can't for two reasons.
# 1. The Archboot installation image might have an out of date kernel
# (currently the case) which results in problems when chrooting
# into the install mount point to modprobe efivars. So we use the
# package snapshot on the Archboot media to ensure our kernel is
# the same as the one we booted with.
# 2. Ideally we'd source all local then, but some critical items,
# notably grub2-efi variants, aren't yet on the Archboot media.
# Warn
timer=9
echo -e "\n\nMAC WARNING: This script is not designed for APPLE MAC installs and will potentially misconfigure boot to your existing OS X installation. STOP NOW IF YOU ARE ON A MAC.\n\n"
echo -n "GENERAL WARNING: This procedure will completely format /dev/sda. Please cancel with ctrl-c to cancel within $timer seconds..."
while [[ $timer -gt 0 ]]
do
sleep 1
let timer-=1
echo -en "$timer seconds..."
done
echo "STARTING"
# Get Network
echo -n "Waiting for network address.."
#dhclient eth0
dhcpcd -p eth0
echo -n "Network address acquired."
# Mount packages squashfs images
umount "/packages/core-$(uname -m)"
umount "/packages/core-any"
rm -rf "/packages/core-$(uname -m)"
rm -rf "/packages/core-any"
mkdir -p "/packages/core-$(uname -m)"
mkdir -p "/packages/core-any"
modprobe -q loop
modprobe -q squashfs
mount -o ro,loop -t squashfs "/src/packages/archboot_packages_$(uname -m).squashfs" "/packages/core-$(uname -m)"
mount -o ro,loop -t squashfs "/src/packages/archboot_packages_any.squashfs" "/packages/core-any"
# Create temporary pacman.conf file
cat << PACMANEOF > /tmp/pacman.conf
[options]
Architecture = auto
CacheDir = ${INSTALL_TARGET}/var/cache/pacman/pkg
CacheDir = /packages/core-$(uname -m)/pkg
CacheDir = /packages/core-any/pkg
[core]
Server = ${FILE_URL}
Server = ${FTP_URL}
Server = ${HTTP_URL}
[extra]
Server = ${FILE_URL}
Server = ${FTP_URL}
Server = ${HTTP_URL}
#Uncomment to enable pacman -Sy yaourt
[archlinuxfr]
Server = http://repo.archlinux.fr/\$arch
PACMANEOF
# Prepare pacman
[[ ! -d "${INSTALL_TARGET}/var/cache/pacman/pkg" ]] && mkdir -m 755 -p "${INSTALL_TARGET}/var/cache/pacman/pkg"
[[ ! -d "${INSTALL_TARGET}/var/lib/pacman" ]] && mkdir -m 755 -p "${INSTALL_TARGET}/var/lib/pacman"
${PACMAN} -Sy
${TARGET_PACMAN} -Sy
# Install prereqs from network (not on archboot media)
echo -e "\nInstalling prereqs...\n$HR"
#sed -i "s/^#S/S/" /etc/pacman.d/mirrorlist # Uncomment all Server lines
UncommentValue S /etc/pacman.d/mirrorlist # Uncomment all Server lines
${PACMAN} --noconfirm -Sy gptfdisk btrfs-progs-unstable libusb-compat gnupg
# Configure Host
# Here we create three partitions:
# 1. efi and /boot (one partition does double duty)
# 2. swap
# 3. our encrypted root
# Note that all of these are on a GUID partition table scheme. This proves
# to be quite clean and simple since we're not doing anything with MBR
# boot partitions and the like.
echo -e "format\n"
# shred -v /dev/sda
# disk prep
sgdisk -Z /dev/sda # zap all on disk
#sgdisk -Z /dev/mmcb1k0 # zap all on sdcard
sgdisk -a 2048 -o /dev/sda # new gpt disk 2048 alignment
#sgdisk -a 2048 -o /dev/mmcb1k0
# create partitions
sgdisk -n 1:0:+200M /dev/sda # partition 1 (UEFI BOOT), default start block, 200MB
sgdisk -n 2:0:+4G /dev/sda # partition 2 (SWAP), default start block, 200MB
sgdisk -n 3:0:0 /dev/sda # partition 3, (LUKS), default start, remaining space
#sgdisk -n 1:0:1800M /dev/mmcb1k0 # root.gpg
# set partition types
sgdisk -t 1:ef00 /dev/sda
sgdisk -t 2:8200 /dev/sda
sgdisk -t 3:8300 /dev/sda
#sgdisk -t 1:0700 /dev/mmcb1k0
# label partitions
sgdisk -c 1:"UEFI Boot" /dev/sda
sgdisk -c 2:"Swap" /dev/sda
sgdisk -c 3:"LUKS" /dev/sda
#sgdisk -c 1:"Key" /dev/mmcb1k0
echo -e "create gpg file\n"
# create gpg file
dd if=/dev/urandom bs=512 count=4 | gpg -v --cipher-algo aes256 --digest-algo sha512 -c -a > /root/root.gpg
echo -e "format LUKS on root\n"
# format LUKS on root
gpg -q -d /root/root.gpg 2>/dev/null | cryptsetup -v --key-file=- -c aes-xts-plain -s 512 --hash sha512 luksFormat /dev/sda3
echo -e "open LUKS on root\n"
gpg -d /root/root.gpg 2>/dev/null | cryptsetup -v --key-file=- luksOpen /dev/sda3 root
# NOTE: make sure to add dm_crypt and aes_i586 to MODULES in rc.conf
# NOTE2: actually this isn't required since we're mounting an encrypted root and grub2/initramfs handles this before we even get to rc.conf
# make filesystems
# following swap related commands not used now that we're encrypting our swap partition
#mkswap /dev/sda2
#swapon /dev/sda2
#mkfs.ext4 /dev/sda3 # this is where we'd create an unencrypted root partition, but we're using luks instead
echo -e "\nCreating Filesystems...\n$HR"
# make filesystems
mkfs.ext4 /dev/mapper/root
mkfs.vfat -F32 /dev/sda1
#mkfs.vfat -F32 /dev/mmcb1k0p1
echo -e "mount targets\n"
# mount target
#mount /dev/sda3 ${INSTALL_TARGET} # this is where we'd mount the unencrypted root partition
mount /dev/mapper/root ${INSTALL_TARGET}
# mount target
mkdir ${INSTALL_TARGET}
# mkdir ${INSTALL_TARGET}/key
# mount -t vfat /dev/mmcb1k0p1 ${INSTALL_TARGET}/key
mkdir ${INSTALL_TARGET}/boot
mount -t vfat /dev/sda1 ${INSTALL_TARGET}/boot
# Install base, necessary utilities
mkdir -p ${INSTALL_TARGET}/var/lib/pacman
${TARGET_PACMAN} -Sy
${TARGET_PACMAN} -Su base
# curl could be installed later but we want it ready for rankmirrors
${TARGET_PACMAN} -S curl
${TARGET_PACMAN} -S libusb-compat gnupg
${TARGET_PACMAN} -R grub
rm -rf ${INSTALL_TARGET}/boot/grub
${TARGET_PACMAN} -S grub2-efi-x86_64
# Configure new system
SetValue HOSTNAME ${HOSTNAME} ${INSTALL_TARGET}/etc/rc.conf
sed -i "s/^\(127\.0\.0\.1.*\)$/\1 ${HOSTNAME}/" ${INSTALL_TARGET}/etc/hosts
SetValue CONSOLEFONT Lat2-Terminus16 ${INSTALL_TARGET}/etc/rc.conf
#following replaced due to netcfg
#SetValue interface eth0 ${INSTALL_TARGET}/etc/rc.conf
# write fstab
# You can use UUID's or whatever you want here, of course. This is just
# the simplest approach and as long as your drives aren't changing values
# randomly it should work fine.
cat > ${INSTALL_TARGET}/etc/fstab <<FSTAB_EOF
# /etc/fstab: static file system information
# <file system> <dir> <type> <options> <dump> <pass>
tmpfs /tmp tmpfs nodev,nosuid 0 0
/dev/sda1 /boot vfat defaults 0 0
/dev/mapper/cryptswap none swap defaults 0 0
/dev/mapper/root / ext4 defaults,noatime 0 1
FSTAB_EOF
# write etwo
mkdir -p /lib/initcpio/hooks/
mkdir -p /lib/initcpio/install/
cp /src/etwo_hooks /lib/initcpio/hooks/etwo
cp /src/etwo_install /lib/initcpio/install/etwo
mkdir -p ${INSTALL_TARGET}/lib/initcpio/hooks/
mkdir -p ${INSTALL_TARGET}/lib/initcpio/install/
cp /src/etwo_hooks ${INSTALL_TARGET}/lib/initcpio/hooks/etwo
cp /src/etwo_install ${INSTALL_TARGET}/lib/initcpio/install/etwo
# write crypttab
# encrypted swap (random passphrase on boot)
echo cryptswap /dev/sda2 SWAP "-c aes-xts-plain -h whirlpool -s 512" >> ${INSTALL_TARGET}/etc/crypttab
# copy configs we want to carry over to target from install environment
mv ${INSTALL_TARGET}/etc/resolv.conf ${INSTALL_TARGET}/etc/resolv.conf.orig
cp /etc/resolv.conf ${INSTALL_TARGET}/etc/resolv.conf
mkdir -p ${INSTALL_TARGET}/tmp
cp /tmp/pacman.conf ${INSTALL_TARGET}/tmp/pacman.conf
# mount proc, sys, dev in install root
mount -t proc proc ${INSTALL_TARGET}/proc
mount -t sysfs sys ${INSTALL_TARGET}/sys
mount -o bind /dev ${INSTALL_TARGET}/dev
echo -e "umount boot\n"
# we have to remount /boot from inside the chroot
umount ${INSTALL_TARGET}/boot
# Create install_efi script (to be run *after* chroot /install)
touch ${INSTALL_TARGET}/install_efi
chmod a+x ${INSTALL_TARGET}/install_efi
cat > ${INSTALL_TARGET}/install_efi <<EFI_EOF
# functions (these could be a library, but why overcomplicate things
SetValue () { VALUENAME="\$1" NEWVALUE="\$2" FILEPATH="\$3"; sed -i "s+^#\?\(\${VALUENAME}\)=.*\$+\1=\${NEWVALUE}+" "\${FILEPATH}"; }
CommentOutValue () { VALUENAME="\$1" FILEPATH="\$2"; sed -i "s/^\(\${VALUENAME}.*\)\$/#\1/" "\${FILEPATH}"; }
UncommentValue () { VALUENAME="\$1" FILEPATH="\$2"; sed -i "s/^#\(\${VALUENAME}.*\)\$/\1/" "\${FILEPATH}"; }
echo -e "mount boot\n"
# remount here or grub et al gets confused
mount -t vfat /dev/sda1 /boot
# mkinitcpio
# NOTE: intel_agp drm and i915 for intel graphics
SetValue MODULES '\\"dm_mod dm_crypt aes_x86_64 ext2 ext4 vfat intel_agp drm i915\\"' /etc/mkinitcpio.conf
SetValue HOOKS '\\"base udev pata scsi sata usb usbinput keymap consolefont etwo encrypt filesystems\\"' /etc/mkinitcpio.conf
SetValue BINARIES '\\"/usr/bin/gpg\\"' /etc/mkinitcpio.conf
mkinitcpio -p linux
# kernel modules for EFI install
modprobe efivars
modprobe dm-mod
# locale-gen
UncommentValue de_AT /etc/locale.gen
locale-gen
# install and configure grub2
# did this above
#${CHROOT_PACMAN} -Sy
#${CHROOT_PACMAN} -R grub
#rm -rf /boot/grub
#${CHROOT_PACMAN} -S grub2-efi-x86_64
# you can be surprisingly sloppy with the root value you give grub2 as a kernel option and
# even omit the cryptdevice altogether, though it will wag a finger at you for using
# a deprecated syntax, so we're using the correct form here
# NOTE: take out i915.modeset=1 unless you are on intel graphics
SetValue GRUB_CMDLINE_LINUX '\\"cryptdevice=/dev/sda3:root cryptkey=/dev/sda1:vfat:/root.gpg add_efi_memmap i915.i915_enable_rc6=1 i915.i915_enable_fbc=1 i915.lvds_downclock=1 pcie_aspm=force quiet\\"' /etc/default/grub
# set output to graphical
SetValue GRUB_TERMINAL_OUTPUT gfxterm /etc/default/grub
SetValue GRUB_GFXMODE 960x600x32,auto /etc/default/grub
SetValue GRUB_GFXPAYLOAD_LINUX keep /etc/default/grub # comment out this value if text only mode
# install the actual grub2. Note that despite our --boot-directory option we will still need to move
# the grub directory to /boot/grub during grub-mkconfig operations until grub2 gets patched (see below)
grub_efi_x86_64-install --bootloader-id=grub --no-floppy --recheck
# create our EFI boot entry
# bug in the HP bios firmware (F.08)
efibootmgr --create --gpt --disk /dev/sda --part 1 --write-signature --label "ARCH LINUX" --loader "\\\\grub\\\\grub.efi"
# copy font for grub2
cp /usr/share/grub/unicode.pf2 /boot/grub
# generate config file
grub-mkconfig -o /boot/grub/grub.cfg
exit
EFI_EOF
# Install EFI using script inside chroot
chroot ${INSTALL_TARGET} /install_efi
rm ${INSTALL_TARGET}/install_efi
# Post install steps
# anything you want to do post install. run the script automatically or
# manually
touch ${INSTALL_TARGET}/post_install
chmod a+x ${INSTALL_TARGET}/post_install
cat > ${INSTALL_TARGET}/post_install <<POST_EOF
set -o errexit
set -o nounset
# functions (these could be a library, but why overcomplicate things
SetValue () { VALUENAME="\$1" NEWVALUE="\$2" FILEPATH="\$3"; sed -i "s+^#\?\(\${VALUENAME}\)=.*\$+\1=\${NEWVALUE}+" "\${FILEPATH}"; }
CommentOutValue () { VALUENAME="\$1" FILEPATH="\$2"; sed -i "s/^\(\${VALUENAME}.*\)\$/#\1/" "\${FILEPATH}"; }
UncommentValue () { VALUENAME="\$1" FILEPATH="\$2"; sed -i "s/^#\(\${VALUENAME}.*\)\$/\1/" "\${FILEPATH}"; }
# root password
echo -e "${HR}\\nNew root user password\\n${HR}"
passwd
# add user
echo -e "${HR}\\nNew non-root user password (username:${USERNAME})\\n${HR}"
groupadd sudo
useradd -m -g users -G audio,lp,optical,storage,video,games,power,scanner,network,sudo,wheel -s /bin/bash ${USERNAME}
passwd ${USERNAME}
# mirror ranking
echo -e "${HR}\\nRanking Mirrors (this will take a while)\\n${HR}"
cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.orig
mv /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.all
sed -i "s/#S/S/" /etc/pacman.d/mirrorlist.all
rankmirrors -n 5 /etc/pacman.d/mirrorlist.all > /etc/pacman.d/mirrorlist
# temporary fix for locale.sh update conflict
mv /etc/profile.d/locale.sh /etc/profile.d/locale.sh.preupdate || true
# yaourt repo (add to target pacman, not tmp pacman.conf, for ongoing use)
echo -e "\\n[archlinuxfr]\\nServer = http://repo.archlinux.fr/\\\$arch" >> /etc/pacman.conf
echo -e "\\n[haskell]\\nServer = http://www.kiwilight.com/\\\$repo/\\\$arch" >> /etc/pacman.conf
# additional groups and utilities
pacman --noconfirm -Syu
pacman --noconfirm -S base-devel
pacman --noconfirm -S yaourt
# sudo
pacman --noconfirm -S sudo
cp /etc/sudoers /tmp/sudoers.edit
sed -i "s/#\s*\(%wheel\s*ALL=(ALL)\s*ALL.*$\)/\1/" /tmp/sudoers.edit
sed -i "s/#\s*\(%sudo\s*ALL=(ALL)\s*ALL.*$\)/\1/" /tmp/sudoers.edit
visudo -qcsf /tmp/sudoers.edit && cat /tmp/sudoers.edit > /etc/sudoers
# power
pacman --noconfirm -S acpi acpid acpitool cpufrequtils
yaourt --noconfirm -S powertop2
sed -i "/^DAEMONS/ s/)/ @acpid)/" /etc/rc.conf
sed -i "/^MODULES/ s/)/ acpi-cpufreq cpufreq_ondemand cpufreq_powersave coretemp)/" /etc/rc.conf
# following requires my acpi handler script
echo "/etc/acpi/handler.sh boot" > /etc/rc.local
# time
pacman --noconfirm -S ntp
sed -i "/^DAEMONS/ s/hwclock /!hwclock @ntpd /" /etc/rc.conf
# wireless (wpa supplicant should already be installed)
pacman --noconfirm -S iw wpa_supplicant rfkill
pacman --noconfirm -S netcfg wpa_actiond ifplugd
mv /etc/wpa_supplicant.conf /etc/wpa_supplicant.conf.orig
echo -e "ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=network\nupdate_config=1" > /etc/wpa_supplicant.conf
# make sure to copy /etc/network.d/examples/wireless-wpa-config to /etc/network.d/home and edit
sed -i "/^DAEMONS/ s/)/ @net-auto-wireless @net-auto-wired)/" /etc/rc.conf
sed -i "/^DAEMONS/ s/ network / /" /etc/rc.conf
echo -e "\nWIRELESS_INTERFACE=wlan0" >> /etc/rc.conf
echo -e "WIRED_INTERFACE=eth0" >> /etc/rc.conf
echo "options iwlagn led_mode=2" > /etc/modprobe.d/iwlagn.conf
# sound
pacman --noconfirm -S alsa-utils alsa-plugins
sed -i "/^DAEMONS/ s/)/ @alsa)/" /etc/rc.conf
mv /etc/asound.conf /etc/asound.conf.orig || true
#if alsamixer isn't working, try alsamixer -Dhw and speaker-test -Dhw -c 2
# video
pacman --noconfirm -S base-devel mesa mesa-demos
# x
#pacman --noconfirm -S xorg xorg-xinit xorg-utils xorg-server-utils xdotool xorg-xlsfonts
#yaourt --noconfirm -S xf86-input-wacom-git # NOT NEEDED? input-wacom-git
#TODO: cut down the install size
#pacman --noconfirm -S xorg-server xorg-xinit xorg-utils xorg-server-utils
# TODO: wacom
# environment/wm/etc.
#pacman --noconfirm -S xfce4 compiz ccsm
#pacman --noconfirm -S xcompmgr
#yaourt --noconfirm -S physlock unclutter
#pacman --noconfirm -S rxvt-unicode urxvt-url-select hsetroot
#pacman --noconfirm -S gtk2 #gtk3 # for taffybar?
#pacman --noconfirm -S ghc
# note: try installing alex and happy from cabal instead
#pacman --noconfirm -S haskell-platform haskell-hscolour
#yaourt --noconfirm -S xmonad-darcs xmonad-contrib-darcs xcompmgr
#yaourt --noconfirm -S xmobar-git
# TODO: edit xfce to use compiz
# TODO: xmonad, but deal with video tearing
# TODO: xmonad-darcs fails to install from AUR. haskell dependency hell.
# switching to cabal
# fonts
pacman --noconfirm -S terminus-font
yaourt --noconfirm -S webcore-fonts
yaourt --noconfirm -S fontforge libspiro
yaourt --noconfirm -S freetype2-git-infinality
# TODO: sed infinality and change to OSX or OSX2 mode
# and create the sym link from /etc/fonts/conf.avail to conf.d
# misc apps
#pacman --noconfirm -S htop openssh keychain bash-completion git vim
#pacman --noconfirm -S chromium flashplugin
#pacman --noconfirm -S scrot mypaint bc
#yaourt --noconfirm -S task-git stellarium googlecl
# TODO: argyll
POST_EOF
# Post install in chroot
#echo "chroot and run /post_install"
chroot /install /post_install
rm /install/post_install
# copy grub.efi file to the default HP EFI boot manager path
mkdir -p ${INSTALL_TARGET}/boot/EFI/Microsoft/BOOT/
mkdir -p ${INSTALL_TARGET}/boot/EFI/BOOT/
cp ${INSTALL_TARGET}/boot/grub/grub.efi ${INSTALL_TARGET}/boot/EFI/Microsoft/BOOT/bootmgfw.efi
cp ${INSTALL_TARGET}/boot/grub/grub.efi ${INSTALL_TARGET}/boot/EFI/BOOT/BOOTX64.EFI
cp /root/root.gpg ${INSTALL_TARGET}/boot/
# NOTES/TODO -
Using scripting with networking equipment under Windows
It can be a challenge to use scripting to automate working with Cisco devices. The Cisco IOS does not seem to directly provide a command line interface. You are forced to find a way to automate interaction with a telnet or ssh session.
The PERL language provides a number of object-oriented methods to help manage an interactive session, most notably Net::SSH::Expect and Net::Appliance::Session. These options can work well in a Unix environment, but not under MS Windows.
There are PERL for Windows options, the best probably being Strawberry PERL. There is also a Unix under Windows option known as CYGWIN that is freely available. Unfortunately none of these will work well with the way Windows manages low-level terminal I/O. The curious can google "windows pseudo terminal" to see all the technical details.
One way that does work under Windows is Tcl. It was initially named Tool Command Language. It is sometimes shown as Tcl/Tk.
Interestingly enough, Tcl is included within Cisco IOS as tclsh. There is no interaction with the tclsh and this example. It is just a bit of a curious coincidence.
A Tcl port to Windows can be downloaded from http://www.activestate.com/activetcl/downloads. Select Download ActiveTCL for Windows. A direct link to the download that worked at the time of writing is Download ActiveTcl 8.5.14 for Windows (x86)
Once base Tcl has been downloaded and installed there is one other component that will need to be installed from the Tcl Extension Archive, the expect package.
The teacup program that is installed with the base Tcl package makes this easy. The teacup program will work with a proxy.
You can set these Windows environment variables to specify proxy details:
set http_proxy=
set http_proxy_user=
set http_proxy_pass=
Then run teacup install expect
The plink tool from the PuTTY download is also needed. It can be obtained from http://www.putty.org/.
The sample that follows assumes that the data files, script and plink.exe executable all reside in the same directory.
A sample Tcl script follows that reads a file of devices and a file of commands. It will run the list of commands against each device in the device file. It has some basic error checking, but should best be considered a ‘beta’ version. You could do more complex interactions in the Tcl script by adding exp_send and expect command statements. In short, if you can type it you could script it!
Change directory to where your script, plink.exe and data is stored and run with tclsh <script_name>
devices.list
# Comment lines are allowed if they start with a hash mark
# <IP_Addr> <userid> <password> <ssh|telnet> <timeout_in_secs>
nnn.nnn.nnn.nnn <userid> <password> ssh <timeout_in_secs>
nnn.nnn.nnn.nnn <userid> <password> telnet 30
commands.list
# term length 0 needed or else IOS will wait for an enter to be pressed at the --More-- prompts
term length 0
show run
exit
Script:
# Run batch commands against one or more devices
package require Expect
exp_log_user 0
set exp_internal 0
set exp::nt_debug 0
set prompt "(#\s*$|>\s*$)"
set env(TERM) dumb
set file_channel [open "devices.list" r]
set DEVICES [read $file_channel]
close $file_channel
set file_channel [open "commands.list" r]
set COMMANDS [read $file_channel]
close $file_channel
set command_entries [split $COMMANDS "\n"]
set device_entries [split $DEVICES "\n"]
proc timedout {{msg {none}}} {
send_user "Timed out (reason: $msg)\n"
if {[info exists ::expect_out]} { parray ::expect_out }
exit 1
foreach device_entry $device_entries {
if {[string length $device_entry] == 0 || [regexp {[ \t]*#} $device_entry]} { continue }
set device [lindex $device_entry 0]
set user [lindex $device_entry 1]
set pass [lindex $device_entry 2]
set mode [lindex $device_entry 3]
set wait [lindex $device_entry 4]
set serial [lindex $device_entry 5]
# puts "Device=$device"
# puts "User=$user"
# puts "Mode=$mode"
# puts "Wait=$wait"
set timeout $wait
# Spawning the Session
# If you are logging on to the remote machine using "ssh", "slogin" or "rlogin", the information
# gets processed in a slightly different manner. With any of these methods, it is necessary to
# include an additional -l option to specify a username.
# Next, the $spawn_id variable is captured, storing information about this spawn session in
# memory for future reference.
# If you are logging in via Telnet, the final code block in this section is required to pass the
# username to Telnet. If the login is completed before the script times out, the exp_send command
# passes the username.
switch -exact $mode {
"telnet" { set pid [spawn plink -telnet -l $user $device] }
"ssh" { set pid [spawn plink -ssh -l $user -pw $pass $device] }
"serial" { set pid [spawn plink -serial $serial -l $user -pw $pass $device] }
set id $spawn_id
if {$mode == "telnet"} {
expect -i $id timeout {
timedout "in user login"
} eof {
timedout "spawn failed with eof on login"
} -re "(login|Username):.*" {
exp_send -i $id -- "$user\r"
# Handling Errors
# The error-handling section of the script is a while loop that anticipates a number of problems
# that could occur during login. This section is not exhaustive. For example, you could also add
# provisions for invalid usernames and passwords.
# If the login is not completed during the allotted time frame, which is set from the devices.list file
# and specified with expect -i $id timeout, the program displays an appropriate error message.
# The remainder of this loop makes use of the exp_send command to allow for other scenarios, such
# as the user typing "yes" when prompted to proceed with the connection, entering a password, or
# resetting the terminal mode.
set logged_in 0
while {!$logged_in} {
expect -i $id timeout {
timedout "in while loop"
break
} eof {
timedout "spawn failed with eof"
break
} "Store key in cache? (y/n)" {
exp_send -i $id -- "y\r"
} -re "\[Pp\]assword:.*" {
exp_send -i $id -- "$pass\r"
} "TERM = (*) " {
exp_send -i $id -- "$env(TERM)\r"
} -re $prompt {
set logged_in 1
foreach command $command_entries {
if {[string length $command] == 0 || [regexp {[ \t]*#} $command]} { continue }
# Sending the Request
# If the login is successful, the code in the if statement below is used to send the "cmd" request
# to display files and directories. After the request is sent with exp_send, the resulting output
# is captured in the dir variable, which is set on the fourth line of the code shown below.
if {$logged_in} {
exp_send -i $id -- "$command\r"
expect -i $id timeout {timedout "on prompt"} -re $prompt
puts "$expect_out(buffer)"
# Closing the Spawned Session
# The exp_close command ends the session spawned earlier. Just to be sure that session
# does indeed close, the exp_wait command causes the script to continue running until a result is
# obtained from the system processes. If the system hangs, it is likely because exp_close was not
# able to close the spawned process, and you may need to kill it manually.
catch { exp_close -i $id }
exp_wait -i $id
set logged_in 0
*** End of Document ***Your friend will have to save the templates as CS6, which he can do.
-
Hi Gang,
Been wrestling with a JQuery script, getting it to display on this page for the main images:
http://72.29.76.51/~organica/index.html
Any insight to what I'm doing wrong is appreciated.
Here's the page code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><!-- InstanceBegin template="/Templates/main.dwt" codeOutsideHTMLIsLocked="false" -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<!-- InstanceBeginEditable name="doctitle" -->
<title>Organica Natural Foods | Northvale, New Jersey</title>
<!-- InstanceEndEditable -->
<link href="main.css" rel="stylesheet" type="text/css" />
<link href="Spry-UI-1.7/css/Menu/basic/SpryMenuBasic.css" rel="stylesheet" type="text/css" />
<link href="s3slider.css" rel="stylesheet" type="text/css" />
<script src="js/jquery-1.6.4.min.js" type="text/javascript"></script>
<script src="js/s3Slider.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#slider').s3Slider({
timeOut: 3000
</script>
<script src="Spry-UI-1.7/includes/SpryDOMUtils.js" type="text/javascript"></script>
<script src="Spry-UI-1.7/includes/SpryDOMEffects.js" type="text/javascript"></script>
<script src="Spry-UI-1.7/includes/SpryWidget.js" type="text/javascript"></script>
<script src="Spry-UI-1.7/includes/SpryMenu.js" type="text/javascript"></script>
<script src="Spry-UI-1.7/includes/plugins/MenuBar2/SpryMenuBarKeyNavigationPlugin.js" type="text/javascript"></script>
<script src="Spry-UI-1.7/includes/plugins/MenuBar2/SpryMenuBarIEWorkaroundsPlugin.js" type="text/javascript"></script>
<style type="text/css">
/* BeginOAWidget_Instance_2141544: #MenuBar */
/* Settable values for skinning a Basic menu via presets. If presets are not sufficient, most skinning should be done in
these rules, with the exception of the images used for down or right pointing arrows, which are in the file SpryMenuBasic.css
These assume the following widget classes for menu layout (set in a preset)
.MenuBar - Applies to all menubars - default is horizontal bar, all submenus are vertical - 2nd level subs and beyond are pull-right.
.MenuBarVertical - vertical main bar; all submenus are pull-right.
You can also pass in extra classnames to set your desired top level menu bar layout. Normally, these are set by using a preset.
They only apply to horizontal menu bars:
MenuBarLeftShrink - The menu bar will be horizontally 'shrinkwrapped' to be just large enough to hold its items, and left aligned
MenuBarRightShrink - Just like MenuBarLeftShrink, but right aligned
MenuBarFixedLeft - Fixed at a specified width set in the rule '.MenuBarFixedLeft', and left aligned.
MenuBarFixedCentered - - Fixed at a specified width set in the rule '.MenuBarFixedCentered',
and centered in its parent container.
MenuBarFullwidth - Grows to fill its parent container width.
In general, all rules specified in this file are prefixed by #MenuBar so they only apply to instances of the widget inserted along
with the rules. This permits use of multiple MenuBarBasic widgets on the same page with different layouts. Because of IE6 limitations,
there are a few rules where this was not possible. Those rules are so noted in comments.
#MenuBar {
background-color:#003300;
font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif; /* Specify fonts on on MenuBar and subMenu MenuItemContainer, so MenuItemContainer,
MenuItem, and MenuItemLabel
at a given level all use same definition for ems.
Note that this means the size is also inherited to child submenus,
so use caution in using relative sizes other than
100% on submenu fonts. */
font-weight: bold;
font-size: 12px;
font-style: normal;
padding:0;
/* Caution: because ID+class selectors do not work properly in IE6, but we want to restrict these rules to just this
widget instance, we have used string-concatenated classnames for our selectors for the layout type of the menubar
in this section. These have very low specificity, so be careful not to accidentally override them. */
.MenuBar br { /* using just a class so it has same specificity as the ".MenuBarFixedCentered br" rule bleow */
display:none;
.MenuBarLeftShrink {
float: left; /* shrink to content, as well as float the MenuBar */
width: auto;
.MenuBarRightShrink {
float: right; /* shrink to content, as well as float the MenuBar */
width: auto;
.MenuBarFixedLeft {
float: left;
width: 100%;
.MenuBarFixedCentered {
float: none;
width: 100%;
margin-left:auto;
margin-right:auto;
.MenuBarFixedCentered br {
clear:both;
display:block;
.MenuBarFixedCentered .SubMenu br {
display:none;
.MenuBarFullwidth {
float: left;
width: 100%;
/* Top level menubar items - these actually apply to all items, and get overridden for 1st or successive level submenus */
#MenuBar .MenuItemContainer {
padding: 0px 0px 0px 0px;
margin: 0;
/* Zero out margin on the item containers. The MenuItem is the active hover area.
For most items, we have to do top or bottom padding or borders only on the MenuItem
or a child so we keep the entire submenu tiled with items.
Setting this to 0 avoids "dead spots" for hovering. */
#MenuBar .MenuItem {
padding: 0px 8px 0px 8px;
background-color:transparent;
border-right: 1px solid #FFF;
border-left: 1px solid #FFF;
#MenuBar .MenuItemFirst {
border-style: none none none none;
#MenuBar .MenuItemLast {
border-style: none solid none none;
#MenuBar .MenuItem .MenuItemLabel{
text-align:left;
line-height:1.4em;
color:#ffffff;
background-color:transparent;
padding: 6px 15px 6px 15px;
width: 10em;
width:auto;
.SpryIsIE6 #MenuBar .MenuItem .MenuItemLabel{
width:1em; /* Equivalent to min-width in modern browsers */
/* First level submenu items */
#MenuBar .SubMenu .MenuItem {
font-family: Arial, Helvetica, sans-serif;
font-weight: bold;
font-size: 12px;
font-style: normal;
background-color:transparent;
padding:0px 8px 0px 0px;
border-width:1px;
border-color: #cccccc #cccccc #cccccc #cccccc;
/* Border styles are overriden by first and last items */
border-style: solid solid none solid;
#MenuBar .SubMenu .MenuItemFirst {
border-style: solid solid none solid;
#MenuBar .SubMenu .MenuItemFirst .MenuItemLabel{
padding-top: 6px;
#MenuBar .SubMenu .MenuItemLast {
border-style: solid solid solid solid;
#MenuBar .SubMenu .MenuItemLast .MenuItemLabel{
padding-bottom: 6px;
#MenuBar .SubMenu .MenuItem .MenuItemLabel{
text-align:left;
line-height:1em;
background-color:transparent;
color:#ffffff;
padding: 6px 12px 6px 5px;
width: 7em;
/* Hover states for containers, items and labels */
#MenuBar .MenuItemHover {
background-color: transparent;
border-color: #cccccc #cccccc #cccccc #cccccc;
#MenuBar .MenuItemWithSubMenu.MenuItemHover .MenuItemLabel{
background-color: transparent; /* consider exposing this prop separately*/
color: #999999;
#MenuBar .MenuItemHover .MenuItemLabel{
background-color: transparent;
color: #999999;
#MenuBar .SubMenu .MenuItemHover {
background-color: #003300;
border-color: #cccccc #cccccc #cccccc #cccccc;
#MenuBar .SubMenu .MenuItemHover .MenuItemLabel{
background-color: transparent;
color: #999999;
/* Submenu properties -- First level of submenus */
#MenuBar .SubMenuVisible {
background-color: #003300;
min-width:0%; /* This keeps the menu from being skinnier than the parent MenuItemContainer - nice to have but not available on ie6 */
border-color: #ffffff #ffffff #ffffff #ffffff;
border-width:0px;
border-style: none none none none;
#MenuBar.MenuBar .SubMenuVisible {/* For Horizontal menubar only */
top: 100%; /* 100% is at the bottom of parent menuItemContainer */
left:0px; /* 'left' may need tuning depending upon borders or padding applied to menubar MenuItemContainer or MenuItem,
and your personal taste.
0px will left align the dropdown with the content area of the MenuItemContainer. Assuming you keep the margins 0
on MenuItemContainer and MenuItem on the parent
menubar, making this equal the sum of the MenuItemContainer & MenuItem padding-left will align
the dropdown with the left of the menu item label.*/
z-index:10;
#MenuBar.MenuBarVertical .SubMenuVisible {
top: 0px;
left:100%;
min-width:0px; /* Do not neeed to match width to parent MenuItemContainer - items will prevent total collapse */
/* Submenu properties -- Second level submenu and beyond - these are visible descendents of .MenuLevel1 */
#MenuBar .MenuLevel1 .SubMenuVisible {
background-color: #003300;
min-width:0px; /* Do not neeed to match width to parent MenuItemContainer - items will prevent total collapse*/
top: 0px; /* If desired, you can move this down a smidge to separate top item''s submenu from menubar -
that is really only needed for submenu on first item of MenuLevel1, or you can make it negative to make submenu more
vertically 'centered' on its invoking item */
left:100%; /* If you want to shift the submenu left to partially cover its invoking item, you can add a margin-left with a
negative value to this rule. Alternatively, if you use fixed-width items, you can change this left value
to use px or ems to get the offset you want. */
/* IE6 rules - you can delete these if you do not want to support IE6 */
/* A note about multiple classes in IE6.
* Some of the rules above use multiple class names on an element for selection, such as "hover" (MenuItemHover) and "has a subMenu" (MenuItemWithSubMenu),
* giving the selector '.MenuItemWithSubMenu.MenuItemHover'.
* Unfortunately IE6 does not support using mutiple classnames in a selector for an element. For a selector such as '.foo.bar.baz', IE6 ignores
* all but the final classname (here, '.baz'), and sets the specificity accordingly, counting just one of those classs as significant. To get around this
* problem, we use the plugin in SpryMenuBarIEWorkaroundsPlugin.js to generate compound classnames for IE6, such as 'MenuItemWithSubMenuHover'.
* Since there are a lot of these needed, the plugin does not generate the extra classes for modern browsers, and we use the CSS2 style mutltiple class
* syntax for that. Since IE6 both applies rules where
* it should not, and gets the specificity wrong too, we have to order rules carefully, so the rule misapplied in IE6 can be overridden.
* So, we put the multiple class rule first. IE6 will mistakenly apply this rule. We follow this with the single-class rule that it would
* mistakenly override, making sure the misinterpreted IE6 specificity is the same as the single-class selector, so the latter wins.
* We then create a copy of the multiple class rule, adding a '.SpryIsIE6' class as context, and making sure the specificity for
* the selector is high enough to beat the single-class rule in the "both classes match" case. We place the IE6 rule at the end of the
* css style block to make it easy to delete if you want to drop IE6 support.
* If you decide you do not need IE6 support, you can get rid of these, as well as the inclusion of the SpryMenuBarIEWorkaroundsPlugin.js script.
* The 'SpryIsIE6' class is placed on the HTML element by the script in SpryMenuBarIEWorkaroundsPlugin.js if the browser is Internet Explorer 6. This avoids the necessity of IE conditional comments for these rules.
.SpryIsIE6 #MenuBar .MenuBarView .MenuItemWithSubMenuHover .MenuItemLabel /* IE6 selector */{
background-color: transparent; /* consider exposing this prop separately*/
color: #999999;
.SpryIsIE6 #MenuBar .MenuBarView .SubMenu .MenuItemWithSubMenuHover .MenuItemLabel/* IE6 selector */{
background-color: transparent; /* consider exposing this prop separately*/
color: #999999;
.SpryIsIE6 #MenuBar .SubMenu .SubMenu /* IE6 selector */{
margin-left: -0px; /* Compensates for at least part of an IE6 "double padding" version of the "double margin" bug */
/* EndOAWidget_Instance_2141544 */
</style>
<script type="text/xml">
<!--
<oa:widgets>
<oa:widget wid="2141544" binding="#MenuBar" />
</oa:widgets>
-->
</script>
<!-- InstanceBeginEditable name="head" -->
<!-- InstanceEndEditable -->
</head>
<body bgcolor="#17321A">
<div id="outerWrapper">
<div id="header"><img src="media/header.jpg" width="960" height="160" alt="organica title" /></div>
<div id="navbar">
<ul id="MenuBar">
<li> <a href="index.html">Home</a></li>
<li> <a href="kitchen.html">Kitchen</a>
<ul>
<li> <a href="menus.html">Menus</a></li>
<li> <a href="catering.html">Catering</a></li>
</ul>
</li>
<li> <a href="juicebar.html">Juice Bar</a></li>
<li> <a href="produce.html">Produce</a></li>
<li> <a href="supplements.html">Supplements</a></li>
<li> <a href="grocery.html">Grocery</a>
<ul>
<li> <a href="packaged.html">Packaged Goods</a></li>
<li> <a href="refrigerated.html">Refrigerated</a></li>
<li> <a href="frozen.html">Frozen Foods</a></li>
<li> <a href="glutenfree.html">Gluten Free</a></li>
</ul>
</li>
<li> <a href="bodycare.html">Body Care</a></li>
<li> <a href="events.html">Events</a></li>
<li> <a href="contact.html">Contact</a>
<ul>
<li> <a href="directions.html">Directions</a></li>
<li> <a href="employment.html">Employment</a></li>
</ul>
</li>
</ul>
<script type="text/javascript">
// BeginOAWidget_Instance_2141544: #MenuBar
var MenuBar = new Spry.Widget.MenuBar2("#MenuBar", {
widgetID: "MenuBar",
widgetClass: "MenuBar MenuBarFullwidth",
insertMenuBarBreak: true,
mainMenuShowDelay: 100,
mainMenuHideDelay: 200,
subMenuShowDelay: 200,
subMenuHideDelay: 200
// EndOAWidget_Instance_2141544
</script>
</div><!-- end navbar -->
<div id="contentWrapper"><!-- InstanceBeginEditable name="sidebar" -->
<div id="sidebar">
<h2>Get Your Organica Loyalty Card<br />
<img src="media/loyalty.jpg" width="200" height="129" alt="loyalty" /></h2>
<hr width="90%" size="1" />
<p>
<style>
.link,
.link a,
.signupframe
color: #000000;
font-family: Arial, Helvetica, sans-serif;
font-size: 13px;
.link,
.link a {
text-decoration: none;
.signupframe {
border: 0px solid #000000;
background: #ffffff;
.signupframe .required {
font-size: 10px;
</style>
</p>
<form method="post" action="https://app.icontact.com/icp/signup.php" name="icpsignup" id="icpsignup8190" accept-charset="UTF-8" onsubmit="return verifyRequired8190();" >
<input type="hidden" name="redirect" value="http://organicanaturalfoods.com/thanks.html" />
<input type="hidden" name="errorredirect" value="http://www.icontact.com/www/signup/error.html" />
<div id="SignUp">
<h2>Sign-up for our Organica e-News<br />
Receive coupons, event info, and more! </h2>
<table width="200" align="center" class="signupframe" border="0" cellspacing="0" cellpadding="5">
<tr>
<td align="center"><input type="text" name="fields_email" /></td>
</tr>
<input type="hidden" name="listid" value="70490" />
<input type="hidden" name="specialid:70490" value="HHBU" />
<input type="hidden" name="clientid" value="971128" />
<input type="hidden" name="formid" value="8190" />
<input type="hidden" name="reallistid" value="1" />
<input type="hidden" name="doubleopt" value="0" />
<tr>
<td><div align="center">
<input type="submit" name="Submit" value="Submit" />
</div></td>
</tr>
</table>
</div>
</form>
<script type="text/javascript">
var icpForm8190 = document.getElementById('icpsignup8190');
if (document.location.protocol === "https:")
icpForm8190.action = "https://app.icontact.com/icp/signup.php";
function verifyRequired8190() {
if (icpForm8190["fields_email"].value == "") {
icpForm8190["fields_email"].focus();
alert("The Email field is required.");
return false;
return true;
</script>
<p></p>
<p>
<iframe src=
"http://www.facebook.com/plugins/likebox.php?href=http%3A%2F%2Fwww.facebook.com%2FOrganicaN aturalFood&width=250&colorscheme=light&show_faces=true&border_color&stream=false&header=fa lse&height=258" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:250px; height:258px;" allowTransparency="true"></iframe>
</p>
</div>
<!-- InstanceEndEditable --><!-- end sidebar --><!-- InstanceBeginEditable name="content" -->
<div id="content">
<div id="s3slider">
<ul id="s3sliderContent">
<li class="s3sliderImage">
<img src="media/front_1.jpg" />
<span>Welcome to Organica!</span>
</li>
<li class="s3sliderImage">
<img src="media/front_2.jpg" />
<span>Welcome to Organica!</span>
</li>
<div class="clear s3sliderImage"></div>
</ul>
</div>
</div>
<!-- InstanceEndEditable --><!-- end content -->
<div id="footer">
<a href="index.html">Home</a> | <a href="about.html">About Us</a> | <a href="links.html">Links</a> | <a href="directions.html">Directions</a> | <a href="employment.html">Employment</a> | <a href="contact.html">Contact Us</a><br />
All contents ©2011 Organica Natural Foods | Site Design: <a href="http://nowagenewmedia.com" target="_blank">Now Age New Media</a></div><!-- end footer -->
</div><!-- end contentWrapper -->
</div>
</body>
<!-- InstanceEnd --></html>Usually, the reason why a widget does not work is because the support files are not-present/corrupt/out-of-date.
Try using
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="http://s3slider-original.googlecode.com/svn/trunk/s3Slider.js"></script>
it may help. The jQuery version can be changed to a more modern one.
Gramps -
Update and Write Back DataTable in Object Variable Using Script Component
Hi All..
I'm trying to update an Object Type Variable [ReadWrite] with a Data Flow Task Script Component. Variable is already holding a record set with Column(s) like, ID, Name, IsProcessed.
Now in my Data Flow Script Component, I'm trying to 1st) Fill a DataTable with my variables value then 2nd) Loop through each Input Rows in Data Flow Component and accordingly if there is a match of ID then updating IsProcessed Column in DataTable. 3rd &Finally,
Copy datatable back to Object Type Variable.
Below is the code used and just for your ref. I tried Printing content of whole DataTable after Update. This looks perfect but not sure why my variable is able to capture it.
using System;
using System.Data;
using System.Data.OleDb;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Text;
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
DataTable dt = new DataTable();
OleDbDataAdapter adapter = new OleDbDataAdapter();
List<string> listriuid = new List<string>();
public override void PreExecute()
base.PreExecute();
public override void PostExecute()
base.PostExecute();
adapter.Fill(dt, this.Variables.varobjChildPackageLog);
dt.AcceptChanges();
foreach (DataRow row in dt.Rows)
if (listriuid.Contains(row["ID"].ToString()))
row["IsProcessed"] = "Y";
// Just to see the Final Data Table Output
//StringBuilder b = new StringBuilder();
//foreach (System.Data.DataRow r in dt.Rows)
// foreach (DataColumn c in dt.Columns)
// b.Append(c.ColumnName.ToString() + ":" + r[c.ColumnName].ToString());
//MessageBox.Show(b.ToString());
this.Variables.varobjChildPackageLog = dt;
dt.Dispose();
adapter.Dispose();
public override void RIUIDInput_ProcessInputRow(RIUIDInputBuffer Row)
try
listriuid.Add(Row.ID.ToString());
catch (Exception ex)
MessageBox.Show(ex.Message.ToString());
Regards, Avik M.why do you need to do this in script task.
This is just a matter of using lookup task while you retrive data from source itself to find the matches and use a derived column transform to check and set appropriate value for IsProcessed column. The object variable itself is not required and you dont
even require a looping statement either!
If both source and lookup tables are in same server then you can just wrap them inside source sql query itself to do matching and retrieve the value for IsProcessed within select statement itself in OLEDB Source inside data flow.
Please Mark This As Answer if it helps to solve the issue Visakh ---------------------------- http://visakhm.blogspot.com/ https://www.facebook.com/VmBlogs -
Vertically sync time position for two or more 2D axis systems?
In DIAdem: VIEW,
Is it possible to vertically sync the time position for two or more 2D axis system charts placed above each other?
I have displayed several channels on one 2D chart, and one channel of particular interest on a separate chart above, which was very easy to do. It would be really useful to sync the time position on both charts, such that scrolling one chart also scrolls the second chart, or zooming one chart also zooms the second chart to the same area, which seems like a fairly basic thing to want to do, but I haven't found a way to do it yet.
Any help greatly appreciated!
Solved!
Go to Solution.Hi Brad,
Yes, I have been using that method, which works fine up to a point.
But, say you have several curves displayed on the bottom chart, with the Y-Axis set to "n Y-axes", then the start of the x-axis will be further across to the right than the top chart which has only one curve displayed.
It is possible to add an empty area to the left of the top chart, to push the start of the x-axis across into alignment (see attached), but every time you add or remove a curve on the bottom chart, or the scale changes enough to add a digit, the start of the x-axis moves and the top chart needs aligning again.
I'm really after a method to lock both ends of both x-axes to the same vertical screen position, so everything stays aligned automatically?
Attachments:
chart - full.JPG 152 KB
chart - detail.JPG 145 KB -
AAT Apple Advanced Typography for the writing systems of world scripts
Thomas Gewecke writes:
If I had to choose one problem which does exist and causes considerable practical difficulties for a lot of people, it would be that lack of full OpenType support in OS X (and the resulting requirement for rare AAT fonts) makes it impossible for Mac users to do everything they might want in a number of important scripts, or to do anything at all in quite a few others.
This is a frequently asked question, so perhaps the simplest solution is to try to support this in a separate thread. It is probably preferable to repeat what Apple has published on the Unicode mailing list on the subject of writing systems in world scripts. A link to a supplier of AAT fonts for lesser languages is included in the references (Bassa, Brahmi, Burmese, Cambodian, Georgian, Inuktitut, Kannada, Laotian, Lepcha, Limbu, Malayalam, N'ko, Osmanya, Sinhala, Tai Le, Tamil, Telugu, Tibetan ...). The most advanced Arabic implementation is Mishafi from Diwan in London - this has earned praise on Typophile. There are several independent software publishers (aside from Apple iWork) that support authoring with AAT Apple Advanced Typography.
According to the Apple Unicode Liason, Deborah Goldsmith, as of OS X 10.2 it is possible for the small type maker to support a writing system in a world script through the optional Apple MORX Metamorphosis Extended tables in the SFNT Spline Font file format. Dropping an SFNT and an input method into the operating system adds the shaping for the writing system. And according to the Apple Unicode Liason, as of OS X 10.4 the optional Apple MORX tables for complex composition and the optional Microsoft GSUB tables for complex composition may peacefully cohabit in the selfsame SFNT Spline Font file (leaving aside the issue of whether this is sound advice, or whether sound advice should say that an SFNT should contain either TrueType or Type 1, either MORX or GSUB - not both in either case).
Hope this helps,
Henrik
References :
http://www.mail-archive.com/[email protected]/msg13047.html
http://lists.apple.com/archives/carbon-dev/2006/Nov/msg00579.html
http://www.xenotypetech.com/
http://www.diwan.com/mishafi/main.htm
http://www.typophile.com/node/16858
http://www.typophile.com/node/18098Please pardon any speedwriting in the following - it's off the cuff :
From the little I understand about the technical details of the differences between AAT and OpenType, I'd guess AAT to be the superior system, from the user's (or font designer's) point of view.
The issue is the business model. Apple TrueType 2 and Apple ColorSync 2 were developed to provide very, very, very highend character:glyph transforms and colour:colourant transforms in an application-independent manner.
The application model was Java and OpenDoc and while OpenDoc is defunct, as is Taligent, Java within which AAT is embedded is alive and kicking. In the application model the idea was that the small developer did not have to independently do elements outside the scope of the application.
Similarly, a graphics library was available to avoid the problem that PostScript is inherently unreliable as it is a programming model that can be used to extend the PostScript graphics model, causing PostScript programs to crash at critical times.
Software publishers in the nineteen-nineties published software for the standalone personal computer with its suite of standalone software. And the standalone software had its own Application Programming Interface that locked XTensions, Plug-ins and more into one and only one suite.
Adobe did NOT want QuickDraw GX and Adobe still has a 'white' paper in which the company states that the idea of the SFNT Spline Font file format as an application-independent product that takes over large parts of line layout is objectionable.
The pendulum does not stand still, however. In the 1970s there were terminals for time-shared centralised computing. In the 1980s and 1990s there were decentralised 'personal' computers in local area networks with their own storage and with graphic displays and printers.
The growth of instructure, both in terms of distributed networking and in terms of an international character set, permits a blend of time-shared computing and 'personal' graphics computing which was intended e.g. with the Apple MessagePad and with Java (Amelio married the ideas).
Apple bled external and internal developers with the late lamented GX and the application model was ten years ahead of its time. Modern imaging models are founded on the ideas implemented in GX and absolutely NOT on the ideas implemented in PostScript and PDF.
Jonathan Seybold told Apple to do an application for pagination, since an application for pagination is the sine qua non for a composition model, a separation model, and a document model (the Apple Portable Digital Document model).
Apple did not do that as it would have caused increased commercial conflict with Adobe, Quark and Macromedia at a time when hardcopy production was still the high end of the Apple product portfolio, and so while ColorSync survived TrueType as prosumer and pro solution suffered.
Ironically, XTT's developer did manage at one time to make his primary Tibetan font usable in both Mac and Windows environments -- by somehow combining AAT and OpenType elements within it -- but his considerable effort was then torpedoed, I gather, by some (unannounced, as usual) changes Apple made in font implementation in 10.4.
Deborah Goldsmith gave bad advice on the Unicode mailing list, I'm sorry but it was not sound technically. Dov Isaacs, Adobe's technical quality manager, gave sound advice in saying that Type 1 splines and TrueType splines should not be housed in the selfsame SFNT Spline Font file. I read what the Xenotype developer posted, and Apple bungled as Apple has bungled other important things like supporting a decent international default separation for ColorSync. There is no excuse whatsoever - if Apple cannot use Apple software with Apple defaults to do a decent job then Apple needs to find out whether it is working for Apple customers or is working for itself.
I don't know what might be necessary to make it possible for Mac users to employ OpenType fonts for complex scripts, but I can't believe that this goal is simply beyond the capabilities of Apple's engineers. Nor do I understand why Apple seems to keep, well, stalling on this issue.
The answer lies in the document model, not in the internationalisation model or in the SFNT imaging model. I am not an expert on Indic scripts (I don't speak or write any of them), but as I understand the matter Indic calligraphic scripts are simulated typographically using a feature called insertion that splits one character code into two glyph codes for vowels.
This type of typographic simulation does not pose problems if you are authoring with the aim of archiving and accessing hardcopy, since your audience is not interacting with the character string, but if you are authoring, archiving, and accessing softcopy then simulation methods such as insertion and bidirectionality may pose problems.
Specifically, if in the process of producing your softcopy pagination you loose the source character stream and the mapping of said character stream to the reshaped and reordered glyph stream, then you have to try to synthesise the character stream. And the more complex the reshaping and reordering, the less likely you are to get a successful simulation.
This is the issue between Adobe PDF produced from PostScript and Microsoft XPS which retains as well the source character stream as the mapping of the character stream to the glyph stream. Adobe PDF, by contrast, is basically a viewable graphic of the glyph stream - Adobe PDF does not even retain semantics for reshaping of formal Danish typography.
Hope this helps,
Henrik
References:
http://www.freepatentsonline.com/y2007/0136660.html -
Can I connect multiple displays using a mac mini
Can I connect 2 displays using the mac mini? If so, are there any accessories that I need? Are there certain monitors or connections that I should use?
Hello,
Assuming this is a 2012 Mini...
2nd Display Support:
Dual/Mirroring*
2nd Max. Resolution:
2560x1600*
Details:
*This model simultaneously supports 1920x1200 on an HDMI or a DVI display (using the included HDMI-to-DVI adapter) and 2560x1600 on a Thunderbolt or Mini DisplayPort display or even a VGA display (with an optional Mini DisplayPort-to-VGA adapter, which is compatible with the Thunderbolt port).
http://www.everymac.com/systems/apple/mac_mini/specs/mac-mini-core-i7-2.6-late-2 012-specs.html
If you need more...
http://eshop.macsales.com/item/NewerTech/VIDU3HDMIDV/
http://eshop.macsales.com/item/NewerTech/VIDU2DVIA/
Maybe you are looking for
-
My apple tv is not working on the computer tab as it says to turn on homesharing and it is on
my apple tv says to turn on homesharing which it already is i am unable to access the photos in the computer tab any suggestions thanks i have restarted and returned on both computer and apple tv btw
-
FRM-92101 when scrolling through a data block on a form
Folks, We recently converted a Forms 6i application to Forms 10g (re-compiled, little changes were requested). Running against an Oracle 10g database (10.1.2.3) on a Solaris server. When users scroll through the data block on a canavas after about 2
-
Trouble shooting network problem
For the time since i have owned my mac computers i had to call apple support and i have to say that they are plaesure to work with.I have four computers a mac pro mac book a mini and a windows machine.I made a dumb mistake by downloading a program ca
-
Under heavy load, flush attribute gives ArrayIndexOutOfBoundsException
Hi, Under heavy load conditions, the jsp include directive's flush attribute which is set to true gives java.lang.ArrayIndexOutOfBoundsException A similar bug 6295722 had been reported earlier. But solution to this is not present. Can you please help
-
TextBox.onInputMethodTextChanged not called after focus is lost
Hello! I'm using NetBeans 6.9 Beta. I have declared the following function: function onInputTextChanged(ime:InputMethodEvent):Void println("Called"); var str = ime.node.id.split(":")[2] ; var mal:Double = Double.parseDouble(st