জবাবদিহিত সহ অ্যাটোরমোভ চালানো


23

আমি জবাবদিহি করে ইসি 2 সার্ভারের একটি ঝাঁক বজায় রাখছি। সার্ভারগুলি নিয়মিত আপডেট এবং অ্যাপটি মডিউলটি ব্যবহার করে আপগ্রেড করা হয়

আমি যখন ম্যানুয়ালি একটি সার্ভার আপগ্রেড করার চেষ্টা করেছি তখন আমি নিম্নলিখিত বার্তাটি পেয়েছি:

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages were automatically installed and are no longer required:
  linux-headers-3.13.0-29 linux-headers-3.13.0-29-generic
  linux-headers-3.13.0-32 linux-headers-3.13.0-32-generic
  linux-image-3.13.0-29-generic linux-image-3.13.0-32-generic
Use 'apt-get autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

sudo apt-get autoremoveজবাবদিহি করার সাথে চালানোর উপায় কি আছে ?


1
আপনি সর্বদা commandএকটি কাঁচা শেল কমান্ড করতে মডিউলটি ব্যবহার করতে পারেন ।
ceejayoz

উত্তর:


26

সমর্থন apt-getবিকল্প --auto-removeএখন Ansible এর মধ্যে নির্মিত হয় apt(বিকল্প autoremoveসংস্করণের হিসাবে) 2.1 অফিসিয়াল ডকুমেন্টেশন এ http://docs.ansible.com/ansible/apt_module.html

- name: Remove dependencies that are no longer required
  apt:
    autoremove: yes

একত্রীকরণ ঘটেছে এখানে

নোট যেটি autoclean২.৪ হিসাবে উপলব্ধ


আপনি দয়া করে একটি রেফারেন্স লিঙ্ক যুক্ত করতে পারেন?
আদম মতান

@ অ্যাডাম্যাটান ডক্সের লিঙ্ক সহ উত্তর আপডেট করেছেন।
oalders

1
আপনি যদি এখানে পরীক্ষা করে দেখেন যে "রাষ্ট্র" বিকল্পের সাথে "অটোমোভ" একটি বাগ হিসাবে বিবেচিত হবে। উত্তর দেবী টিমের সংজ্ঞা দেওয়া দরকার যদি "অটোরেমোভ" কেবল উত্তরযোগ্য ২.২ এর জন্য একটি বিকল্প বা একটি সম্পূর্ণ অপারেশন হয়ে থাকে (আমি আশা করি ...)
ইয়োনসি সলিস

@ ইউনসোলিস কেউ এই উত্তরটিকে সম্পাদনার মাধ্যমে হাইজ্যাক করেছে। আমি এটিকে তার আসল অবস্থায় ফিরিয়ে দিয়েছি।
oalders

1
@ ফ্লিক্পফুলি ডক্স অনুসারে আপনার কোনও প্যাকেজের নাম না দিয়ে চালানো উচিত। আমি এই প্রতিফলিত করতে আমার উত্তর আপডেট করেছি।
ওল্ডার্স

14

এই সরলীকৃত পদ্ধতিতে কেবল একটি কাজ প্রয়োজন

  - name: Autoremove unused packages
    command: apt-get -y autoremove
    register: autoremove_output
    changed_when: "'The following packages will be REMOVED' in autoremove_output.stdout"

এটি সম্ভবত গ্রহণযোগ্য উত্তর হওয়া উচিত।
ab77

9

আপনি এটি command(অনির্ধারিত) দিয়ে করতে পারেন :

  - name: Check if anything needs autoremoving
    shell: apt-get -y --dry-run autoremove | grep -q "0 to remove"
    register: check_autoremove
    ignore_errors: True
    changed_when: False
    always_run: True

  - name: Autoremove unused packages
    command: apt-get -y autoremove
    when: "check_autoremove.rc != 0"

তবে আমি মনে করি এটি autoremoveস্বয়ংক্রিয়ভাবে চালানো ঝুঁকিপূর্ণ হতে পারে । আপনি অতীতে সিস্টেম প্রশাসনের ত্রুটিগুলি তৈরি করার কারণে (এটি আপনার উত্তরযোগ্য কোডে থাকতে পারে), এটি সম্ভবত সম্ভব যে কোনও প্যাকেজটি প্রয়োজন হয় যে কোনও সময় স্বতঃরীক্ষণযোগ্য হিসাবে ভুলভাবে সনাক্ত করা যেতে পারে এবং এটি সার্ভারকে কাজ করা থেকে বিরত করতে পারে। অন্যদিকে, সিস্টেমে অব্যবহৃত প্যাকেজগুলি রেখে যাওয়া কোনও বড় বিষয় নয় এবং আপনি যদি সার্ভারের সেটআপে কোনও বড় পরিবর্তন না করেন তবে এটি খুব সাধারণ বিষয় নয়।

অতএব, আমি কোনও মানুষের কাছ থেকে নিশ্চিত না হয়ে অটোমোরওয়্যার প্যাকেজগুলি থেকে দূরে থাকব।


জবাবগুলি প্রয়োজনীয়ভাবে প্যাকেজগুলিকে 'ম্যানুয়াল' হিসাবে চিহ্নিত করে না, আপনি এপটি মডিউলটি ব্যবহার করে ইনস্টল করে থাকলেও। সুতরাং 'অটোরেমোভ' ভুল প্যাকেজগুলি সরিয়ে ফেলতে পারে। দ্রুত ফিক্স: ব্যবহার করুনapt-mark manual <pkg>
উইলিয়াম

