top
logo


Категория - FAQ/Общие вопросы
Building A registration System with Email verification in PHP PDF Печать E-mail
04.04.13 13:25
Post image for Building A registration System with Email verification in PHP

Building A registration System with Email verification in PHP

by Hyder on April 1, 2010

in PHP

  • 360

Have you ever registered on a website and you were required to activate your newly created account via a confirmation link sent to the email address you supplied while registering? This Email verification “Mechanism” is very common nowadays especially in forums, popular websites such as ebay, paypal, Facebook etc .Verifying Email Address helps to reduce spam and also to make sure that the email supplied belongs to that member.

What are we going to build ?

We are going to build a small system in which a user can register a new account. After registration, a confirmation link will be emailed to the email supplied in the registration form. The user will have to log in his email Account and click the activation link. After that, He or she or she  will be able to login into the system. Before Going into the code, here is some screenshot of how it is going to work.

After Successful registration, an Activation will be emailed to the user in order to verify that the email address supplied  is really his.

On Clicking the Activation link , A message will be displayed whether Account has been Activated successfully or not.

The user may now login .

If Login is successful,  He or she will be redirected to page.php, which could be called the “member Area”

Step 1: Database Connection File



This file contains the Database Connection Information.  It Also contains the Sender’s email address,website url and the smtp server address. Please change these settings accordingly. IF you are going to host this
script on  a server at  hostgator , namecheap , godaddy etc , there’s a great chance you would not need the “SMTP” part .Simply Remove this line of code.

