2011年9月12日 星期一

「sudo」 for Windows PowerShell

相信有許多 Unix-like 的愛用者,
對於 sudo 帶來的便利性及安全性,
都有很高的依賴性及倚靠性,
在 Windows 的世界,雖然有個「以系統管理員身分執行」的玩意兒,
但是在習慣使用文字介面如 cmd, vim, PowerShell 的人們來說,
倘若遇到需要系統管理員權限的設定檔或文字檔,
往往就是一句「XXX」之後,還要到開始功能表尋找到 cmd 或 PowerShell,
然後再用滑鼠點右鍵選擇「以系統管理員身分執行」,然後再 cd 到剛剛的資料夾,再用編輯器開啟、編輯、blah blah....

一來一往,往往費神又費時,
今天介紹在 PowerShell 使用時,
可以輸入 Unix-like 中的 sudo (或使用者自己取)
後面再帶 vim 或 notepad 指令,接著被修改的設定檔或文字檔,
便可以系統管理員權限開啟該設定檔或文字檔,以便進行編修!

一、首先「以系統管理員身分執行」開啟 PowerShell,
預設沒錯的話,您會在您的家目錄,如:C:\Users\XXXXXXX

二、輸入指令以便新增 scripts 資料夾:

New-Item -ItemType directory $HOME\Documents\Scripts


三、使用編輯器如 vim 或 notepad 開啟 PowerShell 之 Profile 檔:
(預設為 WindowsPowerShell\Microsoft.PowerShell_profile.ps1)

notepad.exe $PROFILE

四、新增如下文字於該檔中:

New-PSDrive -name script -PSProvider FileSystem -Root $HOME\Documents\Scripts


五、存檔並離開。

六、重啟你的 PowerShell ,你將發現上面所新增的資料夾被 mount 起來,可以繼續進行:

cd script:


七、進入 script 槽後,用慣用的編輯器開啟新增 sudo.ps1 script檔:

notepad.exe sudo.ps1


八、加入 sudo script 如下:

param(
        [switch]$ps,            # Switch for running args as powershell script
        [string]$file,             # Script/Program to run
        [string]$arguments = $args # Arguments to program/script
     )

# Find our powershell full path
$powershell = (get-command powershell).definition

# Get current directory
$dir = get-location

#If we're running this as a elevated powershell script
if ($ps){

        # Script verification
        if([System.IO.File]::Exists("$(get-location)\$file")) {

                # Set the $script to full path of the ps script
                $script = (get-childitem $file).fullname
        }

        # Create a powershell process
        $psi = new-object System.Diagnostics.ProcessStartInfo $powershell

        $psi.WorkingDirectory = Get-Location

        # Combine the script and its arguments
        $sArgs = $script + " " + $arguments

        # Set the arguments to be the ps script and it's arguments
        $psi.Arguments = "-noexit -command set-location $dir; $sArgs"

        # Magic to run as elevated
        $psi.Verb = "runas";
}

# We're running something other than a powershells script
else {

        # File verification
        if([System.IO.File]::Exists("$(get-location)\$file")) {

                # Get full path
                $file = (get-childitem $file).fullname
        }

        # Same as above, create proccess/working directory/arguments/runas
        $psi = new-object System.Diagnostics.ProcessStartInfo $file
        $psi.Arguments = $arguments
        $psi.Verb = "runas"
}

# Start the process
[System.Diagnostics.Process]::Start($psi)


九、存檔並離開!

十、再次開啟 PowerShell 的 Profile 設定檔:

notepad.exe $PROFILE


十一、新增關聯指令:

New-Alias -Name sudo 'script:\sudo.ps1'

注意這裡的紅色字 sudo 可以改成任何你想要的字,只要不跟內建指令撞名即可!

十二、重啟 PowerShell,你可以使用:

sudo notepad C:\Windows\System32\drivers\etc\hosts



sudo vim $PROFILE

