কম্পিউটার টিউটোরিয়াল

প্রোডাকশনে RubyGems.org-এ নির্ভর করার চেয়ে স্বয়ং হোস্ট করা Ruby Gems কেন আরও নিরাপদ

একটি স্ক্রিড + একটি স্ক্রিনকাস্ট দেখানো হচ্ছে কীভাবে আপনার নিজস্ব জেমস হোস্ট করবেন

এটি পরিষ্কার করে নেওয়া যাক: জেমস চমৎকার, এবং RubyGems.org একটি চমৎকার সার্ভিস।

...কিন্তু সম্প্রতি আমি প্রতিবার একটি নতুন জেম অ্যাপে যোগ করার সময় বিচ্ছিন্ন ফিল করছি। আমি যত বেশি এটা নিয়ে চিন্তা করি, তত বেশি লাগছে যে আমরা জেমস ব্যবহার করি সেটি শুধু ফ্লোড নয়। এটি একটি দুর্যোগ যা ঘটতে অপেক্ষা করছে।

সোশ্যাল ইঞ্জিনিয়ারিং FTW

কয়েক দিন আগে RubyNation-এ, Ben Smith একটি চমৎকার টক দিয়েছিলেন Hacking With Gems নামে।

জেমস ওপর হ্যাকিং না, বরং জেমসকে একটি উপায় হিসেবে ব্যবহার করা হ্যাক করার...একটি অ্যাট্যাক ভেক্টর হিসেবে।

তিনি একটি কুল এক্সপেরিমেন্ট করলেন।

আপনি যদি কনফারেন্সে থাকেন, আপনি সম্ভবত/github স্টিকার এবং অন্যান্য স্ব্যাগের পাশে সুন্দরভাবে প্রিন্টেড কার্ডের স্ট্যাক দেখেছেন।

কার্ডে একটা কথা লেখা ছিল: gem install rubynation। এবং প্রায় ১০% অংশগ্রহণকারীরা সেটি করল।

প্রোডাকশনে RubyGems.org-এ নির্ভর করার চেয়ে স্বয়ং হোস্ট করা Ruby Gems কেন আরও নিরাপদ

জেমটি যা করল না

জেমটি কিছু উপকারী জিনিস করল। কিন্তু যা করল না সেটি আরও আকর্ষণীয়।

এটি করল না:

  • আপনার gemcutter dotfile থেকে RubyGems.org ক্রেডেনশিয়াল চুরি করা

  • প্লেইনটেক্সট পাসওয়ার্ড ইন্টারসেপ্ট করা এবং আপনার rails /public ডিরেক্টরিতে স্টোর করা

  • আপনার সিস্টেমে একটি গোপন SSH একাউন্ট যোগ করা

কিন্তু এটি করতে পারত। Ben-কে জিজ্ঞাসা করুন আপনি যদি বিশ্বাস না করেন।

এটি আপককে ভয় পেতে উচিত

আমাকে একবার আর এটা বলতে দিন, যাতে এটি মনেও পড়ে যায়।

প্রায় ২৫ জন - কম্পিউটার প্রোগ্রামার - ম্যানিপুলেটেড হয়ে যেন তাদের ডেভেলপমেন্ট মেশিনে আربিট্রারি কোড রান করালেন। কয়েকজন তো রুট হিসেবে রান করল।

আমি এই মানুষদের টার্গেট করার চেষ্টা করছি না। এটি Ruby কমিউনিটিতে নর্ম।

কেন এটি ঘটল?

লোকেরা জেমসের ওপর আস্থা রাখে।

  • কারণ সেগুলো সাধারণত কাজ করে।

  • কারণ Rails একটি জেম।

  • কারণ Aaron Patterson, Steve Klabnik, এবং Yehuda Katz যেন সুপরিচিত লোকেরা সেগুলো মেইনটেইন করে।

কিন্তু এটি একটি সমস্যা যখন আপনি অপরিচিত লোকের ওপর আস্থা রাখতে শুরু করেন।

এটি একটি সমস্যা যখন আপনি gem install rubynation টাইপ করেন ততটুকু হিচকিচাহট ছাড়া যতটুকু হিচকিচাহট আপনি gem install rails টাইপ করার সময় করেন।

এবং ইমানদার হতে দোগুলোর মধ্যে। কে এই কাজটি কমপক্ষে একবার করিনি? আমরা অলস এবং জেমস সহজ।

RubyGems.org দোষী নয়

এটি শুধু একদম সহজ করে দিয়েছে ভুল কাজটি করার জন্য। আপনার সার্ভারগুলোর ওপর আনট্রাস্টেড কোড রান করার জন্য। আপনার সার্ভারগুলোর ওপর চলে যেকোনো কোডের চেঞ্জস সম্পর্কে অনিবার্ণ থাকার জন্য।

সেই কারণেই আমি প্রস্তাব করছি যে আমরা সবাই প্রোডাকশনে এটি ব্যবহার করা বন্ধ করি।

সমাধান

সিগনেচারই যথেষ্ট নয়

সবাই তাদের জেমস সাইন করা উচিত। কিন্তু সিগনেচারই যথেষ্ট নয়। একটি সিগনেচার শুধু পাবলিশারের আইডেন্টিটি ভেরিফাই করে। এটি আপনাকে না বলে তারা ভালো, খারাপ, অথবা চায়োটিক নিউট্রাল।

কারো রেসকিউতে আসা নেই

একটি পরিপূর্ণ বিশ্বে, আমাদের একটি ট্রাস্টেড অর্গানাইজেশন থাকত যেটি জেমসের ভার্সন ডিস্ট্রিবিউট করত যেগুলো ভালো হওয়া জানা।

