شما هنوز به سیستم وارد نشده اید.

#1 2016-03-01 15:20:20

LinArcX
عضو
ثبت شده: 2015-09-18
ارسال ها: 800

حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

دوستان سلام
من دارم کانکی آرچ ایران(I.AUC.ver2) رو توسعه میدم..میخوام یه قابلیت بهش اضافه کنم که بره حجم آپدیت سری بعد رو برام بیاره.(البته با دستور checkupdates میشه تعداد بسته هایی که قراره واسه سری بعد آپدیت بشن رو میاره)بعد،شخص تو هر لحظه بتونه ببینه حجم آپدیت های سری بعدشو که هم سریعه و هم کاربر پسند smile
ایا نیاز به نوشتن اسکریپت خاصی هست؟

آخرین ویرایش توسط LinArcX (2018-01-16 13:27:06)

آفلاین

#2 2016-03-01 15:36:42

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

این chekupdates منو یاد یه اسکریپت که خیلی وقت پیش نوشته بودم انداخت.
یه کار باحال میشه انجام داد.
checkupdates اسم پکیجهایی که نیاز به آپدیت دارند رو به شما میده، شما میدیش به پکمن با سوئیچ Sp- بعد که پکمن لینکش رو داد بهت یه بار sort میکنی و یه بار هم unique تا duplicate نداشته باشیم، بعد با یه حلقه یکی یکی این لینکها رو میدی به اسکریپت زیر تا size رو بده، در نهایت هم واسه جمع زدنشون از awk یا bc استفاده میکنیم.
خیلی هم عالی میشه، منتها نمیدونم پرفورمنس کار چه جوریه،( باید یه بار checkupdates  رو بخونم ببینم راهی نیست با یه بار خوندن لیست پکیجها حجمشون رو هم بهمون بده یا نه)

اینم اسکریپت:

>>>cat .config/MINE_SCRIPTS/linksize 
#!/bin/bash
#In this case instead of using PIPESTATUS Array for checking previous command exit code,I try this method:
PC=$(wget --spider "$1" 2>&1)
if [ $? -ne 0 ];then
	echo -e "\033[1m The Interested File Doesn't Exist.\033[0m"
	exit 1
else 
	awk '/^Length/ {gsub(/\(|\)/,"",$3);printf("\033[1mSize: %s\033[0m\n",$3)}' <<< "$PC"
	exit 0
fi

Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#3 2016-03-01 15:51:08

LinArcX
عضو
ثبت شده: 2015-09-18
ارسال ها: 800

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

دمت گرم احسان ..رو هوا که میگن طرف اسکریپت میزنه تویی ها big_smile
فقط یه چیزی..یه ایده دیگه به ذهن خودم رسید.دیدی وقتی دستور sudo pacman -Syu رو میزنیم حجم آپدیت رو میاره.نمیشه از اونجا اطلاعات کش رفت؟ smile

آفلاین

#4 2016-03-01 15:57:33

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

خب اگه با sudo  مشکلی نداری، چرا که نه.
خروجی رو پایپ کن به یه چیزی مثه grep  و حجم رو بدست بیار.
منتها فکر میکنم بایستی دوتا y بزنی توی دستور که همیشه تازه ترین ها رو داشته باشی.


Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#5 2016-03-01 16:13:31

LinArcX
عضو
ثبت شده: 2015-09-18
ارسال ها: 800

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

این بحث sudo رو میشه اوکی ش کرد..میشه اول چک کرد دید کاربر تو گروه کاربری تعریف شده sudo هست یا نه؟
بعد اینجا فک نمیکنم دستور مشکل سازی باشه که نشه sudo زد.درسته احسان جان؟

آفلاین

#6 2016-03-01 16:21:12

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

آره میشه، ولی از اون بهتر fakeroot هه.(البته فکر میکنما. اولین باره که دیدمش، هنوز man-page اِش رو کامل نخوندم)
توی checkupdates استفاده شده، به نظرم بتونه به این کار ربط داشته باشه. به هر حال من روش کار میکنم، بحثه جالبیه.


Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#7 2016-03-01 16:25:00

