发信人: edyfox (滇狐), 信区: LinuxApp
标 题: 打造便携式用户配置
发信站: 水木社区 (Mon Apr 30 10:27:58 2007), 站内
#TITLE: 打造便携式用户配置
如果你有多台不同的机器的话,你也许希望能在不同的机器上都使用同样的用户配置,例如窗口样式、Firefox 扩展、应用程序偏好设置等。虽然在 Linux 所有用户配置都在 ''$HOME'' 目录下,只要完整同步 ''$HOME'' 目录,就能把所有用户配置同步到另一台机器上,但完整同步整个 ''$HOME'' 目录却不是每个人都能负担的开销,也不是所有人都愿意像滇狐这样把 ''$HOME'' 放在移动硬盘里面随身携带。因此,我们需要打造一套便携式的用户配置文件,让我们在不同机器之间迁移时更加方便灵活。
注意:
本文按照思考问题的思路顺序来介绍打造方法,因此接下来的部分中会提到许多半成品脚本,在其后的章节里可能会多次修改这些脚本。因此在你确认这些脚本是最终版本之前,没有必要把脚本抄到你自己的系统中试验。
* 收集需要同步的配置文件
要想在不同机器中使用同样的配置,首先能够想到的就是同步我们家目录下点开头的文件和文件夹。但是,这些点开头的文件和文件夹并不是都需要被同步的,例如除非你是专业美术设计人员,否则你肯定不会愿意同步 ''~/.gimp*'' 文件夹。另外,同步 Firefox 本地缓存、KDE 图标预览缓存等,也都是很让人不愉快的经历。因此,我们需要将需要同步的内容和不需要同步的内容区分开来。实现这点很容易,因为 Linux 支持符号链接!我们只需要建立一个文件夹,然后将需同步的内容都移动到这个文件夹下,然后在原始位置创建指向这些移动后的文件的符号链接就可以了。
于是,滇狐创建了 ''~/config'',然后准备在这个文件夹下存放需要同步的配置文件。为了在 Konqueror 下编辑配置文件更加方便,滇狐把 ''~/.filename'' 移动到 ''~/config'' 下后,顺便改名为 ''dot.filename'',这样,该文件就不再是隐藏文件了,可以在 Konqueror 下直接双击打开。为了让配置文件的收集更加便利,滇狐创建了以下脚本:
#Code syntax="sh" <<
---
#!/bin/sh
# Filename: gather.sh
if (test $# = 0) then
echo Usage: gather.sh filename
else
for file in "$@"
do
if [ ! -e "dot`basename $file`" ];
then cp -rfa "$file" "dot`basename $file`"
fi
done
fi
---
打开 Konsole,切换到 ''~/config'' 目录,然后运行 ''./gather.sh ~/.vimrc'',就可以把 ''~/.vimrc'' 复制到 ''~/config'' 中,并改名为 ''dot.vimrc''。滇狐使用这样的方法收集了以下文件:
#Code syntax="txt" <<
---
dot.bash_logout dot.bash_profile dot.bashrc dot.deplate dot.dir_colors dot.fonts.conf dot.gaim dot.gconf dot.gconfd dot.google dot.gtkrc dot.gtkrc-2.0 dot.gtkrc-2.0-kde dot.gtkrc.mine dot.kde dot.kderc dot.lftprc dot.mozilla dot.mutt_alias dot.muttrc dot.pyinput dot.qt dot.scim dot.screenrc dot.themes dot.vim dot.vimrc dot.xinput.d dot.Xresources dot.Xsession
---
收集了需要同步的文件后,当我们把 ''~/config'' 文件夹整个复制到另外一台机器上后,需要把 ''$HOME'' 底下的那些文件或文件夹删了,改为指向 ''~/config'' 中的相应文件或文件夹的符号链接。我们再创建一个简单的脚本来做这件事情:
#Code syntax="sh" <<
---
#!/bin/sh
# Filename: settings.sh
for file in dot.*
do
filename=${file/dot/}
if [ -e ~/$filename ];
then
if [ ! -L ~/$filename ];
then
echo Trying to remove ~/$filename...
rm -rf ~/$filename
echo Linking $file to ~/$filename...
ln -s `pwd`/$file ~/$filename
fi
else
echo Linking $file to ~/$filename...
ln -s `pwd`/$file ~/$filename
fi
done
---
* 减少同步内容
现在我们已经拥有一个简单的、可在不同机器间同步的配置文件包了,但是,在这些配置文件包中,还是存在许多不需要被同步的内容,例如 Firefox 本地缓存等。解决这个问题很简单,还是使用同样的思路,将这些不需要同步的内容再创建一次符号链接,指到 ''~/config'' 之外就行了。 ** Gaim 滇狐不是那种特别热衷于收集聊天记录的人,因此滇狐理所当然地将 Gaim 中的聊天记录、MSN 图标、QQ Show等信息挪到同步目录之外。因此,滇狐在 ''~/config/dot.gaim'' 中创建了以下符号链接:
#Code syntax="txt" <<
---
icons -> ~/document/gaim/icons
logs -> ~/document/gaim/logs
qqshow -> ~/document/gaim/qqshow
smileys -> ~/document/gaim/smileys
---
为了方便在新的环境中创建这几个文件夹,滇狐写了这个简单的脚本,存为 ''~/config/dot.gaim/settings.sh'':
#Code syntax="sh" <<
---
#!/bin/sh
mkdir -p ~/document/gaim/icons
mkdir -p ~/document/gaim/logs
mkdir -p ~/document/gaim/qqshow
mkdir -p ~/document/gaim/smileys
---
** KDE
KDE 的配置文件非常乖,一般守规矩的程序都会把用户偏好设置存放到''.kde/share/config'' 下,把用户使用中生成的数据存放到''.kde/share/apps'' 下,这给我们排除不需要同步的数据提供了极大便利,因为就滇狐个人而言,很希望能方便地同步偏好设置,但不大希望同步使用中生成的数据,因此我们直接把 ''~/config/dot.kde/share/apps'' 移动到 ''~/tmp'' 下,然后原地创建一个符号链接即可。 和前面类似,我们依然创建一个 ''~/config/dot.kde/settings.sh'',方便在新的环境中创建所需的文件夹:
#Code syntax="sh" <<
---
#!/bin/sh mkdir -p ~/tmp/apps
---
** Firefox
和 KDE 的乖比起来,Firefox 那可是相当不乖。看一下它的配置文件所在的目录'' ~/config/dot.mozilla/firefox/edward.default''(在你机器上一定不是这样的路径,根据你的实际情况修改),里面需要同步的文件和不需要同步的文件犬牙交错,分离起来很困难。经过一番搜索,滇狐决定把这些文件或文件夹挪到 ''~/tmp/mozilla'' 中:
#Code syntax="txt" <<
---
bookmarkbackups Cache Cache.Trash history.dat urlclassifier2.sqlite ---
Firefox 对 ''history.dat'' 的格式检测非常严格,如果 ''history.dat'' 的格式不能满足它的要求,它会把 ''history.dat'' 整个删掉然后重新创建一个。这就意味着,即使我们为 ''history.dat'' 创建了符号链接并且把它指到''~/tmp/mozilla'' 下,如果 ''~/tmp/mozilla'' 下没有一个格式完全合法的 ''history.dat'' 的话,Firefox 会删除符号链接并创建一个非符号链接的 ''history.dat'',这样我们下次向另一台机器同步的时候,''history.dat'' 也就不得不参与同步了。为了解决这个问题,滇狐采取了这样的方法: # 关闭 Firefox; # 删除 ''history.dat''; # 打开 Firefox,此时会自动创建一个没有任何条目的 ''history.dat'',大概 376 字节; # 将 ''history.dat'' 复制到 ''~/config/dot.mozilla'' 下备用; # 到一台新机器架设工作环境时,先将''~/config/dot.mozilla/history.dat'' 复制到 ''~/tmp/mozilla'' 下,这样可以保证 Firefox 配置文件夹下的那个 ''history.dat'' 符号链接指向的文件有合法的格式。 相比之下,urlclassifier2.sqlite 文件可就乖得多了,即使目标文件格式不合法,它也只会重写目标文件,而不会删除符号链接重建,因此我们只需要简单地在 ''~/tmp/mozilla'' 下创建一个空文件给它链接就好。 另外还有两个最可恶的文件 ''XPC.mfasl'' 和 ''XUL.mfasl'',它们都不是滇狐心目中的需要被同步的内容,却不但体积庞大,而且会不定期删除重建,使滇狐完全无法使用符号链接机制把它们从需同步内容中剥离出来,只好忍了。实在不行每次同步之前把它们两个都删一遍就好。 除了 Firefox 外,古老的 Mozilla 也把配置文件放在 ''~/.mozilla/default'' 中。滇狐没有兴趣同步 Mozilla 的配置文件,所以把 ''~/.mozilla/default'' 整个指到 ''~/tmp/mozilla/default'' 就好。 为了自动实现上面说的一系列创建文件夹、复制 ''history.dat'' 等内容,我们编写一个简单的脚本存放到 ''~/config/dot.mozilla/settings.sh'' 中。 #Code syntax="sh" <<
---
#!/bin/sh
mkdir -p ~/tmp/mozilla/default
mkdir -p ~/tmp/mozilla/Cache
mkdir -p ~/tmp/mozilla/Cache.Trash
mkdir -p ~/tmp/mozilla/bookmarkbackups
touch ~/tmp/mozilla/urlclassifier2.sqlite
cp history.dat ~/tmp/mozilla/history.dat
---
** Vim
和前面那些大批由程序自动生成的配置文件相比,Vim 的配置处理起来可容易多了,因为所有的配置文件都是用户自己编写或下载的,用户对于自己需要同步的文件非常清楚。 根据个人习惯,滇狐喜欢在 ''~/.vim/plugin'' 下存放一些在 Vim 中常用的脚本或二进制应用程序,到了一台新的机器时,把这些程序直接 ''ln -s'' 到 ''~/bin'' 中就可直接使用。和前面类似,滇狐在这里也提供了一个 ''settings.sh'': #Code syntax="sh" <<
---
#!/bin/sh
mkdir -p ~/bin
ln -f -s ~/.vim/plugin/clewn ~/bin/clewn
ln -f -s ~/.vim/plugin/gvim-latex ~/bin/gvim-latex
ln -f -s ~/.vim/plugin/omnictags ~/bin/omnictags
ln -f -s ~/.vim/plugin/start.kde ~/bin/start
---
其中 clewn 下载自 http://clewn.sourceforge.net,其余几个很简单的脚本内容如下: #Code syntax="sh" <<
---
#!/bin/sh
# Filename: gvim-latex
if [ $# -lt 1 ];
then
echo Usage: gvim-latex filename
else
for i in "$@"
do gvim --servername latex-suite --remote-silent "$i"
done
fi
---
#Code syntax="sh" <<
--- #!/bin/sh # Filename: omnictags ctags --c++-kinds=+p --fields=+iaS --extra=+q "$@"
---
#Code syntax="sh" <<
---
#!/bin/sh
# Filename: start.kde
if (test $# = 0)
then
echo Usage: start filename
else while (test $# -gt 0)
do kfmclient exec "$1" shift
done
fi
---
* 增加同步内容
在许多情况下,我们会发现,在一个配置文件目录中,大部分内容我们不希望同步,但有少部分内容我们希望把它同步起来。此时使用前面的“收集整个配置文件目录”后再“减少无须同步的内容”来进行处理的话显得非常繁琐,因此我们改用另一种思路,就是整个目录不移入 ''~/config'',将需同步的内容放入 ''~/config'' 后再在外面创建符号链接指到''~/config'' 中去。 ** applications 在 KDE 中, ''~/.local/share/applications'' 里存放了我们自定义的开始菜单图标、文件打开方式等信息,以一系列 ''.desktop'' 文件的形式存放。但 ''~/.local'' 中却有大量别的我们不希望同步的内容,如回收站等。因此滇狐决定,将 ''~/.local/share/applications/*.desktop'' 收集到 ''~/config/applications''下,然后在原始位置创建符号链接指过来。 为了方便在新的机器上创建符号链接,我们编写一个这样的脚本:
#Code syntax="sh" <<
---
#!/bin/sh
# Filename: settings.sh
mkdir -p ~/.local/share/applications
for file in *.desktop
do
ln -sf `pwd`/$file \ ~/.local/share/applications/$file
done
---
** bin
也许你日常工作中会编写一些常用的小脚本,希望在不同机器中都可以使用。这样的话不妨把你编写的脚本都放到 ''~/config/bin'' 中,然后在 ''~/config/bin'' 中创建一个这样的脚本 ''settings.sh'':
#Code syntax="sh" <<
---
#!/bin/sh
mkdir -p ~/bin for file in *
do
if [ "$file" != settings.sh ];
then
ln -fs `pwd`/"$file" ~/bin/"$file"
fi
done
---
** face KDE
和 GNOME 都允许定义用户自定义头像,但 KDE 是 ''~/.face.icon'',GNOME 是 ''~/.face''。没关系,反正我可以使用硬链接把它们都链接到同一个文件上。在 ''~/config/face'' 中创建一张 png 图片作为头像,命名为 ''face.png'',然后创建一个脚本,名叫 ''settings.sh'':
#Code syntax="sh" <<
---
#!/bin/sh
ln face.png ~/.face
ln face.png ~/.face.icon
chmod 644 ~/.face
chmod 644 ~/.face.icon
---
** QTerm QTerm
文件夹下有大量不需要同步的内容,如图片浏览时留下的 Cache 等等。需要同步的只有两个文件:''address.cfg''——QTerm 地址簿;''qterm.cfg''——用户偏好设置。将这两个文件收集到 ''~/config/qterm'' 中,然后创建一个脚本 ''settings.sh'',内容如下:
#Code syntax="sh" <<
---
#!/bin/sh
mkdir -p ~/.qterm
ln -s ~/config/qterm/address.cfg ~/.qterm
ln -s ~/config/qterm/qterm.cfg ~/.qterm
if [ -f /usr/local/LumaQQ/QQWry.dat ];
then ln -s /usr/local/LumaQQ/QQWry.dat ~/.qterm
fi
---
* 一些额外设置
除了收集配置文件外,我们顺便再使用这一机制实现一些额外功能,简化在一个新的环境中初始化工作环境的工作。
** 创建常用工作文件夹
在 ''~/config'' 中创建 ''directories'' 文件夹,里面放一个 ''settings.sh'',内容如下:
#Code syntax="sh" <<
---
#!/bin/sh
mkdir -p ~/workspace mkdir -p ~/public_html
---
** Mail
在 ''~/config'' 中创建 ''mail'' 文件夹,里面放一个 ''settings.sh'',内容如下:
#Code syntax="sh" <<
---
#!/bin/sh
mkdir -p ~/Mail touch ~/Mail/mailbox
touch ~/Mail/postponed
ln -s /var/spool/mail/`whoami` ~/Mail/spool
---
** 自动运行各个 settings.sh
打开我们之前创建的 ''~/config/settings.sh'',在尾部添加以下语句: #Code syntax="sh" <<
---
...
for file in *
do
if [ -d $file ];
then pushd $file > /dev/null
if [ -f settings.sh ];
then echo Launching $file/settings.sh
./settings.sh
fi
popd > /dev/null
fi
done
---
这样我们只要运行这个 ''./settings.sh'',它就会自动把所有其它目录中的 ''settings.sh'' 都运行一遍了。
* 同步脚本
为了更方便地与其它机器同步,滇狐提供了以下两个脚本:
#Code syntax="sh" <<
---
#!/bin/sh
# Filename: upload.sh
if (test $# = 0) then
echo Usage: $0 host
else
rsync -az -e ssh --delete "/home/edward/config" \
$1:"/home/edward/"
fi
---
#Code syntax="sh" <<
---
#!/bin/sh
# Filename: download.sh
if (test $# = 0) then
echo Usage: $0 host
else
rsync -az -e ssh --delete $1:"/home/edward/config" \
"/home/edward/"
fi
---
附:关于git
git 支持好多协议的,还能把某一个范围的版本打包成一个单独文件(git bundle),
这样不需要在 repos 端开服务器,方便用 u 盘带着跑。
大致流程是这样:
cd
git init
git status
看输出需要什么就 git add 什么,可以编辑 ~/.gitignore 忽略某些文件。
git commit -m "some log"
git gc
这一步把分散在 .git/objects 下的 loose objects 打包成 .git/objects/pack下的 pack 文件,对于配置文件,这个 pack 很小的,可以直接拿 u 盘拷贝.git 带走,不需要 git bundle 了。
git branch hostA
这样创建一个分支给 hostA 用,在这个 .git 里头就包含了你要使用的所有机器上的自定义配置,互相之间还能 merge.
有版本管理最大的好处是可以看 diff 和 log,这样改错了能方便的恢复回去。
319 条评论:
«最旧 ‹较早 201 – 319(共 319 个)buy viagra online viagra online thailand - buy viagra online from india
buy tramadol overnight cod tramadol for dogs effects - tramadol online with no prescription
purchase viagra viagra coupon - viagra buy japan
buy tramadol mastercard tramadol for dogs no rx - tramadol for dogs for arthritis
buy viagra online safe purchase viagra online - viagra buy in usa
tramadol online tramadol hcl effects - buy tramadol online usa
buy viagra 100mg online prescription viagra buy online - buy viagra online cheap
cheap tramadol tramadol 100 mg erowid - tramadol 50mg uses
buy cialis online usa cialis tablets - online rx for cialis
order tramadol online cod tramadol 200mg - tramadol dosage pain
tramadol online tramadol for dogs safe - tramadol hydrochloride 50 mg get you high
buy generic viagra online overnight viagra online usa no prescription - forum for generic viagra
purchase viagra is there a generic viagra yet - cheap viagra australia
buy tramadol online buy tramadol online from usa - tramadol
buy tramadol online no prescription cheap is tramadol for dogs a narcotic - buy tramadol in florida
viagra no prescription viagra for women wiki - buy viagra online london
cialis online cialis купить в киеве - cialis 5mg online canada
buy generic viagra online overnight cheap viagra next day delivery - viagra for cheap online
buy tramadol without rx side effects for tramadol 50mg - buy tramadol online no prescription cod
buy tramadol cheap no prescription buy tramadol online illegal - tramadol 50 mg cost
buy tramadol online can you buy tramadol in usa - tramadol hcl 50 mg mylan
generic tramadol tramadol 50mg much acetaminophen - tramadol buzz
tramadol 50mg buy tramadol without prescriptions - tramadol classification
buy tramadol online tramadol for dogs uses - tramadol overdose in dogs treatment
buy tramadol cod overnight buy tramadol cod free - tramadol kali 083
buy tramadol no prescription tramadol hcl 100mg side effects - order tramadol cod next day delivery
buy tramadol without prescriptions buy tramadol usa next day delivery - tramadol hcl 50 mg for headaches
order tramadol buy tramadol cod delivery - tramadol xl dosage
buy tramadol cod next day delivery tramadol zoloft - tramadol withdrawal protocol
buy tramadol buy tramadol 50 mg - high does tramadol make you
tramadol buy where to buy tramadol forum - tramadol 50 mg street value
tramadol 50mg tramadol hcl er 150 - get tramadol online no prescription
buy tramadol cod next day delivery where can i buy tramadol online usa - tramadol 50 mg price per pill
buy tramadol buy tramadol uk - tramadol 50mg street value
tramadol no prescription tramadol online no prescription usa - long does tramadol high last
where to buy tramadol online order tramadol overnight - tramadol hcl 50 mg addiction
buy tramadol ultram i took 7 tramadol - buy tramadol online next day delivery
tramadol 50 mg tramadol 50 mg side effects - tramadol dosage dogs bone cancer
can you buy tramadol online legally tramadol 50 mg vs percocet 10mg - generic tramadol
tramadol online tramadol for dogs onset of action - tramadol hcl 50 mg espanol
buy tramadol tramadol online deutschland - tramadol hcl lexapro
buy tramadol online buy generic tramadol online - where to buy tramadol
order tramadol online tramadol 180 - buy tramadol in us
tramadol no prescription buy tramadol paypal - tramadol 900 mg
order tramadol online ultram better than tramadol - buy tramadol online overnight cod
buy tramadol online tramadol for toothache - tramadol for dogs usa
buy tramadol best place buy tramadol - tramadol without prescription
tramadol without prescription buy tramadol usa paypal - tramadol 617
tramadol online tramadol no prescription overnight - buy tramadol online without prescriptions
tramadol 50 mg tramadol overdose damage - tramadol no prescription overnight delivery
buy tramadol online buy tramadol online checking account - tramadol high like vicodin
tramadol cheap buy tramadol online with credit card - tramadol hcl canine
buy tramadol online tramadol 100mg buy online - tramadol online free shipping
tramadol 50mg tramadol 50 mg once a day - buy tramadol online echeck
buy tramadol tramadol 50mg vs lortab - tramadol urine drug test
tramadol 50 mg tramadol hcl + kidney - tramadol in usa over the counter
buy tramadol 100mg tramadol for sale online no prescription - tramadol overdose how much does it take
buy tramadol in florida tramadol hcl lethal dose - tramadol overnight saturday delivery
tramadol no prescription tramadol dosage and effects - tramadol 50mg oxycodone
tramadol 50 mg tramadol hcl 50 mg for headaches - where can i buy tramadol for dogs
tramadol online tramadol 50 mg and ambien - tramadol hcl er 100mg
buy tramadol online buy tramadol online usa - tramadol withdrawal in a neonate
tramadol 50 mg tramadol for dogs pain - can you buy tramadol online in the usa
buy tramadol buyer tramadol online - tramadol with alcohol high
buy tramadol india tramadol 100mg safe - tramadol withdrawal medication
buy tramadol tramadol tablets dogs dosage - tramadol without prescription
tramadol 50 mg where to buy tramadol cheap - online us pharmacy no prescription tramadol
tramadol online tramadol hcl 50 mg get high - tramadol 50 mg white pill
buy tramadol tramadol lawsuit - tramadol hydrochloride get high
tramadol online tramadol 50 mg bluelight - tramadol 100 mg street value
buy tramadol tramadol hcl uses - tramadol dose
buy tramadol buy cheap tramadol overnight - best place buy tramadol
tramadol 100mg tramadol 50 mg image - buy tramadol online canada
order tramadol online tramadol cheap - tramadol high erowid
nolvadex without prescription nolvadex quanto custa - tamoxifen 3 years
buy nolvadex tamoxifen yew - buy tamoxifen no prescription
cheap nolvadex online proviron or nolvadex pct - buy zeneca nolvadex
buy cheap cialis cialis 36 vs daily - order generic cialis online
buy nolvadex nolvadex jak stosowac - buy tamoxifen citrate tablets
buy cialis online cheap cialis online-versand - new daily cialis
buy cialis generic cialis online purchase - cialis 2.5 reviews
buy tramadol online can you buy tramadol on the internet - tramadol information
buy cheap nolvadex is it legal to buy nolvadex online - tamoxifen mice
cialis price buy generic cialis online - cialis daily no prescription
buy soma soma muscle relaxer usa - soma san diego seating chart
buy cialis online cialis 5 mg daily effectiveness - generic cialis viagra and levitra
buy soma buy soma 350 mg online - muscle relaxer comparable soma
buy tramadol online tramadol hcl 50 mg drug interactions - tramadol hcl 100 mg er tablets
soma muscle side effects generic soma - soma buy overnight
generic tramadol tramadol 50mg what is it used for - get over tramadol addiction
buy soma soma san diego hours - buy soma online overnight
soma for sale order soma online-cheap - illegal buy soma online
soma cheap buy online soma no prescription - soma bras las vegas
cialis for sale cialis kosher for passover - duane reade cialis price
buy tramadol online tramadol 50 mg how many - buy generic tramadol
buy cialis online cheap cialis from china - buy cialis online usa
buy soma buy soma online cash delivery - soma muscle relaxer 350 mg
tramadol 100mg buy tramadol legit - tramadol qt
buy soma online soma coupon codes - soma bras usanapolis
cialis 10mg cialis online western union - cialis daily from usa
soma without prescription soma online no prescription overnight - what does soma pills do
buy soma soma bras made - cheap somas online
buy soma soma online music - buy soma online us pharmacy
cialis online canada cialis online deutschland - cialis 100
buy soma soma drug class - buy soma online cash delivery
soma for sale soma drug strengths - dosage for soma 350 mg
buy soma soma apartments bellevue - soma san diego zip code
buy soma soma muscle relaxer over counter - soma promotion code
buy soma soma positive drug test - soma bras boston
soma online generic soma 446 - soma muscle relaxer pills
buy soma generic soma with codeine - generic name for soma compound
buy soma online cheap soma sale - soma push up bras
soma no prescription soma san diego history - soma online no prescription-overnight delivery
soma muscle relaxant buy soma in usa - day remember soma san diego
soma no prescription buy soma online us pharmacy - soma pills side effects
buy soma soma xli - cheap soma no prescription
buy soma online muscle relaxer better soma flexeril - buysoma.org
buy tramadol online tramadol withdrawal symptoms and duration - buy tramadol online us pharmacy
best buy tramadol order tramadol rx - buy tramadol online in australia
发表评论