01 <?php
02
03 /*Define constant to connect to database */
04 DEFINE('DATABASE_USER', 'root');
05 DEFINE('DATABASE_PASSWORD', '');
06 DEFINE('DATABASE_HOST', 'localhost');
07 DEFINE('DATABASE_NAME', 'forum');
08 /*Default time zone ,to be able to send mail */
09 date_default_timezone_set('UTC');
10
11 /*You might not need this */
12 ini_set('SMTP', "mail.myt.mu");
13 // Overide The Default Php.ini settings for sending mail
14
15 //This is the address that will appear coming from ( Sender )
16 define('EMAIL', ' Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. ');
17
18 /*Define the root url where the script will be found such as
20 DEFINE('WEBSITE_URL', 'http://localhost');
21
22 // Make the connection:
23 $dbc = @mysqli_connect(DATABASE_HOST, DATABASE_USER, DATABASE_PASSWORD,
24 DATABASE_NAME);
25
26 if (!$dbc) {
27 trigger_error('Could not connect to MySQL: ' . mysqli_connect_error());
28 }
29
30 ?>

Database Structure

01 --
02 -- Table structure for table `members`
03 --
04
05 CREATE TABLE IF NOT EXISTS `members` (
06 `Memberid` int(10) NOT NULL AUTO_INCREMENT,
07 `Username` varchar(20) NOT NULL,
08 `Email` varchar(20) NOT NULL,
09 `Password` varchar(10) NOT NULL,
10 `Activation` varchar(40) DEFAULT NULL,
11 PRIMARY KEY (`Memberid`)
12 ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=22 ;

Step 2 : Registration Page

The CSS Part has been omitted here . You can read a detailed description of how this form has been built using pure css .

01 <form action="index.php" method="post" class="registration_form">
02 <fieldset>
03 <legend>Registration Form </legend>
04
05 <p>Create A new Account <span style="background:#EAEAEA none repeat scroll 0 0;line-height:1;margin-left:210px;;padding:5px 7px;">
06 Already a member? <a href="login.php">Log in</a></span> </p>
07
08 <div class="elements">
09 <label for="name">Name :</label>
10 <input type="text" id="name" name="name" size="25" />
11 </div>
12 <div class="elements">
13 <label for="e-mail">E-mail :</label>
14 <input type="text" id="e-mail" name="e-mail" size="25" />
15 </div>
16 <div class="elements">
17 <label for="Password">Password:</label>
18 <input type="password" id="Password" name="Password" size="25" />
19 </div>
20 <div class="submit">
21 <input type="hidden" name="formsubmitted" value="TRUE" />
22 <input type="submit" value="Register" />
23 </div>
24 </fieldset>
25 </form>

Code to Handle the Registration Form Submission :

Basic Form Validation Rules :

  • Make sure no field is empty .
  • Validate Email Address Format .

If  Form Validation is successfull a unique activation code is created using the php built in function MD5 () .For each new account , a unique activation key is sent along the email address of the member.The md5 key is then added to the database field “Activation” .

The Activation Link is in this format  :

http://website.com/activate.php?email= Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. &key=c47662ba2504508bcdd5cb75106110a6

01 include ('database_connection.php');
02 if (isset($_POST['formsubmitted'])) {
03 $error = array(); //Declare An Array to store any error message
04 if (empty($_POST['name'])) { //if no name has been supplied
05 $error[] = 'Please Enter a name '; //add to array "error"
06 } else {
07 $name = $_POST['name']; //else assign it a variable
08 }
09
10 if (empty($_POST['e-mail'])) {
11 $error[] = 'Please Enter your Email ';
12 } else {
13
14 if (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/",
15 $_POST['e-mail'])) {
16 //regular expression for email validation
17 $Email = $_POST['e-mail'];
18 } else {
19 $error[] = 'Your EMail Address is invalid  ';
20 }
21
22 }
23
24 if (empty($_POST['Password'])) {
25 $error[] = 'Please Enter Your Password ';
26 } else {
27 $Password = $_POST['Password'];
28 }
29
30 if (empty($error)) //send to Database if there's no error '
31
32 { // If everything's OK...
33
34 // Make sure the email address is available:
35 $query_verify_email = "SELECT * FROM members  WHERE Email ='$Email'";
36 $result_verify_email = mysqli_query($dbc, $query_verify_email);
37 if (!$result_verify_email) { //if the Query Failed ,similar to if($result_verify_email==false)
38 echo ' Database Error Occured ';
39 }
40
41 if (mysqli_num_rows($result_verify_email) == 0) { // IF no previous user is using this email .
42
43 // Create a unique  activation code:
44 $activation = md5(uniqid(rand(), true));
45
46 $query_insert_user =
47 "INSERT INTO `members` ( `Username`, `Email`, `Password`, `Activation`) VALUES ( '$name', '$Email', '$Password', '$activation')";
48
49 $result_insert_user = mysqli_query($dbc, $query_insert_user);
50 if (!$result_insert_user) {
51 echo 'Query Failed ';
52 }
53
54 if (mysqli_affected_rows($dbc) == 1) { //If the Insert Query was successfull.
55
56 // Send the email:
57 $message = " To activate your account, please click on this link:\n\n";
58 $message .= WEBSITE_URL . '/activate.php?email=' . urlencode($Email) . "&key=$activation";
59 mail($Email, 'Registration Confirmation', $message, 'From:'.EMAIL);
60
61 // Flush the buffered output.
62
63 // Finish the page:
64 echo '<div class="success">Thank you for
65 registering! A confirmation email
66 has been sent to ' . $Email .
67 ' Please click on the Activation Link to Activate your account </div>';
68
69 } else { // If it did not run OK.
70 echo '<div class="errormsgbox">You could not be registered due to a system
71 error. We apologize for any
72 inconvenience.</div>';
73 }
74
75 } else { // The email address is not available.
76 echo '<div class="errormsgbox" >That email
77 address has already been registered.
78 </div>';
79 }
80
81 } else { //If the "error" array contains error msg , display them
82
83 echo '<div> <ol>';
84 foreach ($error as $key => $values) {
85
86 echo '  <li>' . $values . '</li>';
87
88 }
89 echo '</ol></div>';
90
91 }
92
93 mysqli_close($dbc); //Close the DB Connection
94
95 } // End of the main Submit conditional.

Step 4 : Activation Page

This Page contains code that will activate  the new member’s account. This will verify the Activation key in the Activation url against the key in the Database,  if there is a match, the Database field “Activation” is set to NULL. .A Message informing the user that his or her account has been created successfully.

01 include ('database_connection.php');
02 if (isset($_GET['email']) && preg_match('/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/',
03 $_GET['email'])) {
04 $email = $_GET['email'];
05 }
06 if (isset($_GET['key']) && (strlen($_GET['key']) == 32))
07 //The Activation key will always be 32 since it is MD5 Hash
08 {
09 $key = $_GET['key'];
10 }
11
12 if (isset($email) && isset($key)) {
13
14 // Update the database to set the "activation" field to null
15
16 $query_activate_account = "UPDATE members SET Activation=NULL WHERE(Email ='$email' AND Activation='$key')LIMIT 1";
17 $result_activate_account = mysqli_query($dbc, $query_activate_account);
18
19 // Print a customized message:
20 if (mysqli_affected_rows($dbc) == 1) //if update query was successfull
21 {
22 echo '<div>Your account is now active. You may now <a href="/login.php">Log in</a></div>';
23
24 } else {
25 echo '<div>Oops !Your account could not be activated. Please recheck the link or contact the system administrator.</div>';
26
27 }
28
29 mysqli_close($dbc);
30
31 } else {
32 echo '<div>Error Occured .</div>';
33 }

Step 4 :Login Page

The Code below handle the Login form.  If there is a match record in the database, a session is created and the member is redirected to page.php .

01 <form action="login.php" method="post">
02 <fieldset>
03 <legend>Login Form  </legend>
04
05 <p>Enter Your username and Password Below  </p>
06
07 <div>
08 <label for="name">Email :</label>
09 <input type="text" id="e-mail" name="e-mail" size="25" />
10 </div>
11
12 <div>
13 <label for="Password">Password:</label>
14 <input type="password" id="Password" name="Password" size="25" />
15 </div>
16 <div>
17 <input type="hidden" name="formsubmitted" value="TRUE" />
18 <input type="submit" value="Login" />
19 </div>
20 </fieldset>
21 </form>

PHP Code to Handle the Login Form Submission

The code below contains basic validation as follows :

  • Check if both field is empty.
  • Check if email is in correct format using regular expression.
01 include ('database_connection.php');
02 if (isset($_POST['formsubmitted'])) {
03 // Initialize a session:
04 session_start();
05 $error = array();//this aaray will store all error messages
06
07 if (empty($_POST['e-mail'])) {//if the email supplied is empty
08 $error[] = 'You forgot to enter  your Email ';
09 } else {
10
11 if (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_POST['e-mail'])) {
12 $Email = $_POST['e-mail'];
13 } else {
14 $error[] = 'Your EMail Address is invalid  ';
15 }
16 }
17
18 if (empty($_POST['Password'])) {
19 $error[] = 'Please Enter Your Password ';
20 } else {
21 $Password = $_POST['Password'];
22 }
23
24 if (empty($error))//if the array is empty , it means no error found
25 {
26 $query_check_credentials = "SELECT * FROM members WHERE (Email='$Email' AND password='$Password') AND Activation IS NULL";
27 $result_check_credentials = mysqli_query($dbc, $query_check_credentials);
28 if(!$result_check_credentials){//If the QUery Failed
29 echo 'Query Failed ';
30 }
31
32 if (@mysqli_num_rows($result_check_credentials) == 1)//if Query is successfull
33 { // A match was made.
34
35 $_SESSION = mysqli_fetch_array($result_check_credentials, MYSQLI_ASSOC);
36
37 //Assign the result of this query to SESSION Global Variable
38
39 header("Location: page.php");
40
41 }else
42 { $msg_error= 'Either Your Account is inactive or Email address /Password is Incorrect';
43 }
44 } else {
45 echo '<div> <ol>';
46 foreach ($error as $key => $values) {
47 echo '    <li>'.$values.'</li>';
48 }
49 echo '</ol></div>';
50 }
51 if(isset($msg_error)){
52 echo '<div>'.$msg_error.' </div>';
53 }
54 /// var_dump($error);
55 mysqli_close($dbc);
56 } // End of the main Submit conditional.

Step 5 : Member Section Page

After Login successfully ,The new member will be redirected to page.php .

1 ob_start();
2 session_start();
3 if(!isset($_SESSION['Username'])){
4 header("Location: login.php");
5 }
6
7 ?>
8 <div class="success">Welcome , $_SESSION['Username']</div>

You can download the complete source code below . Please make the appropriate changes in the database_connection.php file .

 

http://youhack.me/2010/04/01/building-a-registration-system-with-email-verification-in-php/

 
Защищаем сеть от WIFIKILL PDF Печать E-mail
21.01.13 13:06

Защищаем сеть от WIFIKILL


Для защиты от WIFIKILL в публичных местах, достаточно организовать гостевую подсесть в которой кроме WIFI клиентов не будет ни одного компьютера подключенного по ethernet и wifi роутера с функцией  "AP isolation".

AP Isolation – создание виртуального сегмента LAN для беспроводной сети.

Альтернативная прошивка DD-WRT позволяет без проблем сделать это.

 

Advanced Wireless Settings -> AP Isolation

 

Легкой настройки!

ссылка на материал: http://www.thin.kiev.ua/categoryblog/760-protect-your-network-from-wifikill.html

{jcomments on}

Последнее обновление 21.01.13 13:24
 
ESXi - сохранение и восстановление конфигурации PDF Печать E-mail
18.01.13 18:36

ESXi - сохранение и восстановление конфигурации


Иногда надо просто полностью сохранить конфигурацию хоста. Пришлось и мне этим заняться, ибо приехали флэшки на замену в бездисковые ESXi. Заниматься переконфигурированием хостов совсем не хотелось. Использован пакет VMware RCLI.

Бэкап:

C:\Program Files\VMware\VMware VI Remote CLI\bin>vicfg-cfgbackup.pl --server esxN.domain.com --username root --password secretpass -s r:\esxN.cfg
Saving firmware configuration to r:\esxN.cfg...

После этого делаем для хоста disconnect в vCenter

Восстановление:

C:\Program Files\VMware\VMware VI Remote CLI\bin>vicfg-cfgbackup.pl --server esxN.domain.com --username root --password secretpass -l r:\esxN.cfg
The restore operation will reboot the host.
Type 'yes' to continue:
yes
Uploading config bundle to configBundle.tgz ...
Performing restore ...

После того как хост перезагрузится, выполняем connect в vCenter

Перед восстановлением необходимо сконфигурировать Management Network по вполне очевидным причинам. Для бэкапа и восстановления режим Lockdown должен быть отключен!

 

источник: http://blog.vadmin.ru/2009/03/esxi.html

ссылка на материал: http://www.thin.kiev.ua/categoryblog/759-esxi-config.html

{jcomments on}

Последнее обновление 18.01.13 18:39
 
Ставим Proxmox на программный RAID PDF Печать E-mail
18.01.13 18:05

Proxmox Виртуальная среда является простым в использовании Открытая платформа виртуализации источника для запуска виртуальных устройств и виртуальных машин. Proxmox официально не поддерживает программный RAID, но я нашел программное обеспечение рейда, чтобы быть очень стабильным, а в некоторых случаях повезло больше, чем с аппаратным RAID.
Я не даю никаких гарантий, что это будет работать для Вас!

Обзор
Первая установка Proxmox V2 обычным способом с CD скачать с Proxmox. Далее мы создаем массив RAID 1 на второй жесткий диск и перенести Proxmox установить его.
Затем мы корректируем настройки Grub так он будет загружаться с новой установки.

Кредиты
Эти следующие учебники, что я использовал:

специальные большое спасибо к Фалько из HowtoForge как много этого материала использованы повторно его, как. http://www.howtoforge.com/linux_lvm

Установка Proxmox
установки Proxmox из последних загруженных CD с Proxmox http://www.proxmox.com/downloads/proxmox-ve/17-iso-images
Если вы хотите ext4 тип тип установки этого в приглашении загрузчика:
linux ext4
Инструкция по установке здесь: http://pve.proxmox.com/wiki/Quick_installation
следующем входе с SSH и выполните команду:

apt-get update

apt-get upgrade

Установка Raid
Примечание:Это руководство предполагает, что Proxmox установлен /dev/sda и запасной диск /dev/sdb. Используйте следующую команду для просмотра текущей разделов:

fdisk -l

Вывод должен выглядеть следующим образом:

root@proxmox:/# fdisk -l

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes

255 heads, 63 sectors/track, 121601 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x0009f7a7

Device Boot Start End Blocks Id System

/dev/sda1 * 1 66 523264 83 Linux

Partition 1 does not end on cylinder boundary.

/dev/sda2 66 121602 976237568 8e Linux LVM

Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes

255 heads, 63 sectors/track, 121601 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00078af8

Device Boot Start End Blocks Id System
Существует еще здесь, но мы только с первых двух дисков, на данный момент. Мы видим, что /dev/sda имеет Proxmox установки и /dev/sdb не имеет разделов.
Сначала установите программное обеспечение рейда ака mdraid:

apt-get install mdadm

В окне настроек выбрать пакет хорошо то все .
Далее мы начинаем модули ядра с Modprobe:

modprobe linear

modprobe raid0

modprobe raid1

modprobe raid5

modprobe raid6

modprobe raid10

Теперь запустите:

cat /proc/mdstat

Вывод должен выглядеть следующим образом:

root@proxmox:~# cat /proc/mdstat

Personalities : [linear] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]

unused devices:

root@proxmox:~#
Теперь нам нужно скопировать таблицу разделов ПДД в СКБ:

sfdisk -d /dev/sda | sfdisk --force /dev/sdb

Вывод должен быть:

root@proxmox:/# sfdisk -d /dev/sda | sfdisk --force /dev/sdb

Checking that no-one is using this disk right now ...

OK

Disk /dev/sdb: 121601 cylinders, 255 heads, 63 sectors/track

Old situation:

Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

Device Boot Start End #cyls #blocks Id System

/dev/sdb1 0 - 0 0 0 Empty

/dev/sdb2 0 - 0 0 0 Empty

/dev/sdb3 0 - 0 0 0 Empty

/dev/sdb4 0 - 0 0 0 Empty

New situation:

Units = sectors of 512 bytes, counting from 0

Device Boot Start End #sectors Id System

/dev/sdb1 * 2048 1048575 1046528 83 Linux

/dev/sdb2 1048576 1953523711 1952475136 8e Linux LVM

/dev/sdb3 0 - 0 0 Empty

/dev/sdb4 0 - 0 0 Empty

Warning: partition 1 does not end at a cylinder boundary

Successfully wrote the new partition table

Re-reading the partition table ...

If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)

to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1

(See fdisk(8).)

root@vmh:/# root@vmh:/# sfdisk -d /dev/sda | sfdisk --force /dev/sdb

-bash: root@vmh:/#: No such file or directory

Checking that no-one is using this disk right now ...

OK

Disk /dev/sdb: 121601 cylinders, 255 heads, 63 sectors/track

Old situation:

Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0


Device Boot Start End #cyls #blocks Id System

/dev/sdb1 * 0+ 65- 66- 523264 83 Linux

/dev/sdb2 65+ 121601- 121536- 976237568 8e Linux LVM

/dev/sdb3 0 - 0 0 0 Empty

/dev/sdb4 0 - 0 0 0 Empty

New situation:

No partitions found


sfdisk: no partition table present.
Теперь нам нужно изменить типы разделов в Linux RAID автоопределение:

fdisk /dev/sdb

root@proxmox:/# fdisk /dev/sdb


WARNING: DOS-compatible mode is deprecated. It's strongly recommended to

switch off the mode (command 'c') and change display units to

sectors (command 'u').


Command (m for help): t

Partition number (1-4): 1

Hex code (type L to list codes): fd

Changed system type of partition 1 to fd (Linux raid autodetect)


Command (m for help): t

Partition number (1-4): 2

Hex code (type L to list codes): fd

Changed system type of partition 2 to fd (Linux raid autodetect)


Command (m for help): p

Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes

255 heads, 63 sectors/track, 121601 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00078af8


Device Boot Start End Blocks Id System

/dev/sdb1 * 1 66 523264 fd Linux raid autodetect

Partition 1 does not end on cylinder boundary.

/dev/sdb2 66 121602 976237568 fd Linux raid autodetect


Command (m for help): w

The partition table has been altered!


Calling ioctl() to re-read partition table.

Syncing disks.

Как мы видим, мы имеем два Linux автоопределение рейд разделов /dev/sdb.
Чтобы убедиться, что нет никаких остатков предыдущих установок RAID на /dev/sdb, мы запустим следующую команду:

mdadm --zero-superblock /dev/sdb1

mdadm --zero-superblock /dev/sdb2
Если нет остатков от предыдущих установок RAID, каждая из этих команд выдаст ошибку вроде этого (что беспокоиться не о чем):
root@proxmox:~# mdadm --zero-superblock /dev/sdb1

mdadm: Unrecognised md component device - /dev/sdb1

root@server1:~#
В противном случае команды не появится вообще ничего.
Теперь нам нужно создать наш новый массив RAID:

mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1

mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb2
Это покажет (ответ да):
root@proxmox:/# mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1

mdadm: Note: this array has metadata at the start and

may not be suitable as a boot device. If you plan to

store '/boot' on this device please ensure that

your boot-loader understands md/v1.x metadata, or use

--metadata=0.90

Continue creating array? y

mdadm: Defaulting to version 1.2 metadata

mdadm: array /dev/md0 started.

root@proxmox:/#
команда

cat /proc/mdstat

root@proxmox:~# cat /proc/mdstat

Personalities : [linear] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]

md0 : active (auto-read-only) raid1 sdb1[1]

523252 blocks super 1.2 [2/1] [_U]


md1 : active (auto-read-only) raid1 sdb2[1]

976236408 blocks super 1.2 [2/1] [_U]


unused devices:

теперь должна показывать, что у вас есть два деградировавших массивов RAID ([_U] или [U_] означает, что массив деградировали в то время как [UU] означает, что массив в порядке).
Теперь мы должны настроить /etc/mdadm/mdadm.conf (который не содержит никакой информации о наших новых массивов RAID еще нет) в новой ситуации:

cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig

mdadm --examine --scan >> /etc/mdadm/mdadm.conf
Стандартный Proxmox установки использует /dev/sda1 для загрузочного раздела и использует LVM на /dev/sda2 для корневой, подкачки данных и разделов.
Если вы новичок в LVM разделы, я рекомендую вам проверить ссылку по кредитам в верхней части, как это.
Чтобы увидеть LVM разделы используйте команду:

lvscan

Это должно вывести:

root@proxmox:~# lvscan

ACTIVE '/dev/pve/swap' [15.00 GiB] inherit

ACTIVE '/dev/pve/root' [96.00 GiB] inherit

ACTIVE '/dev/pve/data' [804.02 GiB] inherit
Теперь мы создадим новую группу томов памед pve1 и соответствия логических томов для подкачки, корневые и данных.
Первый физического объема:

pvcreate /dev/md1

Это выводит
Writing physical volume data to disk "/dev/md1"

Physical volume "/dev/md1" successfully created

Эта команда:

pvscan

показывает наш новый физический объем:

PV /dev/sda2 VG pve lvm2 [931.01 GiB / 16.00 GiB free]

PV /dev/md1 lvm2 [931.01 GiB]

Total: 2 [1.82 TiB] / in use: 1 [931.01 GiB] / in no VG: 1 [931.01 GiB]

  • Tweet
  • Теперь давайте создадим группу томов pve1 и добавить к нему /dev/md1:

    vgcreate pve1 /dev/md1

    Это должно показать успех:
    Volume group "pve1" successfully created
    Теперь нам нужно создать наш логических томов. Я буду использовать те же самые размеры и имена томов из lvscan команды выше.

    lvcreate --name swap --size 15G pve1

    lvcreate --name root --size 96G pve1

    lvcreate --name data --size 804G pve1
    Если бы это было успешно, то команда:

    lvscan

    возвращается:

    root@proxmox:~# lvscan

    ACTIVE '/dev/pve/swap' [15.00 GiB] inherit

    ACTIVE '/dev/pve/root' [96.00 GiB] inherit

    ACTIVE '/dev/pve/data' [804.02 GiB] inherit

    ACTIVE '/dev/pve1/swap' [15.00 GiB] inherit

    ACTIVE '/dev/pve1/root' [96.00 GiB] inherit

    ACTIVE '/dev/pve1/data' [804.00 GiB] inherit
    Как вы можете видеть теперь у нас есть два набора тех же логических томов. Один на /dev/sda2 и один /dev/md1.
    Теперь нам нужно создать файловые системы:

    mkfs.ext4 /dev/md0

    mkswap /dev/pve1/swap -f

    mkfs.ext4 /dev/pve1/root

    mkfs.ext4 /dev/pve1/data
    Если бы это было успешно, то это время для копирования файлов в новый массив RAID.
    Сначала установите новые разделы:

    mkdir /mnt/boot

    mkdir /mnt/root

    mkdir /mnt/data

    mount /dev/md0 /mnt/boot

    mount /dev/pve1/root /mnt/root

    mount /dev/pve1/data /mnt/data

    Настройка системы для использования RAID 1
    Теперь мы должны изменить /etc/fstab:

    vi /etc/fstab
    Следует читать:
    #
    /dev/pve1/root / ext4 errors=remount-ro 0 1
    /dev/pve1/data /var/lib/vz ext4 defaults 0 1
    /dev/md0 /boot ext4 defaults 0 1
    /dev/pve1/swap none swap sw 0 0
    proc /proc proc defaults 0 0
    Обратите внимание, что все экземпляры пве заменяются pve1 и /dev/md0 устанавливается на /boot.
    Теперь до GRUB2 загрузчика. Создайте файл /etc/grub.d/09_swraid1_setup следующим образом:

    cp /etc/grub.d/40_custom /etc/grub.d/09_swraid1_setup

    vi /etc/grub.d/09_swraid1_setup
    #!/bin/sh
    exec tail -n +3 $0
    # This file provides an easy way to add custom menu entries. Simply type the
    # menu entries you want to add after this comment. Be careful not to change
    # the 'exec tail' line above.
    menuentry 'Proxmox, with RAID1' --class proxmox --class gnu-linux --class gnu --class os {
    insmod raid
    insmod mdraid
    insmod part_msdos
    insmod ext2
    set root='(md/0)'
    echo 'Loading Proxmox with RAID ...'
    linux /vmlinuz-2.6.32-11-pve root=/dev/mapper/pve1-root ro quiet
    echo 'Loading initial ramdisk ...'
    initrd /initrd.img-2.6.32-11-pve
    }

    Убедитесь, что вы используете правильную версию ядра в menuentry строфа (в linux и initrd линии). Вы можете найти его командой:

    uname -r

    или взглянуть на текущую строфы menuentry в ### BEGIN /etc/grub.d/10_linux ### раздел /boot/grub/grub.cfg. Также убедитесь, что вы используете root=/dev/mapper/pve1-root в linux линии.
    важную роль в нашей новой menuentry строфа является линия set root='(md/0)' - это гарантирует, что мы загружаем наших массив RAID1 /dev/md0 (который проведет /boot раздел), а /dev/sda или /dev/sdb что очень важно, если один из наших жестких дисках не удается - Система по-прежнему смогут загрузить.
    Поскольку мы не используем UUID, больше для наших блочных устройств, откройте /etc/default/grub ...

    vi /etc/default/grub

    ... и раскомментируйте строку GRUB_DISABLE_LINUX_UUID=true:
    # If you change this file, run 'update-grub' afterwards to update
    # /boot/grub/grub.cfg.

    GRUB_DEFAULT=0
    GRUB_TIMEOUT=5
    GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
    GRUB_CMDLINE_LINUX_DEFAULT="quiet"
    GRUB_CMDLINE_LINUX=""

    # Uncomment to enable BadRAM filtering, modify to suit your needs
    # This works with Linux (no patch required) and with any kernel that obtains
    # the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
    #GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

    # Uncomment to disable graphical terminal (grub-pc only)
    #GRUB_TERMINAL=console

    # The resolution used on graphical terminal
    # note that you can use only modes which your graphic card supports via VBE
    # you can see them in real GRUB with the command `vbeinfo'
    #GRUB_GFXMODE=640x480

    # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
    GRUB_DISABLE_LINUX_UUID=true

    # Uncomment to disable generation of recovery mode menu entries
    #GRUB_DISABLE_LINUX_RECOVERY="true"

    # Uncomment to get a beep at grub start
    #GRUB_INIT_TUNE="480 440 1"

    Run

    update-grub

    писать нашего нового ядра строфа из /etc/grub.d/09_swraid1_setup к/boot/grub/grub.cfg.
    Далее настроить наш виртуальный диск к новой ситуации:

    update-initramfs -u

    Теперь скопируйте файлы:

    cp -dpRx / /mnt/root

    cp -dpRx /boot/* /mnt/boot

    cp -dbRx /var/lib/vz/* /mnt/data
    Теперь перезагрузите систему и надеемся, что она загружается нормально с нашей массивы RAID:

    reboot

    Если все пойдет хорошо, вы сможете увидеть наши новые логические тома root и data и /dev/md0 установлены:

    mount

    root@proxmox:~# mount

    /dev/mapper/pve1-root on / type ext4 (rw,errors=remount-ro)

    tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)

    proc on /proc type proc (rw,noexec,nosuid,nodev)

    sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)

    udev on /dev type tmpfs (rw,mode=0755)

    tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)

    devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)

    /dev/mapper/pve1-data on /var/lib/vz type ext4 (rw)

    /dev/md0 on /boot type ext4 (rw)

    fusectl on /sys/fs/fuse/connections type fusectl (rw)

    beancounter on /proc/vz/beancounter type cgroup (rw,name=beancounter)

    container on /proc/vz/container type cgroup (rw,name=container)

    fairsched on /proc/vz/fairsched type cgroup (rw,name=fairsched)
    Теперь нам нужно удалить группу томов pve:

    lvremove /dev/pve/root

    lvremove /dev/pve/swap

    lvremove /dev/pve/data

    vgremove /dev/pve

    pvremove /dev/sda2
    root@proxmox:~# lvremove /dev/pve/root

    Do you really want to remove active logical volume root? [y/n]: y

    Logical volume "root" successfully removed

    root@proxmox:~# lvremove /dev/pve/swap

    Do you really want to remove active logical volume swap? [y/n]: y

    Logical volume "swap" successfully removed

    root@proxmox:~# lvremove /dev/pve/data

    Do you really want to remove active logical volume data? [y/n]: y

    Logical volume "data" successfully removed

    root@proxmox:~# vgremove /dev/pve

    Volume group "pve" successfully removed

    root@proxmox:~# pvremove /dev/sda2

    Labels on physical volume "/dev/sda2" successfully wiped
    Теперь мы должны изменить типы разделов из наших трех разделов для Linux /dev/sda рейд автоопределение, а также:

    fdisk /dev/sda

    root@proxmox:~# fdisk /dev/sda


    WARNING: DOS-compatible mode is deprecated. It's strongly recommended to

    switch off the mode (command 'c') and change display units to

    sectors (command 'u').


    Command (m for help): t

    Partition number (1-4): 1

    Hex code (type L to list codes): fd

    Changed system type of partition 1 to fd (Linux raid autodetect)


    Command (m for help): t

    Partition number (1-4): 2

    Hex code (type L to list codes): fd

    Changed system type of partition 2 to fd (Linux raid autodetect)


    Command (m for help): p


    Disk /dev/sda: 1000.2 GB, 1000204886016 bytes

    255 heads, 63 sectors/track, 121601 cylinders

    Units = cylinders of 16065 * 512 = 8225280 bytes

    Sector size (logical/physical): 512 bytes / 512 bytes

    I/O size (minimum/optimal): 512 bytes / 512 bytes

    Disk identifier: 0x0009f7a7


    Device Boot Start End Blocks Id System

    /dev/sda1 * 1 66 523264 fd Linux raid autodetect

    Partition 1 does not end on cylinder boundary.

    /dev/sda2 66 121602 976237568 fd Linux raid autodetect


    Command (m for help): w

    The partition table has been altered!


    Calling ioctl() to re-read partition table.

    Syncing disks.

    Теперь мы можем добавить /dev/sda1 и /dev/sda2 в /dev/md0 и /dev/md1:

    mdadm --add /dev/md0 /dev/sda1

    mdadm --add /dev/md1 /dev/sda2
    Теперь взглянем на:

    cat /proc/mdstat

    ... и вы увидите, что RAID-массивовповторно быть синхронизированы.
    Затем установите /etc/mdadm/mdadm.conf к новой ситуации:

    cp /etc/mdadm/mdadm.conf_orig /etc/mdadm/mdadm.conf

    mdadm --examine --scan >> /etc/mdadm/mdadm.conf

    Теперь удалите /etc/grub.d/09_swraid1_setup ...

    rm -f /etc/grub.d/09_swraid1_setup

    ... и обновить наш GRUB2 конфигурации загрузчика:

    update-grub

    update-initramfs -u
    Теперь, если вы посмотрите на /boot/grub/grub.cfg, вы обнаружите, что menuentry строфы в разделе ### BEGIN /etc/grub.d/10_linux ### выглядеть почти так же, как то, что мы имели в /etc/grub.d/09_swraid1_setup (теперь они должны быть также настроен на загрузку с /dev/md0 вместо (hd0) или (hd1)) Вот почему мы не должны /etc/grub.d/09_swraid1_setup больше.
    После этого мы должны убедиться, что GRUB2 загрузчик установлен на обоих жестких дисков, /dev/sda и /dev/sdb:

    grub-install /dev/sda

    grub-install /dev/sdb
    Перезагрузка системы:

    reboot

    Она должна загружаться без проблем.
    Вот и все - вы успешно создали программное обеспечение RAID1 на Proxmox системы!
    Наслаждайтесь!

     

    источник: http://open-vz.ru/ct-stavim-proxmox-programmnyi-raid

    ссылка на материал: http://www.thin.kiev.ua/categoryblog/758-proxmox-soft-raid.html

    допы: http://stormbp.blogspot.com/2012/11/proxmox-22.html

    ТЫЦ

    {jcomments on}

    Последнее обновление 18.01.13 18:23
     
    Как и чем прошить Wi-Fi точку доступа DWL 2100 PDF Печать E-mail
    18.01.13 11:34


    Как и чем прошить Wi-Fi точку доступа DWL 2100
    Прошивка на точку доступа DWL 2100 версии 2.40


    Точка доступа Wi-Fi D-Link DWL 2100AP

    Если вы решили по какой-либо причине прошить свою точку доступа, то вам сюда !

    Скачать с Deposit Files AP Manager by ACOWA
    - Это очень удобная и простая в обращении программа. Её удобный интерфейс позволяет без труда все настроить.



    Вводим свой IP, логин и пароль и жмем connect. Примечание: если не знаем пароля или не можем определить IP - адрес, можно произвести полный сброс настроек, нажав и удерживая около 3-5 секунд кнопку перезагрузки, после чего IP становится 192.168.0.50, логин - admin, пароль - отсутствует.
    Для настройки режимов жмем на закладку Wireless, здесь можно настроить не только режимы(точка, репитор, клиент), но и программно поднять выходную мощность, для этого нужно поменить стоящее по умолчанию значение (Output power = 17) на большее, сам ставил до 23dBm(199mW), а зимой, т.к точка стояла на улице, до 25.

    Смена/прошивка mac-адреса на DWL 2100

    Так же, через эту программу, можно поменять MAC адрес вашего дивайса, для этого заходим на вкладку Telnet, жмем Alpha, и вводим команду 'get macaddress' для просмотра текущего МАС и 'set mac all новый_мас' для записи нового МАСа. После завершения операции необходимо перезагрузить точку, после чего отключить питание минимум на 5 сек.

    Прошивка точки доступа DWL 2100
    Для прошивки заходим на вкладку Advansed и жмем FTP Programmer появляется такое окно:



    Дальше все очень просто, Write - писать, Read - читать прошивку, указав перед этим путь для сохранения/загрузки. Если прошивка полетела до того, как удалось её считать, то её можно взять ЗДЕСЬ.

    скачать прошивку 2,51 с оф. сайта ftp://ftp.d-link.ru/pub/Wireless/DWL-2100AP/Firmware/2.51/

    Скачать с Deposit Files Cкачать прошивку v2.40 с DepositFiles (1.58Mb)
    Скачать с Deposit Files Cкачать AP Manager by ACOWA с DepositFiles (2.62Mb)

     

     

    источник: http://lexwebmaster.narod.ru/dwl2100.html

    ссылка на материал: http://www.thin.kiev.ua/categoryblog/757-dwl-2100.html

    {jcomments on}

    Последнее обновление 18.01.13 11:41
     
    « НачалоПредыдущая12345678910СледующаяПоследняя »

    Страница 10 из 25

    bottom

     

    Unreal Commander PfSense по русски Яндекс.Метрика