1
উবুন্টুতে, আপনি যদি নিয়মিত অটোমোভ না করেন তবে আপনার / বুটটি পূর্ণ না হওয়া পর্যন্ত পূরণ হতে পারে! বেশিরভাগ স্বতঃপরিবর্তন কেবল পুরানো অব্যবহৃত কার্নেল সরিয়ে ফেলেছে। কারণ, এটি নিয়মিত চেক প্রয়োজন, এটি স্বয়ংক্রিয় করা উচিত। :-) ফেডোরা / আরএইচএল-তে আপনি কেবলমাত্র নির্দিষ্ট সংখ্যক প্যাকেজ রাখার জন্য yum / dnf নির্দেশ দিতে পারেন (যেমন 3 কার্নেল সংস্করণ), যাতে আপনার কখনও সমস্যা হয় না।
হিউজেনস

6

এন্টোনিস ক্রিস্টোফাইড সরবরাহিত সমাধানের ক্ষেত্রে এটি একটি ভিন্নতা। এটি পরীক্ষিত এবং আমার জন্য কাজ করে। আমি চেক কমান্ডে অগ্রাহ্য_অর্থগুলি ব্যবহার করা এড়িয়ে চললাম। অন্যথায় এটি সাধারণত একই পদ্ধতির গ্রহণ করে।

- name: Check if packages need to be autoremoved
  command: apt-get --dry-run autoremove
  register: check_autoremove
  changed_when: False
- name: Autoremove unused packages
  command: apt-get -y autoremove
  when: "'packages will be REMOVED' in check_autoremove.stdout"

--dry-runপ্রথমটির কারণ কী ? apt-get -y autoremoveএকটি শূন্য-স্থিতি ফিরে দেয় না। সুতরাং দেখে মনে হচ্ছে আপনি নিঃশর্তভাবে চালাতে পারেন --dry-runএবং changed_whenআমার মনে হয় যে সত্যিকারের স্বতঃপরিবর্তনকারী কলটির বিরুদ্ধে চেক করতে পারেন ।
thom_nic

@ থম_নিকে আমার মনে হয় আপনি ঠিক বলেছেন আমি এটির মতো কাঠামো তৈরি করতে সক্ষম হয়েছি: - নাম: অটোমোরভ অব্যবহৃত প্যাকেজগুলি হয়ে যায়: হ্যাঁ কমান্ড: apt-get -y স্বতঃসংশোধন রেজিস্টার: চেক_আউটোরমোভ পরিবর্তিত হয়েছে: "" প্যাকেজগুলি "চেক_আউটোরমোভ.স্টডআউটে" অপসারণ করা হবে "
লুক হোর্স্টন

2

প্যাকেজগুলির পরিবর্তনটি হাইলাইট করে এমন একটি প্রকরণ (প্রথম কাজটি উপযুক্তভাবে রঙিন সবুজ বা হলুদ হবে):

  - name: check if packages need to be autoremoved
    shell: apt-get --dry-run autoremove | grep "to remove" | sed "s/^[0-9]\+ upgraded, [0-9]\+ newly installed, \([0-9]\+\) to remove and [0-9]\+ not upgraded\.$/\1/"
    register: check_autoremove
    changed_when: check_autoremove.stdout != "0"

  - name: autoremove unused packages
    command: apt-get -y autoremove
    when: check_autoremove.changed

আপনার "সেড" স্ট্রিংয়ের সমস্যাটি এটি "পোর্টেবল" নয়। apt-get --dry-run autoremove | grep "to remove"উবুন্টু ১৪.০৪-তে রিটার্ন কার্যকর করা হয় , 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.তবে উবুন্টু ১৫.০৪-তে এটি ফেরত দেয় 0 to upgrade, 0 to newly install, 0 to remove and 0 not to upgrade.যা আপনার ছেদ মেলে না।
হিউজেনস

পরিবর্তিত পাঠ্যের সাথে মেলে সবসময় শক্ত সম্ভবত এর installসাথে install(ed)?বা এর মতো কিছু প্রতিস্থাপন করুন ।
মার্টিন ট্যাপ

1

আমি এই সরলীকৃত পদ্ধতিটি পছন্দ করি এবং আমি আমার জন্য কিছু চেক এবং মুদ্রণ বার্তা যুক্ত করি।

#!/usr/bin/env ansible-playbook
---

- name: Autoremove 'apt' package for Debian, Ubuntu
  hosts: all

  pre_tasks:
    - name: check storage space - before
      shell: df -h
      register: check_storage_space_before

    - name: print storage space
      debug:
        msg: "{{ check_storage_space_before.stdout_lines }}"

    - name: apt autoremove check 
      command: apt-get -y --dry-run autoremove
      register: apt_autoremove_output

    - name: print apt autoremove packages
      debug:
        msg: "{{ apt_autoremove_output.stdout_lines }}"

  tasks:    
    - name: autoremove unused packages
      become: yes
      command: apt-get -y autoremove
      changed_when: "'The following packages will be REMOVED' in apt_autoremove_output.stdout"

  post_tasks:
    - name: check storage space - after
      shell: df -h
      register: check_storage_space_after

    - name: print storage space
      debug:
        msg: "{{ check_storage_space_after.stdout_lines }}"

# vim: ft=ansible :

কর্টোপি এবং ডেভ জেমস মিলার জন্য আপনাকে ধন্যবাদ ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.