LinArcX
عضو
ثبت شده: 2015-09-18
ارسال ها: 800

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

یه چیز دیگه هم هست..من این کانکی رو میخوام به اشتراک بذارم..اینکه بدون اطلاع کاربر sudo بزنم یه کار غیر معقول به نظر میاد.در هر صورت دو راه پیش رو دارم:
1-یا از اسکریپتی که تو پست دوم تون نام بردین استفاده کنم یا
2-این مبحث fakeroot رو باید منم بشینم بخونم.
اینکه سرعت کدوم بالاتره بازم این جای بحث داره و کنکاش

آخرین ویرایش توسط LinArcX (2016-03-01 16:25:11)

آفلاین

#8 2016-03-01 16:47:26

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

این fakeroot یه جورایی گیج کنندست( لااقل واسه من)
چیزی که من فهمیدم اینه که fakeroot یه جورایی بهت یه شل میده که توی اون شل هر فایلی بسازی صاحبش میشه روت.اما به محض اینکه از اون شل بیای بیرون اون فایل سر جاش میمونه اما صاحبش میشه کسی که fakeroot کرده بود.
هنوز هنگم که چی تو کله برنامه نویسش بوده وقتی اینو مینوشته؟؟؟


Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#9 2016-03-01 17:39:36

LinArcX
عضو
ثبت شده: 2015-09-18
ارسال ها: 800

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

منم یه سری سرچ زدم.این بهترینش بود:


Imagine that you are a developer/package maintainer, etc. working on a remote server. You want to update the contents of a package and rebuild it, download and customize a kernel from kernel.org and build it, etc. While trying to do those
things, you'll find out that some steps require you to have root rights (UID and GID 0) for different reasons (security, overlooked permissions, etc). But it is not possible to get root rights, since you are working on a remote machine (and
many other users have the same problem as you). This is what exactly fakeroot does: it pretends an effective UID and GID of 0 to the environment which requires them.
In practice you never get real root privileges (in opposite to su and sudo that you mention).

در واقع یه شل میده بهت که حس میکنی روتی توش و کلیه دسترسی ها رو داری.
اما به محض اینکه بیای بیرون دیگه نمیتونی اون کارا رو کنی و اون دسترسی ها رو داشته باشی.
حالا سوال اینکه اون کاری که من میخوام کنم رو چجوری باید انجام بدم؟
با چه دستوری میشه رفت تو fakeroot?

آخرین ویرایش توسط LinArcX (2016-03-01 17:42:50)

آفلاین

#10 2016-03-01 18:15:08

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

fakeroot, create a fake root environment.
   usage: fakeroot [-l|--lib fakerootlib] [-f|--faked fakedbin]
                   [-i file] [-s file] [-u|--unknown-is-real]
		   [-b|--fd-base fd] [-h|--help] [-v|--version]
                   [--] [command]

به نظر من که همون checkupdates خیلی خوبه، خداییش خیلی قشنگ حل کرده مسئله رو.
همون کاری که توی پست اولم گفتم خوبه، به نظرم.

آخرین ویرایش توسط ehsan_faal (2016-03-01 18:15:32)


Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#11 2016-03-01 20:56:09

Arcush
Moderator
ثبت شده: 2015-09-15
ارسال ها: 1,409

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

بهترین منبع برای fakeroot خود man fakeroot هست. fakeroot رو دقیقا میشه بمنزله ذهن سیستم عامل تصور کرد. شکل جهش یافتش همون junest هست و یک شکل سادهاش همون pkgdirی هست که موقع ساختن بسته درست میشه.  درمورد sudo به نظرم بهتره که توی چنین چیزهائی اصلا ازش استفاده نکنیم. به اضافه اینکه حتی اگه از -Suy استفاده کنیم، چند مگابایت حجم مصرف خواهد شد و شاید برای چندین بار در روز حداقل برای ما خوشایند نیست. big_smile

آفلاین

