خب بالاخره همین الآن کوبیبردم رسید دستم و چون قول داده بودم که بگم باهاش چیکار میکنم این تاپیک رو ایجاد کردم که شما رو هم در جریان مرحله به مرحلهی کارم بذارم.
فعلاً جعبهاش رو باز کردم و صحنهای که پیشروم دارم اینه:
(http://linux-sunxi.org/images/thumb/8/85/Cubieboard-standard.jpg/800px-Cubieboard-standard.jpg)
کیفیت ساخت برد به نظر خوب میرسه و تنها چیزی که در برخورد نخست توی ذوق میزنه نبود مبدّل برق شهری به جریان ثابت ۲ آمپر با اختلاف پتانسیل ۵ ولته. البته سر کابل قدرت دستگاه یواسبیه و با وصل کردن به لپتاپ، الایدیاش روشن میشه. اومدم ببینم میشه از مبدّل برق به یواسبی گوشیام استفاده کنم یا نه که دیدم با این که اون هم احتلاف پتانسیل ۵ ولت میده، ولی جریانش ۸۵۰ میلیآمپره و این ریسک رو نمیکنم که بهش وصل کنم. پس گویا فعلاً باید به همون لپتاپ وصل باشه. در ضمن همونطور که قبلاً هم گفتم، تو خونه تلویزیون ندارم و نمیتونم خروجی تصویرش رو بررسی کنم که ببینم اندروید روش چهطور کار میکنه. شاید ببرم خونهی پسرخالهام و تستش کنم و شاید هم بیخیالش بشم و روش دبیان نصب کنم.
ادامه دارد…
خب. عملیات رونوشت به اتمام رسید. حالا کابل اترنت رو از مودم وصل میکنم به سوکت RJ45 روی دستگاه، کارت میکرو اسدی رو توی اسلات مخصوصش قرار میدم و یواسبی قدرت رو به لپتاپم وصل میکنم. چند ثانیه بعد یه الایدی سبز روشن میشه که یعنی دستگاه بوت شده و آمادهی استفادهاست.
برای این که بدونم با چه آیپیای به شبکهام وصله، به تابلوی تنظیمات مودمم میرم و می بینم که جلوی عبارت mele (نام میزبان پیشفرض در اون نسخهای از دبیان که نصب کردم) نوشته 192.168.1.5 (برای شما با این فرق میکنه). پس یه پایانه باز میکنم و مینویسم:
$ ssh root@192.168.1.5
ازم میپرسه که اثرانگشتش رو به سامانه اضافه کنه یا نه که من مینویسم yes و اینتر رو میزنم. بعد باید گذرواژهی root رو بهش بدیم که در اینجا همون root هست.
چه صحنهی زیبایی. الآن پشت فرمان برد نشستیم و داریم با دبیانی که روی کارت میکرواسدیه باهاش کار میکنیم. میشه همینجا کار رو تموم کرد و از همین استفاده کرد، ولی من میخوام سیستمعاملم رو روی حافظهی NAND خود دستگاه نصب کنم که هم سرعت بالاتر بره و هم بتونم از کارت میکرواسدی به عنوان فضای ذخیرهی اطّلاعات شخصی (و نه سیستمعامل) استفاده کنم.
برای این کار، راحتترین راه اینه که از نرمافزار بسیار خوب Pimp My Mele (http://guillaumeplayground.net/pimp-my-mele/) استفاده کنم. برای این کار همینطور که در حساب ریشهی دبیان هستم اون نرمافزار رو اجرا میکنم:
# PIMP_MY_MELE
(http://guillaumeplayground.net/wp-content/uploads/2012/10/pmm1.png)
بعد از ظاهر شدن رابط گرافیکی، همونطور که میتونید حدس بزنید، گزینهی نخست رو انتخاب میکنم. ازم میپرسه مطمئنی و میگم بله. حالا به من میگه سامانه باید یه بار راهاندازی مجدّد بشه و من قبول می کنم. در صفحهی بعدی میپرسه میخوای همین الآن راهاندازی مجدّد انجام بشه و من میگم بله. دستگاه به من هشداری در این مورد میده که سامانه داره خاموش میشه، بعد اتّصال امن من به برد قطع میشه که نشونهی خوبیه، و بعد الایدی سبز خاموش میشه که یعنی دستگاه خاموش شده. چند ثانیه بعد دوباره الایدی سبز روشن میشه و من دوباره یه اتّصال پوستهای امن بهش میزنم:
$ ssh root@192.168.1.5
بعد از وارد کردن گذرواژه و ورود به پوستهی بش دستگاه، دوباره برنامهی Pimp My Mele رو اجرا میکنم:
# PIMP_MY_MELE
و گزینهی نخست رو انتخاب میکنم. برام مینویسه که پارتیشنبندی نند درسته و الآن میخوام دادهها رو روش بنویسم، احتمالاً ۳-۴ دقیقه طول میکشه و در این مدّت هیچ کاری نکن که من قبول میکنم. در طول این مدّت یک خونه به اندازهی فضای یک نویسه پایین سمت چپ صفحه روشن و خاموش میشه (به رنگ فیروزهای).
به دلیل نامعلومی اون صفحه یک بار دیگه هم نمایش داده میشه و این بار با قبول کردن شرایط، خط پایینی صفحه بنفش میشه (رنگ پیشفرض پسزمینهی پایانهی من) و اون خونه این بار به رنگ سفید روشن و خاموش میشه. پس از مدّتی بهم میگه کار انجام شد، دستگاه رو خاموش کن، کارت میکرواسدی رو دربیار و دستگاه رو روشن کن تا با سیستمعامل نصب شده روی نند بالا بیاد. من قبول میکنم و ازم میپرسه الآن خاموش کنم که من میگم آره. دوباره هشدار خاموش شدن میآد و اتّصال من قطع میشه و این بار کل برد خاموش میشه. یعنی علاوه بر الایدی سبز، الایدی قرمز که از ابتدا تا الآن روشن بود هم خاموش میشه.
حالا من کابل یواسبی قدرت رو درمیآرم، کارت میکرواسدی رو هم از جاش میآرم بیرون و کابل یواسبی قدرت رو دوباره به لپتاپم وصل میکنم.
ابتدا الایدی قرمز و چند ثانیه بعد الایدی سبز روشن میشن و من میتونم دوباره بهش اتّصال پوستهای امن (اساساچ) داشته باشم. نکته ای که این بار توجهه من رو جلب کرد سرعت بسیار بالای فرایند راهاندازی بود که در کمتر از ۲-۳ ثانیه انجام شد.
به نظر میسه کار سختافزاری ما روی این دستگاه فعلاً تموم شده و میریم که کارهای نرمافزاری رو روش انجام بدیم.
ادامه دارد…
یکی از نخستین چیزهای آزار دهنده توی این نسخهی دبیان اینه که توش کامل کردن خودکار وجود نداره. برای اضافهکردن این قابلیت، زیباتر کردن کنسول و چندتا اصلاحیهی ریز دیگه، باید پروندهی پیکربندی پوستهی بش (bashrc./~) رو تغییر داد. ولی از اونجا که نمیخوام این کار رو برای کاربر ریشه انجام بدم، تصمیم میگیرم که یه کاربر جدید عادی برای خودم ایجاد کنم و این تغییرات رو داخل اون انجام بدم.
از قبل کاربری به نام user روی سیستمعامل هست. نخست اون رو پاک میکنم:
# userdel user
و بعد کاربر خودم رو میسازم:
root@mele:~# useradd danialbehzadi
root@mele:~# passwd danialbehzadi
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
تا یادم نرفته گذرواژهی کاربر ریشه رو هم عوض میکنم:
root@mele:~# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
حالا که دارم کارهای امنیتی رو انجام میدم خوبه که کلیدهای اساساچ رو هم با گذرواژهی جدید کد کنم و جایگزین قبلیها کنم:
# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
# ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
اون اعلان root@mele هم رو اعصابمه، برای همین اون رو هم عوض میکنم:
# echo "danial-cubie" > /etc/hostname
حالا میتونم با خیال راحتتری به کاربر خودم سوئیچ کنم. البته از اونجا که کاربر من عادیه، راحتتر اینه که برای انجام کارهای نیازمند دسترسی sudo رو نصب کنم:
# apt-get update
# apt-get install sudo
بعد از نصب سودو، باید اون رو برای استفادهی کاربرم تنظیم کنم، برای این کار باید راهنماش رو ببینم، ولی man نصب نیست، پس اون رو هم نصب میکنم:
# apt-get install man
خب توی راهنماش چیز زیادی ننوشته بود (باید بستهی دیگهای نصب کنم؟) پس به سراغ ویکی دبیان (http://wiki.debian.org/sudo) میرم و با کمکش این دستور رو اختراع میکنم:
# usermod -a -G sudo danialbehzadi
برای بررسی این که الآن میتونم سودو کنم یا نه به حساب خودم میرم:
# su - danialbehzadi
در حالت عادی الآن باید وارد شاخهی خانگی من بشه، ولی چون قبلاً براش چنین چیزی تعریف نکردم میگه:
No directory, logging in with HOME=/
و با اعلان $ در ریشهی سامانهپرونده منتظر من میشه. اتّفاقاً در این مرحله این اتّفاق خوبیه. میخوام یه پرونده ایجاد کنم، پس میزنم:
$ touch a
که همونجوری که انتظار داشتم مینویسه:
touch: cannot touch `a': Permission denied
پس اون رو با سودود امتحان میکنم:
$ sudo touch a
این بار با موفّقیت این رو برام مینویسه:
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for danialbehzadi:
و بعد از دادن گذرواژهی خودم پروندهی a رو ایجاد میکنه. برای پاک کردنش هم:
$ sudo rm a
حالا برای ایجاد کردن شاخهی خانگی ابتدا به حساب ریشه برمیگردم:
$ exit
و بعد اون رو ایجاد میکنم:
# mkdir /home/danialbehzadi
و بهش دسترسی لازم رو میدم
chown danialbehzadi:danialbehzadi /home/danialbehzadi
حالا با بازگشت دوباره به حساب کاربر خودم در شاخهی خانگی قرار میگیرم:
# su - danialbehzadi
فعلاً از حساب خودم میآم بیرون، چون میخوام کاربرم رو به چندتا گروه سیستمی اضافه کنم:
$ exit
# usermod danialbehzadi --append --groups adm,cdrom,dip,www-data,plugdev
بعد برای کاربرم پوستهی بش رو به عنوان پوستهی پیشفرض قرار میدم:
# usermod danialbehzadi --shell /bin/bash
حالا میتونم با خیال راحت اتّصال رو قطع کنم و با کاربر خودم وارد بشم، ولی قبلش خوبه که یه بار دستگاه رو راهاندازی مجدّد کنم که مقادیر جدید (مثل نام میزبان و…) بار بشن:
# reboot
وقتی دوباره الدیدی سبز روشن ش میخوام با کاربر خودم به دستگاه متّصل شم. چون نام کاربری من روی لپتاپی که دارم روش این اعمال رو انجام میدم هم danialbehzadi است و همنام با کاربر مقصد میتونم به سادگی بنویسم:
$ ssh 192.168.1.5
و گذرواژه رو وارد کنم، اگه نامهای کاربری یکسان نبودن، باید دستور رو به این صورت وارد میکردم:
$ ssh danialbehzadi@192.168.1.5
خب حالا رسیدم به نکته ی اصلی که در ابتدای این پست گفته شد، یعنی کامل کردن خودکار. قبل از هرچیز بستهی bash-autocompletion رو نصب میکنم:
$ sudo apt-get install bash-completion
و بعد همونطور که گفتم باید برم سر پیکربندی پروندهی bashrc. برای این کار با ویرایشگر مورد علاقهام یعنی vim اون پرونده رو ویرایش میکنم. شما میتونین از ویرایشگر بسیار سادهتر nano استفاده کنین:
$ vim .bashrc
و بعد این متن رو داخلش مینویسم و ذخیرهاش میکنم:
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
# don't put duplicate lines in the history. See bash(1) for more options
# ... or force ignoredups and ignorespace
HISTCONTROL=ignoredups:ignorespace
# append to the history file, don't overwrite it
shopt -s histappend
# ignore common commands for history
export HISTIGNORE=":pwd:uptime:clear:c:ls:"
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=100000
HISTFILESIZE=409600
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color) color_prompt=yes;;
esac
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;33m\]\u\[\033[01;31m\]@\[\033[01;32m\]\h\[\033[00;33m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*)
;;
esac
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
# Add an "alert" alias for long running commands. Use like so:
# sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
. /etc/bash_completion
fi
برای این که این پرونده در ابتدای شروع به کار پوسته خونده بشه، باید پروندهی profile. رو به صورت زیر درست کنم. من با vim این کار رو میکنم، شما با هرچیز دیگهای که دوست دارین میتونین:
$ vim .profile
و این رو توش ذخیره میکنم:
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
#if [ -d "$HOME/bin" ] ; then
# PATH="$HOME/bin:$PATH"
#fi
حالا اگه یک بار اتّصال رو قطع کنم:
$ exit
و دوباره متّصل بشم (اگه تفاوت نام کاربری دارین توجّه کنین باید مثل بالا نام کاربری مقصد رو هم قبل از آیپی وارد کنین):
$ ssh 192.168.1.5
میبینم که تغییرات اعمال شدن
(http://axgig.com/images/65024410870225795255.png)
نخستین کاری که من میخوام با این برد بکنم اینه که باهاش تورنت (https://en.wikipedia.org/wiki/BitTorrent) بگیرم. برای این کار باید از یه کلاینت بیتتورنت (https://en.wikipedia.org/wiki/BitTorrent_client) استفاده کنم که من با مقایسهی همهی اونها ترنسمیشن (http://www.transmissionbt.com/) رو انتخاب میکنم. خوبی ترنسمیشن در اینه که بسیار سبکه و میتونه به صورت سرویس (https://en.wikipedia.org/wiki/Daemon_(computing)) نصب بشه و نیازی به محیط گرافیکی نداره. برای نصب سرویس ترنسمیشن این رو میزنم:
$ sudo apt-get install transmission-daemon
حالا که ترنسمیشن نصب شده، می خوام یه شاخه برای بارگیریهای اون بسازم و دسترسیاش رو به خودش بدم، بعد خودم رو به گروهش اضافه کنم تا بتونم پروندههای داخلش رو بخونم:
$ mkdir Downloads
$ cd Downloads
$ mkdir Torrents
$ sudo chown debian-transmission:debian-transmission Torrents/
$ sudo usermod danialbehzadi --append --groups debian-transmission
حالا باید تنظیمات ترنسمیشن رو تغییر بدم تا تورنتها رو در این شاخه بارگیری کنه. برای این کار پروندهی etc/transmission-daemon/settings.json رو به شکل زیر تغییر میدم (شما باید به جای danialbehzadi نام کاربر خودتون رو بنویسین):
{
"alt-speed-down": 8,
"alt-speed-enabled": false,
"alt-speed-time-begin": 540,
"alt-speed-time-day": 127,
"alt-speed-time-enabled": false,
"alt-speed-time-end": 1020,
"alt-speed-up": 8,
"bind-address-ipv4": "0.0.0.0",
"bind-address-ipv6": "::",
"blocklist-enabled": false,
"blocklist-url": "http://www.example.com/blocklist",
"cache-size-mb": 4,
"dht-enabled": true,
"download-dir": "/home/danialbehzadi/Downloads/Torrents",
"download-limit": 100,
"download-limit-enabled": 0,
"download-queue-enabled": true,
"download-queue-size": 5,
"encryption": 1,
"idle-seeding-limit": 30,
"idle-seeding-limit-enabled": false,
"incomplete-dir": "/root/Downloads",
"incomplete-dir-enabled": false,
"lpd-enabled": false,
"max-peers-global": 200,
"message-level": 2,
"peer-congestion-algorithm": "",
"peer-limit-global": 240,
"peer-limit-per-torrent": 60,
"peer-port": 51413,
"peer-port-random-high": 65535,
"peer-port-random-low": 49152,
"peer-port-random-on-start": false,
"peer-socket-tos": "default",
"pex-enabled": true,
"port-forwarding-enabled": false,
"preallocation": 1,
"prefetch-enabled": 1,
"queue-stalled-enabled": true,
"queue-stalled-minutes": 30,
"ratio-limit": 2,
"ratio-limit-enabled": false,
"rename-partial-files": true,
"rpc-authentication-required": true,
"rpc-bind-address": "0.0.0.0",
"rpc-enabled": true,
"rpc-password": "{f8990cdc6a5d57f17804e4f81c84b7393feb3db4HGupe6sk",
"rpc-port": 9091,
"rpc-url": "/transmission/",
"rpc-username": "transmission",
"rpc-whitelist": "0.0.0.0",
"rpc-whitelist-enabled": false,
"scrape-paused-torrents-enabled": true,
"script-torrent-done-enabled": false,
"script-torrent-done-filename": "",
"seed-queue-enabled": false,
"seed-queue-size": 10,
"speed-limit-down": 100,
"speed-limit-down-enabled": false,
"speed-limit-up": 100,
"speed-limit-up-enabled": false,
"start-added-torrents": true,
"trash-original-torrent-files": false,
"umask": 18,
"upload-limit": 100,
"upload-limit-enabled": 0,
"upload-slots-per-torrent": 14,
"utp-enabled": true
}
به دلیل نامعلومی این پرونده بعد از هربار اجرای سرویس به مقدار پیشفرض برمیگرده. برای جلوگیری از این امر این پرونده رو قفل میکنم:
$ sudo chattr +i /etc/transmission-daemon/settings.json
اگه خواستم برای تغییرات در آینده قفلش رو بردارم میتونم دستور بالا رو دوباره اجرا کنم، با این تفاوت که اون i+ رو مینویسم i- و پس از انجام تغییرات دوباره مثل بالا روش قفل میذارم.
حالا باید یه بار سرویس رو شروع مجدّد کنم تا با تنظیمات جدید شروع به کار کنه:
$ sudo service transmission-daemon restart
الآن ترنسمیشن راهاندازی شده و میتونه شروع به کار کنه. برای ارتباط با ترنسمیشن میتونم از رابط وبی که همراهش هست استفاده کنم، ولی قبلش میخوام یه آیپی ثابت تو شبکه به دستگاهم بدم که در طول زمان تغییر نکنه و همواره بدونم کجاست. برای این کار به تابلوی تنظیمات مودم/روترم میرم و آیپی بردم رو روی 192.168.1.2 فیکس میکنم. بعد از این که یک بار مودم/روتر رو راهاندازی مجدّد کردم، ميتونم با فایرفاکس از لپتاپ با آیپی 192.168.1.2 و درگاه 9091 و با نام کاربری و گذرواژهی transmissionبه ترنسمیشن دسترسی داشته باشم. بقیهی کار هم که مشخّصه:
(http://axgig.com/images/38475142841229345653.png)
Viva La Piracy!