就會以系統管理員權限開啟,當然 Windows 的 UAC 會開啟並問你是或否,此時按「是」,
便會開啟具有系統管理員權限的視窗了!

Reference To: http://techha.us/2010/05/sudo-for-powershell/
                      http://www.ainotenshi.org/710/%E2%80%98sudo%E2%80%99-for-powershell-sorta

2011年9月6日 星期二

Visual Studio 2010 授權修改


參見以下步驟:
32位的系統中,修改以下登錄表鍵值
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\Registration\UserName
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\
RegisteredOrganization
64位系統,修改以下登錄表鍵值
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\
VisualStudio\10.0\Registration\UserName
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\
Windows NT\CurrentVersion\RegisteredOrganization
改到此步,在 Visual Studio 的關於窗口中,授權給的信息已經更改,但是 Splash Screen的畫面還是沒有改,還需接下來操作
執行 devenv.exe /setup

2011年8月24日 星期三

Installing PostgreSQL 9.0 on Ubuntu (11.04) using PPA


The version of default PostgreSQL in the latest Ubuntu (11.04) is still 8.4.8.
So I decided to install 9.0 version when I found there is a PPA (Personal Package Archives) for it. (I have no previous version of PostgreSQL in this Ubuntu PC.)

1. Resources.
PostgreSQL PPA: https://launchpad.net/~pitti/+archive/postgresql

2. Add PPA repository to my Ubuntu.

$ sudo add-apt-repository ppa:pitti/postgresql


3. Install PostgreSQL 9.0

$ sudo apt-get update
$ sudo apt-get install postgresql


4. Check the installation [updated 2011-07-24]

$ locate postgresql # check the locations of postgresql files
...
/etc/init.d/postgresql # server daemon
/etc/logrotate.d/postgresql-common
/etc/postgresql/9.0
/etc/postgresql/9.0/main # directory for config files
/etc/postgresql/9.0/main/environment
/etc/postgresql/9.0/main/pg_ctl.conf
/etc/postgresql/9.0/main/pg_hba.conf
/etc/postgresql/9.0/main/pg_ident.conf
/etc/postgresql/9.0/main/postgresql.conf
/etc/postgresql/9.0/main/start.conf
...
/usr/lib/postgresql # server apps
/usr/lib/postgresql/9.0
/usr/lib/postgresql/9.0/bin
/usr/lib/postgresql/9.0/lib
...
/var/lib/postgresql # home directory for root user postgres
/var/lib/postgresql/9.0
/var/lib/postgresql/9.0/main # I will create error log directory (pg_log) here
/var/lib/update-rc.d/postgresql
/var/log/postgresql
/var/log/postgresql/postgresql-9.0-main.log
/var/log/postgresql/postgresql-9.0-main.log.1
...

$ psql -V # check psql version
psql (PostgreSQL) 9.0.4

$ finger postgres # check if user postgres is created
Login: postgres Name: PostgreSQL administrator
Directory: /var/lib/postgresql Shell: /bin/bash
Never logged in.
No mail.
No Plan.

$ su postgres # switch user to postgres
$ psql # launch psql as postgres and check the server version
psql (9.0.4)