#12 2016-03-01 21:20:49

LinArcX
عضو
ثبت شده: 2015-09-18
ارسال ها: 800

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

آره اینو بذارین در کنار اینکه  وقتی دستور آپدیت با سوییچ -Syu رو میزنیم یه تاییدیه رمز عبور رو میگیره..اونو کجای دلم بذارم؟ big_smile

آفلاین

#13 2016-03-01 22:01:36

LinArcX
عضو
ثبت شده: 2015-09-18
ارسال ها: 800

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

اقا من به یه جاهایی رسیدم واسه در آوردن خروجی آپدیت سری بعد.
ابتدا با دستور fakeroot به روت مجازی میریم.بعد دستور زیر رو زدم یه بار:

pacman -Syu | grep Upgrade | cut -c 29-40

جالبه سری اول برام آورد خروجی رو اما سری های بعد هی این فایله لاک میشد:

/var/lib/pacman/db.lck 

بعد تازه دستور بالا رو بزنید پسورد روت رو میخواد ازتون(با اینکه توی fakeroot هستین!)
اما اگه دستور زیر رو بزنید:

pacman -Syu | grep Upgrade 

قشنگ اون خط مربوطه رو براتون میاره..سوال اینجاست که چرا به cut پایپ میشه سودو میخواد؟؟!!

آخرین ویرایش توسط LinArcX (2016-03-01 22:02:03)

آفلاین

#14 2016-03-01 23:46:25

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

شاید دستکاری کردن فایل sudoer هم بد نباشه ها.


Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#15 2016-04-01 00:22:49

LinArcX
عضو
ثبت شده: 2015-09-18
ارسال ها: 800

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

ehsan_faal نوشته است که:

این chekupdates منو یاد یه اسکریپت که خیلی وقت پیش نوشته بودم انداخت.
یه کار باحال میشه انجام داد.
checkupdates اسم پکیجهایی که نیاز به آپدیت دارند رو به شما میده، شما میدیش به پکمن با سوئیچ Sp- بعد که پکمن لینکش رو داد بهت یه بار sort میکنی و یه بار هم unique تا duplicate نداشته باشیم، بعد با یه حلقه یکی یکی این لینکها رو میدی به اسکریپت زیر تا size رو بده، در نهایت هم واسه جمع زدنشون از awk یا bc استفاده میکنیم.
خیلی هم عالی میشه، منتها نمیدونم پرفورمنس کار چه جوریه،( باید یه بار checkupdates  رو بخونم ببینم راهی نیست با یه بار خوندن لیست پکیجها حجمشون رو هم بهمون بده یا نه)

اینم اسکریپت:

>>>cat .config/MINE_SCRIPTS/linksize 
#!/bin/bash
#In this case instead of using PIPESTATUS Array for checking previous command exit code,I try this method:
PC=$(wget --spider "$1" 2>&1)
if [ $? -ne 0 ];then
	echo -e "\033[1m The Interested File Doesn't Exist.\033[0m"
	exit 1
else 
	awk '/^Length/ {gsub(/\(|\)/,"",$3);printf("\033[1mSize: %s\033[0m\n",$3)}' <<< "$PC"
	exit 0
fi

اجراش کردم و این خروجی رو بهم داد:

[saeed@saeed Scripts]$ ./nex.sh 
 The Interested File Doesn't Exist.

چرا؟

آفلاین

#16 2016-04-04 15:31:21

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

هیچی بهش پاس ندادی خب.
باید یه لینک بدی بهش تا حجمش رو بده.


Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#17 2016-04-05 10:17:20

LinArcX
عضو
ثبت شده: 2015-09-18
ارسال ها: 800

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

چه لینکی؟

آفلاین

#18 2016-04-05 10:25:01

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

خب اینو که قبلا گفتم، لینک رو از سوئیچ Sp- پکمن میگیری و میدی به این اسکریپت.


Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#19 2016-04-07 13:22:02

LinArcX
عضو
ثبت شده: 2015-09-18
ارسال ها: 800

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

