من فوراً توضیح خواهم داد که من در این زمینه متخصص نیستم، اما بیش از یک بار به این فناوری علاقه نشان داده ام، اما تلاش برای بازی کردن با آن اغلب باعث درد می شود. امروز دوباره شروع به آزمایش کردم و نتایجی گرفتم که دوست دارم به اشتراک بگذارم. به طور خلاصه، روند نصب IPFS و برخی از ویژگیها شرح داده خواهد شد (همه چیز در اوبونتو انجام شد، من آن را روی پلتفرمهای دیگر امتحان نکردهام). اگر IPFS چیست، در اینجا با جزئیات نوشته شده است: habr.com/fa/post/314768
نصب
برای خلوص آزمایش، پیشنهاد میکنم فوراً آن را روی برخی از سرورهای خارجی نصب کنید، زیرا برخی از مشکلات را با کار در حالت محلی و از راه دور در نظر خواهیم گرفت. سپس در صورت تمایل، مدت طولانی تخریب نمی شود، زیاد نیست.
توجه: بهتر است IPFS را از طرف کاربری نصب کنید که قرار است بیشتر از آن استفاده کند. واقعیت این است که در زیر گزینه نصب از طریق را در نظر خواهیم گرفت FUSE و ظرافت هایی وجود دارد.
cd ~
curl -O https://dl.google.com/go/go1.12.9.linux-amd64.tar.gz
tar xvf go1.12.9.linux-amd64.tar.gz
sudo chown -R root:root ./go
sudo mv go /usr/local
rm go1.12.9.linux-amd64.tar.gz
نسخه های ipfs-update - برای مشاهده تمام نسخه های موجود برای دانلود. نسخه ipfs-update - برای دیدن نسخه نصب شده فعلی (تا زمانی که IPFS را نصب نکنیم، هیچ کدام نخواهد بود). ipfs-update آخرین نصب - آخرین نسخه IPFS را نصب کنید. بهترتیب بهجای آخرین، میتوانید هر نسخه دلخواه را از لیست نسخههای موجود مشخص کنید.
نصب ipfs
ipfs-update install latest
چک کردن
ipfs --version
به طور مستقیم با نصب به طور کلی همه چیز.
IPFS را راه اندازی کنید
مقداردهی اولیه
ابتدا باید مقداردهی اولیه را انجام دهید.
ipfs init
در پاسخ، چیزی شبیه به این دریافت خواهید کرد:
ipfs init
initializing IPFS node at /home/USERNAME/.ipfs
generating 2048-bit RSA keypair...done
peer identity: QmeCWX1DD7HnXXXXXXXXXXXXXXXXXXXXXXXXxxx
to get started, enter:
ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme
Hello and Welcome to IPFS!
██╗██████╗ ███████╗███████╗
██║██╔══██╗██╔════╝██╔════╝
██║██████╔╝█████╗ ███████╗
██║██╔═══╝ ██╔══╝ ╚════██║
██║██║ ██║ ███████║
╚═╝╚═╝ ╚═╝ ╚══════╝
If you're seeing this, you have successfully installed
IPFS and are now interfacing with the ipfs merkledag!
-------------------------------------------------------
| Warning: |
| This is alpha software. Use at your own discretion! |
| Much is missing or lacking polish. There are bugs. |
| Not yet secure. Read the security notes for more. |
-------------------------------------------------------
Check out some of the other files in this directory:
./about
./help
./quick-start <-- usage examples
./readme <-- this file
./security-notes
از اینجا، به نظر من، جالب شروع می شود. بچه ها در مرحله نصب در حال حاضر شروع به استفاده از فناوری های خود کرده اند. هش پیشنهادی QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv به طور خاص برای شما ایجاد نشده است، اما در نسخه دوخته شده است. یعنی قبل از انتشار یک متن خوشامدگویی تهیه کردند و در IPFS ریختند و آدرس را به نصب کننده اضافه کردند. به نظر من خیلی باحاله و این فایل (به طور دقیق تر، کل پوشه) اکنون نه تنها به صورت محلی، بلکه در دروازه رسمی نیز قابل مشاهده است. ipfs.io/ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv. در عین حال می توانید مطمئن باشید که محتویات پوشه به هیچ وجه تغییر نکرده است، زیرا اگر تغییر می کرد، هش نیز تغییر می کرد.
به هر حال، در این مورد، IPFS شباهت هایی با سرور کنترل نسخه دارد. اگر در فایل های منبع پوشه تغییراتی ایجاد کنید و دوباره پوشه را در IPFS بریزید، آدرس جدیدی دریافت می کند. در عین حال، پوشه قدیمی به همین شکل به جایی نمی رسد و در آدرس قبلی خود در دسترس خواهد بود.
راه اندازی مستقیم
ipfs daemon
شما باید پاسخی مانند این دریافت کنید:
ipfs daemon
Initializing daemon...
go-ipfs version: 0.4.22-
Repo version: 7
System version: amd64/linux
Golang version: go1.12.7
Swarm listening on /ip4/x.x.x.x/tcp/4001
Swarm listening on /ip4/127.0.0.1/tcp/4001
Swarm listening on /ip6/::1/tcp/4001
Swarm listening on /p2p-circuit
Swarm announcing /ip4/127.0.0.1/tcp/4001
Swarm announcing /ip6/::1/tcp/4001
API server listening on /ip4/127.0.0.1/tcp/5001
WebUI: http://127.0.0.1:5001/webui
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Daemon is ready
باز کردن درهای اینترنت
به این دو خط توجه کنید:
WebUI: http://127.0.0.1:5001/webui
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
اکنون، اگر IPFS را به صورت محلی نصب کرده باشید، به رابط های IPFS در آدرس های محلی دسترسی خواهید داشت و همه چیز در دسترس شما خواهد بود (به عنوان مثال، localhost را:5001/webui/). اما وقتی روی سرور خارجی نصب می شود، به طور پیش فرض، دروازه ها به روی اینترنت بسته می شوند. دروازه دو:
تا اینجا هر دو پورت (5001 و 8080) را می توان برای آزمایش باز کرد، اما در سرور رزمی البته پورت 5001 باید با فایروال بسته شود. همچنین پورت 4001 وجود دارد که به آن نیاز است تا سایر همتایان بتوانند شما را پیدا کنند. باید برای درخواست های بیرونی باز گذاشته شود.
~/.ipfs/config را برای ویرایش باز کنید و این خطوط را در آن پیدا کنید:
127.0.0.1 را به ip سرور خود تغییر دهید و فایل را ذخیره کنید و سپس ipfs را مجددا راه اندازی کنید (با Ctrl+C دستور اجرا را متوقف کرده و دوباره شروع کنید).
باید بدست آورد
...
WebUI: http://ip_вашего_сервера:5001/webui
Gateway (readonly) server listening on /ip4/ip_вашего_сервера/tcp/8080
اگر webui برای شما کار میکند، تنظیمات IPFS را میتوان مستقیماً در آن تغییر داد، از جمله آمار مشاهده، اما در زیر گزینههای پیکربندی را مستقیماً از طریق فایل پیکربندی در نظر میگیرم، که معمولاً مهم نیست. فقط بهتر است دقیقاً به یاد داشته باشید که کانفیگ کجاست و با آن چه باید کرد، در غیر این صورت اگر وب فیس کار نمی کند، کار دشوارتر می شود.
راه اندازی یک رابط وب برای کار با سرور شما
اینجا اولین دام است که حدود سه ساعت طول کشید.
اگر IPFS را بر روی یک سرور خارجی نصب کرده اید، اما IPFS را به صورت محلی نصب یا اجرا نکرده اید، پس از رفتن به /webui در رابط وب، باید یک خطای اتصال را مشاهده کنید:
واقعیت این است که webui به نظر من بسیار مبهم کار می کند. ابتدا سعی می کند به API سروری که رابط باز است وصل شود (البته بر اساس آدرس موجود در مرورگر). و اگر در آنجا کار نکرد، سعی می کند به دروازه محلی متصل شود. و اگر IPFS دارید که به صورت محلی اجرا می شود، وبوی برای شما خوب کار می کند، فقط شما با IPFS محلی کار خواهید کرد و نه خارجی، اگرچه شما webui را روی یک سرور خارجی باز کردید. سپس فایلها را آپلود میکنید، اما به دلایلی آنها را در سرور خارجی نمیبینید…
و اگر به صورت محلی اجرا نمی شود، با خطای اتصال مواجه می شویم. در مورد ما، خطا به احتمال زیاد به دلیل CORS است، که توسط webui نیز نشان داده می شود، و پیشنهاد اضافه کردن یک پیکربندی را می دهد.
ما ipfs را مجددا راه اندازی می کنیم و می بینیم که webui با موفقیت وصل شده است (در هر صورت، اگر دروازه های درخواست های خارج را باز کنید، همانطور که در بالا توضیح داده شد، باید انجام شود).
اکنون می توانید پوشه ها و فایل ها را مستقیماً از طریق رابط وب آپلود کنید و همچنین پوشه های خود را ایجاد کنید.
نصب فایل سیستم FUSE
در اینجا یک ویژگی بسیار جالب وجود دارد.
فایل ها (و همچنین پوشه ها) را می توانیم نه تنها از طریق رابط وب، بلکه مستقیماً در ترمینال اضافه کنیم.
ipfs add test -r
added QmfYuz2gegRZNkDUDVLNa5DXzKmxxxxxxxxxx test/test.txt
added QmbnzgRVAP4fL814h5mQttyqk1aURxxxxxxxxxxxx test
آخرین هش، هش پوشه ریشه است.
با استفاده از این هش، میتوانیم پوشهای را روی هر گره ipfs باز کنیم (که میتواند گره ما را پیدا کند و محتویات را دریافت کند)، میتوانیم در رابط وب در پورت 5001 یا 8080 یا میتوانیم به صورت محلی از طریق ipfs.
ipfs ls QmbnzgRVAP4fL814h5mQttyqk1aUxxxxxxxxxxxxx
QmfYuz2gegRZNkDUDVLNa5DXzKmKVxxxxxxxxxxxxxx 10 test.txt
اما همچنان می توانید آن را مانند یک پوشه معمولی باز کنید.
بیایید دو پوشه در ریشه ایجاد کنیم و حقوق آنها را به کاربر خود اعطا کنیم.
می توانید پوشه ها را در مکان های دیگر ایجاد کنید و مسیر آنها را از طریق پارامترهای شبح ipfs -mount -mount-ipfs /ipfs_path -mount-ipns /ipns_path مشخص کنید.
اکنون خواندن از این پوشه تا حدودی غیرعادی است.
ls -la /ipfs
ls: reading directory '/ipfs': Operation not permitted
total 0
یعنی دسترسی مستقیم به ریشه این پوشه وجود ندارد. اما با دانستن هش می توانید محتوا را دریافت کنید.
ls -la /ipfs/QmbnzgRVAP4fL814h5mQttyqxxxxxxxxxxxxxxxxx
total 0
-r--r--r-- 1 root root 10 Aug 31 07:03 test.txt
cat /ipfs/QmbnzgRVAP4fL814h5mQttyqxxxxxxxxxxxxxxxxx/test.txt
test
test
در همان زمان، حتی تکمیل خودکار در داخل پوشه زمانی که مسیر مشخص شده است، کار می کند.
همانطور که در بالا گفتم، چنین نصبی ظرافت هایی دارد: به طور پیش فرض، پوشه های FUSE نصب شده فقط برای کاربر فعلی در دسترس هستند (حتی root نمی تواند از چنین پوشه ای بخواند، نه اینکه به سایر کاربران سیستم اشاره کنیم). اگر میخواهید این پوشهها را برای کاربران دیگر در دسترس قرار دهید، در تنظیمات باید «FuseAllowOther»: false را به «FuseAllowOther»: true تغییر دهید. اما این همه ماجرا نیست. اگر IPFS را به صورت روت اجرا کنید، همه چیز درست است. و اگر از طرف یک کاربر معمولی (حتی sudo)، با خطا مواجه خواهید شد
mount helper error: fusermount: option allow_other only allowed if 'user_allow_other' is set in /etc/fuse.conf
در این مورد، باید /etc/fuse.conf را با حذف نظر خط #user_allow_other ویرایش کنید.
پس از آن، ipfs را مجددا راه اندازی کنید.
مشکلات شناخته شده با FUSE
این مشکل بیش از یک بار مشاهده شده است که پس از راه اندازی مجدد ipfs با نصب (و شاید در موارد دیگر)، نقاط mount /ipfs و /ipns در دسترس نیستند. دسترسی به آنها وجود ندارد و ls -la /ipfs نشان می دهد ???? در فهرست حقوق
این راه حل را پیدا کردم:
fusermount -z -u /ipfs
fusermount -z -u /ipns
سپس ipfs را ریستارت کنید.
اضافه کردن یک سرویس
البته اجرای در ترمینال فقط برای تست های اولیه مناسب است. در حالت مبارزه، دیمون باید به طور خودکار در هنگام راه اندازی سیستم شروع شود.
از طرف sudo، فایل /etc/systemd/system/ipfs.service را ایجاد کرده و در آن بنویسید:
USERNAME، البته، باید با کاربر شما جایگزین شود (و شاید مسیر کامل برنامه ipfs برای شما متفاوت باشد (باید مسیر کامل را مشخص کنید)).
ما سرویس را فعال می کنیم.
sudo systemctl enable ipfs.service
سرویس را شروع می کنیم.
sudo service ipfs start
بررسی وضعیت سرویس
sudo service ipfs status
برای خلوص آزمایش، امکان راه اندازی مجدد سرور در آینده برای بررسی اینکه آیا ipfs به طور خودکار با موفقیت شروع می شود، امکان پذیر خواهد بود.
اضافه کردن جشن های شناخته شده به ما
وضعیتی را در نظر بگیرید که در آن گره های IPFS هم روی یک سرور خارجی و هم به صورت محلی نصب شده اند. در یک سرور خارجی، مقداری فایل اضافه می کنیم و سعی می کنیم آن را از طریق IPFS به صورت محلی توسط CID دریافت کنیم. چه اتفاقی خواهد افتاد؟ البته سرور محلی به احتمال زیاد چیزی در مورد سرور خارجی ما نمیداند و به سادگی سعی میکند با «پرسیدن» از تمام همتایان IPFS موجود (که قبلاً موفق به «آشنایی» با آنها شده است، فایل را توسط CID پیدا کند. آنها نیز به نوبه خود از دیگران خواهند پرسید. و به همین ترتیب تا زمانی که فایل پیدا شود. در واقع، زمانی که سعی می کنیم فایل را از طریق دروازه رسمی دریافت کنیم، همین اتفاق می افتد ipfs.io. اگر خوش شانس باشید، فایل در عرض چند ثانیه پیدا می شود. و در غیر این صورت حتی در عرض چند دقیقه نیز پیدا نمی شود که به شدت بر راحتی کار تأثیر می گذارد. اما ما می دانیم که این فایل ابتدا در کجا ظاهر می شود. پس چرا ما بلافاصله به سرور محلی خود نمی گوییم "اول آنجا را جستجو کن"؟ ظاهراً این کار قابل انجام است.
1. ما به سرور راه دور می رویم و به ~/.ipfs/config نگاه می کنیم
2. وضعیت ipfs سرویس sudo را اجرا کنید و به دنبال ورودی های Swarm در آن بگردید، به عنوان مثال:
Swarm announcing /ip4/ip_вашего_сервера/tcp/4001
3. از این آدرس کلی فرم "/ip4/ip_your_server/tcp/4001/ipfs/$PeerID" را اضافه می کنیم.
4. برای اطمینان، سعی می کنیم این آدرس را از طریق webui محلی خود به همتایان اضافه کنیم.
5. اگر همه چیز درست است، پیکربندی محلی ~ / .ipfs / config را باز کنید، "Bootstrap" را در آن پیدا کنید: [...
و ابتدا آدرس دریافتی را به آرایه اضافه کنید.
IPFS را مجددا راه اندازی کنید.
حالا بیایید فایل را به سرور خارجی اضافه کنیم و سعی کنیم آن را در سرور محلی درخواست کنیم. باید سریع پرواز کرد
اما این عملکرد هنوز پایدار نیست. تا جایی که من متوجه شدم، حتی اگر آدرس یک همتا را در بوت استرپ مشخص کنیم، ipfs لیست اتصالات فعال با همتایان را در حین کار تغییر می دهد. به هر حال بحث در این مورد و آرزوها در خصوص امکان تعیین اعیاد دائمی در جریان است اینجا و به نظر می رسد فرض شده مقداری قابلیت به آن اضافه کنید [ایمیل محافظت شده]+
لیست همتایان فعلی را می توان هم در webui و هم در ترمینال مشاهده کرد.
ipfs swarm peers
و اینجا و آنجا می توانید جشن خود را به صورت دستی اضافه کنید.
تا زمانی که این عملکرد بهبود نیافته است، میتوانید ابزاری بنویسید تا اتصال به همتای مورد نظر را بررسی کنید و در غیر این صورت، اتصال را اضافه کنید.
استدلال
در میان کسانی که قبلاً با IPFS آشنا هستند، هم استدلال موافق و هم علیه IPFS وجود دارد. اصولا دیروز بحث و از من خواست تا دوباره به IPFS بپردازم. و با توجه به بحثی که در بالا ذکر شد: نمی توانم بگویم که به شدت با استدلال کسانی که صحبت کردند مخالفم (فقط با این واقعیت که یک و نیم برنامه نویس از IPFS استفاده می کنند مخالفم). به طور کلی، هر دو در نوع خود درست هستند (مخصوصا نظر در مورد چک شما را وادار به فکر می کند). اما اگر ارزیابی اخلاقی و قانونی را کنار بگذاریم، چه کسی ارزیابی فنی از این فناوری خواهد کرد؟ من شخصاً نوعی احساس درونی دارم که "این کار باید بدون ابهام انجام شود، چشم انداز خاصی دارد." اما چرا دقیقا، هیچ فرمول مشخصی وجود ندارد. مانند، اگر به ابزارهای متمرکز موجود نگاه کنید، از بسیاری جهات آنها بسیار جلوتر هستند (ثبات، سرعت، مدیریت و غیره). با این وجود، من فکری دارم که به نظر منطقی است و بدون چنین سیستم های غیرمتمرکز به سختی قابل اجراست. البته، من خیلی سخت در حال چرخش هستم، اما آن را اینگونه بیان می کنم: اصل انتشار اطلاعات در اینترنت باید تغییر کند.
بگذار توضیح بدهم. اگر در مورد آن فکر کنید، اکنون ما اطلاعاتی داریم که بر اساس این اصل توزیع شده است: "امیدوارم کسی که آن را به او دادم از آن محافظت کند و توسط کسانی که برای آنها در نظر گرفته نشده بود گم نشود یا دریافت نشود." به عنوان مثال، در نظر گرفتن خدمات پستی مختلف، فضای ذخیرهسازی ابری و غیره آسان است. و در نهایت به چه چیزی می رسیم؟ در هاب هابر امنیت اطلاعات در خط اول قرار دارد و تقریبا هر روز اخباری مبنی بر نشت جهانی دیگری دریافت می کنیم. در اصل، همه چیزهای جالب در <irony> فوق العاده فهرست شده است مقاله تابستان تقریباً تمام شده است. تقریبا هیچ داده افشا نشده ای باقی نمانده است. یعنی غول های اصلی اینترنت در حال بزرگتر شدن هستند، اطلاعات بیشتر و بیشتری را جمع می کنند و این گونه نشت ها نوعی انفجار اتمی اطلاعاتی است. این هرگز قبلاً اتفاق نیفتاده است و دوباره اینجاست. در عین حال، اگرچه بسیاری می دانند که خطراتی وجود دارد، آنها همچنان به اطلاعات خود به شرکت های شخص ثالث اعتماد می کنند. اولاً جایگزین زیادی وجود ندارد و ثانیاً آنها قول می دهند که همه سوراخ ها را وصله کرده اند و دیگر این اتفاق نخواهد افتاد.
چه گزینه ای را می بینم؟ به نظر من در ابتدا داده ها باید به صورت باز توزیع شوند. اما باز بودن در این مورد به این معنی نیست که همه چیز باید آسان باشد. من در مورد باز بودن ذخیره سازی و توزیع صحبت می کنم، اما نه باز بودن کامل در خواندن. من فرض می کنم که اطلاعات باید با کلیدهای عمومی توزیع شود. از این گذشته ، اصل کلیدهای عمومی / خصوصی در حال حاضر قدیمی است ، تقریباً مانند اینترنت. اگر اطلاعات محرمانه نباشد و برای طیف وسیعی در نظر گرفته شده باشد، بلافاصله با یک کلید عمومی منتشر می شود (اما هنوز به صورت رمزگذاری شده، فقط هر کسی می تواند آن را با کلید موجود رمزگشایی کند). و اگر نه، پس بدون کلید عمومی گذاشته می شود و خود کلید به چیزی که باید به این اطلاعات دسترسی داشته باشد منتقل می شود. در عین حال، کسی که باید آن را بخواند باید فقط یک کلید داشته باشد، و از کجا این اطلاعات را دریافت کند، او واقعاً نباید اوج بگیرد - او فقط آن را از شبکه بیرون می کشد (این اصل جدید توزیع بر اساس محتوا است، نه بر اساس آدرس).
بنابراین، برای یک حمله انبوه، مهاجمان باید تعداد زیادی کلید خصوصی را به دست آورند و بعید است که این کار در یک مکان انجام شود. این کار، همانطور که من می بینم، دشوارتر از هک کردن یک سرویس خاص است.
و در اینجا یک مشکل دیگر بسته شده است: تأیید تألیف. اکنون در اینترنت می توانید نقل قول های بسیاری را که توسط دوستان ما نوشته شده است بیابید. اما ضمانت این که اینها بوده اند که آنها را نوشته اند کجاست؟ حال، اگر هر رکوردی با امضای دیجیتال همراه می شد، کار بسیار آسان تر بود. و مهم نیست که این اطلاعات کجاست، نکته اصلی امضا است که البته جعل آن دشوار است.
و جالب اینجاست: IPFS در حال حاضر ابزارهای رمزگذاری را حمل می کند (در نهایت، بر اساس فناوری بلاک چین ساخته شده است). کلید خصوصی بلافاصله در پیکربندی مشخص می شود.
من یک متخصص امنیت نیستم و نمی توانم دقیقاً بدانم چگونه از آن به درستی استفاده کنم، اما به نظر من این کلیدها در سطح تبادل بین گره های IPFS استفاده می شوند. و همچنین js-ipfs و پروژه های نمونه مانند مدار-dbکه روی آن کار می کند orbit.chat. یعنی از نظر تئوری، هر دستگاه (موبایل و نه تنها) می تواند به راحتی به ماشین های رمزگشایی-رمزگشایی خود مجهز شود. در این صورت باقی می ماند که همه مراقب حفظ کلیدهای خصوصی خود باشند و هرکسی مسئول امنیت خود خواهد بود و گروگان عامل انسانی دیگری در غول اینترنتی فوق العاده محبوب نخواهد بود.
فقط کاربران ثبت نام شده می توانند در نظرسنجی شرکت کنند. ورود، لطفا.
آیا قبلا در مورد IPFS شنیده اید؟
من هرگز در مورد IPFS نشنیده ام، اما جالب به نظر می رسد
نشنیده ام و نمی خواهم بشنوم
شنیده شد اما علاقه ای نداشت
شنیدم، اما متوجه نشدم، اما حالا جالب به نظر می رسد
من مدت زیادی است که به طور فعال از IPFS استفاده می کنم.