postgres=# select version();
-----------------------------------------------------------------------------------------------------
PostgreSQL 9.0.4 on i686-pc-linux-gnu, compiled by GCC gcc-4.5.real (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2, 32-bit


5. Setup Root User 'posrgres'
The installer has created a unix user postgres without a password. So first I give a (unix) password to this special user. The user postgress is a root user (database administrator) of PostgreSQL Server but without a (PostgreSQL) password. So I give it one here as well.

$ sudo passwd postgres # give the postgres user a (unix) password
$ su postgres # switch to the user postgres
$ psql # launch psql to give postgres PostgreSQL passord
postgres=# alter user postgres with password 'secret'; # new password for postgres
ALTER ROLE
postgres=# \q # quit psql
$ exit # exit from user 'postgres'
exit


6.Configure PostgreSQL Server
I want to make some changes to server config.

Make backup copies of config files.

$ su postgres # switch to the user postgres
$ cd /etc/postgresql/9.0/main
$ ls -la
...
-rw-r----- 1 postgres postgres 4108 2011-07-02 19:54 pg_hba.conf
-rw-r--r-- 1 postgres postgres 18064 2011-07-02 19:54 postgresql.conf
...

postgres@ubuntu-pc:/etc/postgresql/9.0/main$ cp pg_hba.conf pg_hba.conf.bak.original
postgres@ubuntu-pc:/etc/postgresql/9.0/main$ cp postgresql.conf postgresql.conf.bak.original

postgres@ubuntu-pc:/etc/postgresql/9.0/main$ ls -la
...
-rw-r----- 1 postgres postgres 4108 2011-07-02 19:54 pg_hba.conf
-r-r----- 1 postgres postgres 4108 2011-07-03 18:33 pg_hba.conf.bak.original
-rw-r--r-- 1 postgres postgres 18064 2011-07-02 19:54 postgresql.conf
-rw-r--r-- 1 postgres postgres 18064 2011-07-03 18:33 postgresql.conf.bak.original
...


Make changes to pg_hba.config (authetification methods).
host all all 127.0.0.1/32 trust # md5 -> trust

Make changes to postgresql.conf for error log.

#------------------------------------------------------------------------------
# ERROR REPORTING AND LOGGING
#------------------------------------------------------------------------------
log_destination = 'stderr' # 2011.07.04 - enabled
logging_collector = on # 2011.07.04 - enabled and turned on
log_directory = 'pg_log' # 2011.07.04 - enabled. I will create this folder (see below).
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # 2011.07.04 - enabled
log_truncate_on_rotation = off # 2011.07.04 - enabled and keep it off
log_rotation_age = 1d # 2011.07.04 - enabled
log_rotation_size = 10MB # 2011.07.04 - enabled


Create a log directory as specified in the config above.[updated on 2011-07-24]

$ su postgres # switch to postgres user
$ cd ~/9.0/main/ # /var/postgresql/9.0/main
$ mkdir pg_log # create a new log directory as specified in the config file above
$ ls -F # confirm the new directory 'pg_log'
PG_VERSION pg_log/ ...
$ exit


7. Restart the server [new]
I have to restart the server to use new configurations.

$ sudo /etc/init.d/postgresql restart
* Restarting PostgreSQL 9.0 database server
$ sudo /etc/init.d/postgresql status
Running clusters: 9.0/main


8. Check the new log. [new]
Now I should have a new log generated.

$ sudo ls /var/lib/postgresql/9.0/main/pg_log
postgresql-2011-07-23_135126.log


9. Finally Install pgAdmin III (GUI tool for PostgreSQL) [new]
Since the same PPA repository (ppa:pitti/postgresql) also contains the latest pgAdmin III, I can install it with a simple apt-get command.

$ sudo apt-get install pgadmin3 # install the latest pgAdminIII
$ pgadmin3 # launch it


It is version 1.12.2.


Reference To:http://socrateos.blogspot.com/2011/07/installing-postgresql-90-on-ubuntu-1104.html

Install GUI in Ubuntu Server

If you are a new user and not familiar with command prompt you can install GUI for your ubuntu LAMP server using the 2 options

1) Install desktop Environment
2) Install Webmin