اسکریپت شما رو یکم تغییر دادم به طوری که خودش بره لینک ها رو در بیاره.به این صورت:

function nextUpdate()
{
num=$(checkupdates | wc -l)
for i in $(seq 1 $num); do
	  record=$(pacman -Sp $(checkupdates | awk "NR == $i"  | cut -d" " -f1))
	  PC=$(wget --spider $record 2>&1)
	  awk '/^Length/ {gsub(/\(|\)/,"",$3);printf("\033[1mSize: %s\033[0m\n",$3)}' <<< "$PC"
done
}

و اینم نتیجه ش:

Enter Your Selection: 8   
Size: 433K
Size: 63K
Size: 941K
Size: 267K
Size: 8.2M
Size: 632K
Size: 208K
Size: 1.2M
error: failed to prepare transaction (could not satisfy dependencies)
Size: 17K

یه نکته که خیلی تو ذوق میزنه اینه که مث اینکه نتونسته حجم یکی از بسته ها رو به دست بیاره.:( راه حل این مورد چیه؟
نکته دوم اینکه چکار کنم اینا همه رو با هم جمع بزنه و درنهایت یه عدد بهم تحویل بده..اون K و M ها رو چجوری بهش حالی کنم با هم جدا گونه جمع بزنه؟

آخرین ویرایش توسط LinArcX (2016-04-07 13:23:33)

آفلاین

#20 2016-04-07 13:41:38

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

یه لطفی میکنی بهم؟
یه خروجی از checkupdates رو اینجا بذار تا طبق اون اسکریپتشو بنویسم.


Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#21 2016-04-07 13:48:37

LinArcX
عضو
ثبت شده: 2015-09-18
ارسال ها: 800

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

خدمت شما:

[saeed@saeed ~]$ checkupdates 
alsa-lib 1.1.0-1 -> 1.1.1-1
alsa-plugins 1.1.0-3 -> 1.1.1-1
alsa-utils 1.1.0-2 -> 1.1.1-1
bluez 5.38-2 -> 5.39-1
bluez-libs 5.38-2 -> 5.39-1
bluez-utils 5.38-2 -> 5.39-1
device-mapper 2.02.146-1 -> 2.02.148-1
dhclient 4.3.3.p1-1 -> 4.3.4-1
ffmpeg 1:3.0-1 -> 1:3.0.1-1
gdk-pixbuf2 2.32.3-1 -> 2.34.0-1
graphite 1:1.3.7-1 -> 1:1.3.8-1
inputproto 2.3.1-1 -> 2.3.2-1
iso-codes 3.66-1 -> 3.67-1
lib32-harfbuzz 1.2.3-1 -> 1.2.4-1
libnm-glib 1.0.10-2 -> 1.0.12-1
libreoffice-fresh 5.1.1-2 -> 5.1.1-3
librsvg 2:2.40.13-1 -> 2:2.40.15-1
libsodium 1.0.8-1 -> 1.0.9-1
libtorrent-rasterbar 1:1.0.8-2 -> 1:1.0.9-1
lvm2 2.02.146-1 -> 2.02.148-1
metasploit 4:37600.72bde63-1 -> 4:37780.72d631a-1
mkvtoolnix-cli 9.0.0-1 -> 9.0.1-1
mkvtoolnix-gui 9.0.0-1 -> 9.0.1-1
mpv 1:0.16.0-1 -> 1:0.16.0-2
networkmanager 1.0.10-2 -> 1.0.12-1
pacman-mirrorlist 20160320-1 -> 20160404-1
python-urllib3 1.14-1 -> 1.15-1
python2-numpy 1.10.4-1 -> 1.11.0-1
python2-pillow 3.1.1-1 -> 3.2.0-1
python2-pyopenssl 0.15.1-3 -> 16.0.0-1
vim 7.4.1639-1 -> 7.4.1689-1
vim-runtime 7.4.1639-1 -> 7.4.1689-1
xorg-server 1.18.2-4 -> 1.18.3-1
xorg-server-common 1.18.2-4 -> 1.18.3-1
xorg-server-xwayland 1.18.2-4 -> 1.18.3-1
xorg-xinit 1.3.4-3 -> 1.3.4-4

اینم خروجی کامل اسکریپت بالا:

Enter Your Selection: 8
Size: 433K
Size: 63K
Size: 941K
Size: 267K
Size: 8.2M
Size: 632K
Size: 208K
Size: 78K
Size: 2.2M
Size: 175K
Size: 701K
Size: 87M
Size: 118K
Size: 267K
Size: 1.0M
Size: 18M
Size: 3.2M
Size: 1.8M
Size: 918K
Size: 2.2M
Size: 5.3K
Size: 100K
Size: 2.2M
Size: 475K
Size: 5.0M
Size: 1.2M
error: failed to prepare transaction (could not satisfy dependencies)
Size: 17K
Enter To Continue...

آفلاین

#22 2016-04-07 14:14:58

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

این جواب نمیده؟

#!/usr/bin/bash

awk '{print $1}' update | while read -r ITEM
do 
        pacman -Sp $ITEM 2>/dev/null
done | sort | uniq | while read -r LINK
do
        tmpVar=$(wget --spider $LINK )
        awk '/^Length/ {print $2}' <<< "$tmpVar"
done | paste -sd+ | sed -e 's/^/\(/' -e 's/$/\)\/\(1024*1024\)/' | bc -l

update همون خروجیه chaeckupdates هه.

آخرین ویرایش توسط ehsan_faal (2016-04-07 14:19:44)


Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#23 2016-04-07 14:54:41

LinArcX
عضو
ثبت شده: 2015-09-18
ارسال ها: 800

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

جواب نداد:

Enter Your Selection: 9
./ArchUtilOld.sh: line 188: bc: command not found
awk: fatal: cannot open file `alsa-lib' for reading (No such file or directory)
Enter To Continue...

آفلاین

#24 2016-04-07 17:53:07

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

واللا این اروری که گرفتی برام غیر منطقیه، این پکیج توی لیست پکیجهایی که باید آپدیت میشدند هست و لینکش رو هم پکمن میده و سایزش رو wget میگیره، درک نمیکنم چرا ارور داده.
راستی  bc  رو هم نصب کن

آخرین ویرایش توسط ehsan_faal (2016-04-07 22:58:43)


Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#25 2016-04-08 16:58:45

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

یه سوتیه خیلی گنده که ما دادیم این بود که از اول از checkupdates استفاده کردیم، اصلا نمیدونم چرا از اول استفاده ازش مطرح شد.
checkupdates به ما میگه فلان بسته آپدیت میشه از این ورژن به ورژن بالاتر، در حالی که ما اصلا به این اطلاعات اضافی احتیاج نداریم.
همون اسکریپت اولی که بهتون دادم رو این جوری تغییر بدید:

#!/usr/bin/bash

pacmanlogs="$(pacman -Sup --color=never | sed -n '2,$ p')"

function getSize(){
        local wgetlogs="$(wget --spider "$1")"
        awk '/^Length/ {print $2}' <<< "$wgetlogs"
}

function totalSize(){
        if [ -n "$1" ];then
                while read -r LINK
                do
                        getSize "$LINK"
                done | paste -sd+ | sed -e 's/^/\(/' -e 's/$/\)\/\(1024*1024\)/' | bc -l
        else
                echo "0"
        fi
}

function getresult(){
        local result=$(totalSize "$pacmanlogs")
        if [ $result -ne 0 ];then
                echo "Next Update Size: $result MiB."
                return 0
        else
                echo "there is nothing to do"
                return 1
        fi
}
getresult

اینم نتایج خودم:

[0:~]$./updateSize.sh 
there is nothing to do
[1:~]$

آخرین ویرایش توسط ehsan_faal (2016-04-08 17:02:29)


Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

پانوشت انجمن

پشتیبانی توسط تیم آرچ لینوکس ایران و نیرو گرفته با FluxBB