যদি এটি আপককে খারাপ লাগে, তবে চিন্তা করুন Debian-এর মত অর্গানাইজেশন কীভাবে Linux-এ কিছু একই জিনিস করে। যদি এটিও খারাপ লাগে....তাহলে আমি সম্মানিত ফিল করছি আপনি আমার ব্লগ পড়ছেন, Mr. Stallman।

কেন আমি বলছি একটি পরিপূর্ণ বিশ্বে? যাইহোক, কারণ অন্যান্য অল্টার্নেটিভ খুব কাজ, এবং আমি সেগুলো করার চাই না।

...আপনাদের মধ্যে কেউ YC hopefuls এই কাজটি করুন প্লিজ?

একমাত্র রিয়েল অপশন: DIY

দুর্ভাগ্যবশত আমাকে এই গন্ধাচ্ছন্ন পুরনো রিয়েল ওয়ার্ল্ডে বাস করতে হচ্ছে। আপনার জেমসের ওপার টোটাল কন্ট্রোল পাওয়ার একমাত্র রিয়েল উপায় হচ্ছে।

  • ট্রিচারির জন্য কোড রিভিউ করুন

  • জেমস নিজে হোস্ট করুন

শুক্রভাগ্যে, নিজে জেমস হোস্ট করা সহজ। আমি আপনাকে দেখাবো কীভাবে।

আপনার নিজস্ব জেমস হোস্ট করার পদ্ধতি

প্রোডাকশনে RubyGems.org-এ নির্ভর করার চেয়ে স্বয়ং হোস্ট করা Ruby Gems কেন আরও নিরাপদ

এটি ম্যাজিক নয়

একটি জেম "সার্ভার" শুধু একটি বन्च ফ্ল্যাট ফাইল ওয়েবে। আপনি সেগুলো কোথাও হোস্ট করতে পারেন, এমনকি S3 বা Dropbox-এ।

একটি Rails অ্যাপ তৈরি করুন একটি টেস্টবেঞ্চ হিসেবে

এখানে Rails ব্যবহার করার একমাত্র কারণ হচ্ছে এটি আমাদের একটি প্রি-মেড Gemfile দেয় খেলার জন্য। এই অ্যাপ কিছুই করে না।

`$ rails new myapp
$ cd myapp `

.gem ফাইলগুলো ডাউনলোড করুন

এই bundler কমান্ড Gemfile.lock-এ রেফারেন্স করা সব .gem ফাইল ডাউনলোড করবে এবং সেগুলো /vendor/cache-এ রাখবে

`$ bundle package
$ mkdir /tmp/gem_server
$ mv vendor/cache/ /tmp/gem_server/gems `

'সার্ভার' ফাইলগুলো জেনারেট করুন

.gem ফাইল자들의 একটি ডিরেক্টরি নেওয়া এবং সেগুলো সার্ভ করার জন্য রেডি করতে, আপনি gem generate_index রান করুন।

`$ gem generate_index -d /tmp/gem_server/ `

সব কিছু অনলাইনে দিন

এখন আমি প্রোডাকশনে এই পদ্ধতি রিকমেন্ড করব না, কিন্তু...

`$ mv /tmp/gem_server /Users/snhorne/Dropbox/Public/ `

আপনার Gemfile এডিট করুন এবং bundle update করুন

"source" লাইন আপডেট করুন আপনার নতুন হোস্টে পয়েন্ট করতে RubyGems-এর বদলে

`# Gemfile
source 'https://dl.dropboxusercontent.com/u/12345/gem_server'
...
gem 'rails', '3.2.13' `

Cool! এটি আমার Dropbox থেকে জেমস পুল করছে।

`$ bundle update
Fetching gem metadata from https://dl.dropboxusercontent.com/u/12345/gem_server/.
Fetching full source index from https://dl.dropboxusercontent.com/u/12345/gem_server/
Using rake (10.1.0)
Using i18n (0.6.1)
Using multi_json (1.7.7)
Using activesupport (3.2.13) `

বোনাস: প্রাইভেট জেমস HTTP বেসিক অথেনটিকেশন দিয়ে প্রোটেক্ট করা যাবে

শুধু আপনার gemfile কে এরকম দেখাতে হবে:

`# Gemfile
source 'https://username:password@example.com/' `

বিকল্পসমূহ

এই পদ্ধতি আপনার জন্য কাজ না করলে? কিছু ফ্রি এবং কমার্শিয়াল জেম হোস্টিং সমাধান আছে যা আপনাকে আরও কিছু বেল এবং হুইসেল দেয়।

Geminabox একটি ওপেন সোর্স অ্যাপ্লিকেশন যা কমান্ড লাইন কাজের অনেক অংশ এলিমিনেট করে।

Gemfury একটি প্রাইভেট জেম হোস্টিং কোম্পানি। আমি তাদের ব্যবহার করেছি অতীতে কিছু প্রоприয়েটারি জেম হোস্ট করতে একটি ক্লায়েন্টের জন্য। এটি সেট আপ করা সহজ ছিল এবং কখনো কোনো সমস্যা হয়নি।

  1. Matplotlib-এ নির্দিষ্ট তারিখের বিপরীতে ডেটা প্লট করার পদ্ধতি

  2. ViewComponent মাস্টারিং: রিয়িউজেবল রেলস ভিউ কম্পোনেন্ট বিল্ড করার প্র্যাক্টিক্যাল গাইড

  3. রুবি Case স্টেটমেন্ট মাস্টার করুন: বহুমুখী ব্যবহার এবং প্র্যাকটিক্যাল উদাহরণ

  4. ইনবক্স জিরো পুনরাবলোকন: কি এটি সত্যিকারের প্রোডাক্টিভিটি বাড়ায়?