1) Install desktop Environment
First you nee to make sure you have enabled Universe and multiverse repositories in /etc/apt/sources.list file once you have enable you need to use the following command to install GUI
sudo apt-get update
sudo apt-get install ubuntu-desktop
The above command will install GNOME desktop
If you wan to install a graphical desktop manager without some of the desktop addons like Evolution and OpenOffice, but continue to use the server flavor kernel use the following command
sudo aptitude install --without-recommends ubuntu-desktop
If you want to install light weight desktop install xfce using the following command
sudo apt-get install xubuntu-desktop
If you want to install KDE desktop use the following command
sudo apt-get install kubuntu-desktop
2) Install Webmin in Ubuntu
Webmin is a web-based interface for system administration for Unix. Using any modern web browser, you can setup user accounts, Apache, DNS, file sharing and much more. Webmin removes the need to manually edit Unix configuration files like /etc/passwd, and lets you manage a system from the console or remotely.Currently There is no Webmin package in the Ubuntu repositories.This tutorial will explain how to Install Webmin in Ubuntu Jaunty
You can install webmin for your server web interface to configure apache2,mysql,FTp servers and many more.Now we will see how to install webmin in Ubuntu 9.04
Preparing your system
First you need to install the following packages
sudo aptitude install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl libmd5-perl
Now download the latest webmin using the following command or from here
wget http://prdownloads.sourceforge.net/webadmin/webmin_1.470_all.deb
Now we have webmin_1.470_all.deb package install this package using the following command
sudo dpkg -i webmin_1.470_all.deb
This will complete the installation.
Using the Webmin APT repository
If you like to install and update Webmin via APT, edit the /etc/apt/sources.list file on your system
sudo vi /etc/apt/sources.list
add the line
deb http://download.webmin.com/download/repository sarge contrib
Save and exit the file
You should also fetch and install my GPG key with which the repository is signed, with the commands : cd /root
wget http://www.webmin.com/jcameron-key.asc
sudo apt-key add jcameron-key.asc
You will now be able to install with the commands
sudo apt-get update
sudo apt-get install webmin
All dependencies should be resolved automatically.
Ubuntu in particular don’t allow logins by the root user by default. However, the user created at system installation time can use sudo to switch to root. Webmin will allow any user who has this sudo capability to login with full root privileges.
Now you need to open your web browser and enter the following
https://your-server-ip:10000/
Now you should see similar to the following Screen
After login if you want to configure Apache,Mysql server you need to click on Servers on your lefthand side you should many servers are ready to configure
This is very Easy to configure most of the servers and Enjoy your new Ubuntu Jaunty LAMP Server.
Reference To:http://www.ubuntugeek.com/install-gui-in-ubuntu-server.html

設定 Npgsql .Net Data Provider


Npgsql Design time support preview available for download!


UPDATE2: For some reason, Blogger lost the original post. I had to republish it.


UPDATE: Jerónimo told me that you must use the Npgsql version which is inside the zip file in order to make it work.

After so much time (more than I wanted it to take) Npgsql finally has a initial design time support for Visual Studio!

This work was done by Jerónimo Milea. Jerónimo let me know he was working on DDEX support on this thread after I said I was working on DDEX support for Npgsql.

He sent me his working copy and I started to play with it. Note that as a preview version many things may not work ok and we wanted you to provide us feedback so we can fix any bugs.

You can download the project file from our downloads page.

Design time support is provided as a zip file containing support code as well as a copy of Npgsql project file. So, everything you need to start working with design time support is already packaged for you.

When you unzip the file, you will have three folders and a project file. Open up this project file in Visual Studio 2010.

There are three projects. The Npgsql.Provider project is there for historical reasons, Jerónimo told me. We will clean it up in another release. The main project is the Npgsql.Provider2. Set it up as your startup project. Right Click -> Set up as Startup Project.



After that, tell Visual Studio to build all projects. After everything is compiled ok, there are still some other steps to be done:


  1. Install Npgsql.dll and Mono.Security.dll to GAC. 
  2. Add Npgsql as a provider factory in machine.config

Install Npgsql.dll and Mono.Security.dll to GAC
    
    Go to the Npgsql2\bin\debug4\ folder and add Npgsql.dll and Mono.Security.dll to GAC:
    
    gacutil -i Npgsql.dll
    gacutil -i Mono.Security.dll
  


    Note that you will need to start a Visual Studio Command Prompt so command line tools are available to you. This shortcut is inside Visual Studio 2010 programs folder in the Visual Studio Tools subfolder.

Add Npgsql as a provider factory in machine.config

    In the machine.config file, located at C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config you have to add following line: 



<add name="Npgsql Data Provider" invariant="Npgsql" support="FF" description=".Net Framework Data Provider for Postgresql Server" type="Npgsql.NpgsqlFactory, Npgsql, Version=2.0.11.91, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" />

    This line goes inside the DbProviderFactories section.


Playing with Design Time support project


    After config Npgsql in gac and machine.config, it's time to run the project.

    As this project will work inside VS.Net, you will need to debug VS.Net itself in order to have the project running inside it. In order to do that, you have to specify VS.net as the debug target. To do that, open Npgsql.Designer2 project properties and in the Debug tab, check the value of "Start external program" edit text. It is set to the path of devenv.exe. Note that it is the path of (x86) Program Files folder. This is ok if you are using a 64-bits windows installation. If you are using a 32-bits install (as I do), you just have to remove the (x86) from the path and you are set.



    After setting everything up, you can hit F5 to start the project ( you specified Npgsql.Designer2 as your startup project, right?). A new VS.Net will show up and your first VS.Net will be attached to it in debug mode. Now, comes a very important step you have to make: Inside Npgsql.Designer2 folder, there is a file called NpgsqlProvider.gen.reg. You have to merge this file to your registry every time you start VS.Net to debug the project. This is needed because VS.Net as it is started by the project, has a command line option which makes it use an alternate registry tree which is cleaned up every time this VS.net is started. This reg file has the settings to register Npgsql.Designer inside VS.Net.
Reference To: http://fxjr.blogspot.com/2011/05/npgsql-design-time-support-preview.html

2011年8月23日 星期二

PostgreSQL 初始後建立 User

登入
su – postgres

切換至 template1
psql template1

建立USER
create user 帳號 with password '密碼' createdb createuser;

如此就已新增一個USER並擁有新增DB及USER的權限...

如需修改USER密碼的話:
alter user 使用者 with password '密碼';



phpPgAdmin 預設是不允許 postgres Login ...
所以最好先 create 一個 user 再 Login,方式請參考以上

如想要允許使用 postgres Login,務必先修改 postgres 的密碼 ( postgres 密碼不得為空 )

再修改
vi phpPgAdmin/conf/config.inc.php

Find...
$conf['extra_login_security'] = true;

Edit...
$conf['extra_login_security'] = false;

如此便可用 postgres Login !!!



如需匯入資料請用下列指令

登入
su – postgres

如無DB,請先新增DB以便匯入
createdb SOMENEWDB

匯入格式
psql -h {connected-server} -U {Username} -W -e {DB_Name} < {DB_dump_file}

EX:
psql –U admin –e SOMENEWDB <>

請先將 xxx.sql 複製到 PostgreSQL 所在目錄下 (/usr/local/pgsql),以便快速讀取
輸入以上指令後,便可將資料匯入指定的DB中...




如欲使用 pgAdmin III 工具連線,請修改

/usr/local/pgsql/postgresql.conf

將 tcpip_socket=false 設成 true

2011年8月22日 星期一

模擬 TOP 在 Windows 的 Powershell

Unix-like 系列大家耳熟能詳的 TOP command,
到了 Windows Powershell 存在嗎?

當然是不存在,不然幹嘛模擬XD
跟馬蓋先一樣,就 Powershell 現有的相關指令:Get-Process,來作延伸。

Get-Process,顧名思義,就是要 Get 目前的 Processes,
為了滿足從 Unix-like 過來的捧油們,也可以打 ps 來呼叫之!

直接來一下模擬 TOP Command:







while (1) { ps | sort -desc cpu | select -first 30; sleep -seconds 2; cls }


首先,while 就不用提了,就是迴圈,
然後裡頭呼叫了 ps 再透過 sort 指令依照 CPU 用量排序,所以這邊除了 CPU,也可以任君修改成需要的排序;再來透過 select 指令挑選頭 30 個 Processes,好比 Unix-like 的 head 用法;而後就是 sleep 指令,讓其 2 秒更新一次,最後再把螢幕清掉。

收工